private static void OnAfterDataUpdated(object sender, DataEventArgs dataEventArgs)
        {
            if (GetProcessControllersCounter() > 0)
            {
                return;
            }

            if (dataEventArgs.Data is IPublishControlled)
            {
                IPublishProcessController controller = GetProcessController <IPublishProcessController>(dataEventArgs.Data.DataSourceId.InterfaceType);

                if (controller != null)
                {
                    bool callAuxilaries = controller.OnAfterDataUpdated(dataEventArgs.Data);

                    if (callAuxilaries)
                    {
                        IEnumerable <IPublishControlledAuxiliary> publishControlledAuxiliaries = GetPublishControlledAuxiliaries(dataEventArgs.DataType);

                        foreach (IPublishControlledAuxiliary publishControlledAuxiliary in publishControlledAuxiliaries)
                        {
                            publishControlledAuxiliary.OnAfterDataUpdated(dataEventArgs.Data);
                        }
                    }
                }
            }
        }
        /// <exclude />
        public static void ValidateTransition(IData data, string status)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            IPublishProcessController controller = GetProcessController <IPublishProcessController>(data.DataSourceId.InterfaceType);

            if (controller == null)
            {
                throw new ArgumentException(string.Format("The type '{0}' is not registred process controller", data.DataSourceId.InterfaceType));
            }

            controller.ValidateTransition(data, status);
        }
        /// <exclude />
        public static IDictionary <string, string> GetValidTransitions(IData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            IPublishProcessController controller = GetProcessController <IPublishProcessController>(data.DataSourceId.InterfaceType);

            if (controller == null)
            {
                throw new ArgumentException(string.Format("The type '{0}' is not registred process controller", data.DataSourceId.InterfaceType));
            }

            return(controller.GetValidTransitions(data));
        }