示例#1
0
        public ErrorHandlingMiddleware(RequestDelegate next, ILogger <ErrorHandlingMiddleware> logger)
        {
            Affirm.ArgumentNotNull(logger, "logger");

            _next   = next;
            _logger = logger;
        }
示例#2
0
        public IStateMachine Start(IStateMachineDefinition def, ISMParameters parameters, string key)
        {
            Affirm.ArgumentNotNull(key, "key");
            var sm = _sMFactory.Get(key);

            return(Start(def, parameters, sm));
        }
示例#3
0
        private ITransition GetNextTransition(IStateMachine sm, ISMParameters parameters)
        {
            Affirm.ArgumentNotNull(sm, "sm");

            var possibleTransitions = sm.Definition.GetTransitions(sm.CurrentState);

            if (possibleTransitions == null)
            {
                throw new InvalidOperationException("{0}: no transitions found {1}".FormIt(sm));
            }

            var triggers = possibleTransitions.Select(_ => new { trigger = _.Trigger, tran = _ }).ToList();

            var theOne = triggers.Where(_ => _.trigger.Invoke(_.tran, parameters)).ToList();

            if (!theOne.Any())
            {
                throw new NoTrueTriggerException(sm.SmId, "{0}: no true trigger result found for state {1}".FormIt(sm, sm.CurrentStateId));
            }

            if (theOne.Count() > 1)
            {
                throw new TooManyTriggersException(theOne.Select(_ => _.trigger).ToList(), sm.SmId, "{0}: too many triggers are true {1}".FormIt(sm, sm.CurrentStateId));
            }

            return(theOne.First().tran);
        }
        public void SetDefinition(IStateMachineDefinition definition)
        {
            Affirm.ArgumentNotNull(definition, "definition");

            definition.Validate();

            Definition = definition;
        }
        /// <summary>
        /// Executes action on instance of <see cref="ISMBaseElement"/>
        /// </summary>
        public static T Setup <T>(this T t, Action <T> action) where T : IRoot
        {
            Affirm.ArgumentNotNull(action, "action");

            action(t);

            return(t);
        }
示例#6
0
        public MSSQLSourceSchema(IUnitOfWorkFactory uowf, IExtractConfiguration globalConfiguration)
        {
            Affirm.ArgumentNotNull(uowf, "uowf");

            _uowFactory          = uowf;
            _globalConfiguration = globalConfiguration;
            WasInit = false;
        }
示例#7
0
        public void ExitState(IState state, ISMParameters parameters)
        {
            Affirm.ArgumentNotNull(state, "state");

            if (state.ExitActions != null)
            {
                InvokeActionList(state, parameters, state.ExitActions);
            }
        }
示例#8
0
        public ObjectMetaDataProvider(IUnitOfWorkFactory uowf, ILog log, IMetaDataInitializer initializer)
        {
            Affirm.ArgumentNotNull(uowf, "uowf");
            Affirm.ArgumentNotNull(log, "log");

            _log         = log;
            _uowFactory  = uowf;
            _initializer = initializer;
        }
        public TableToExtract(string tableName, ExtractStrategy extractStrategy, SqlBuildStrategy sqlBuildStrategy)
        {
            Affirm.NotNullOrEmpty(tableName, "tableName");
            Affirm.ArgumentNotNull(extractStrategy, "extractStrategy");
            Affirm.ArgumentNotNull(sqlBuildStrategy, "sqlBuildStrategy");

            TableName        = tableName;
            ExtractStrategy  = extractStrategy;
            SqlBuildStrategy = sqlBuildStrategy;
        }
示例#10
0
        public static IList <ITransition> GetTransitions(this IStateMachineDefinition def, IState state)
        {
            Affirm.ArgumentNotNull(state, "state");

            if (def.Transitions == null)
            {
                return(null);
            }

            return(GetTransitions(def, state.id));
        }
示例#11
0
        private void InvokeActionList(IState state, ISMParameters parameters, IEnumerable <IActionHolder> source)
        {
            Affirm.ArgumentNotNull(state, "state");

            if (source != null)
            {
                foreach (var act in GetOrdered(source))
                {
                    act.Invoke(parameters);
                }
            }
        }
        public DependencyBuilder(IUnitOfWorkFactory unitOfWorkFactory, ISourceSchema schema, ILog log, IExtractConfiguration configuration)
        {
            Affirm.ArgumentNotNull(unitOfWorkFactory, "unitOfWorkFactory");
            Affirm.ArgumentNotNull(schema, "schema");
            Affirm.ArgumentNotNull(log, "log");
            Affirm.ArgumentNotNull(configuration, "configuration");

            _unitOfWorkFactory = unitOfWorkFactory;
            _schema            = schema;
            _log           = log;
            _configuration = configuration;
        }
示例#13
0
        public MSSQLSourceSchema(IUnitOfWorkFactory uowf, IExtractConfiguration globalConfiguration, ILog log, IObjectMetaDataProvider objectMetaDataProvider)
        {
            Affirm.ArgumentNotNull(uowf, "uowf");
            Affirm.ArgumentNotNull(log, "log");
            Affirm.ArgumentNotNull(objectMetaDataProvider, "objectMetaDataProvider");

            _log                    = log;
            _uowFactory             = uowf;
            _globalConfiguration    = globalConfiguration;
            _objectMetaDataProvider = objectMetaDataProvider;
            WasInit                 = false;
        }
示例#14
0
        public SMService(IStateProcessor stateProcessor, IPersistenceService persistenceService, ISMFactory sMFactory, IServiceProvider serviceProvider)
        {
            Affirm.ArgumentNotNull(stateProcessor, "stateProcessor");
            Affirm.ArgumentNotNull(persistenceService, "persistenceService");
            Affirm.ArgumentNotNull(sMFactory, "sMFactory");
            Affirm.ArgumentNotNull(serviceProvider, "serviceProvider");

            _stateProcessor     = stateProcessor;
            _persistenceService = persistenceService;
            _sMFactory          = sMFactory;
            _serviceProvider    = serviceProvider;
        }
        public PackageProcessorController(ISourceSchema schema, ILog log, ISqlBuilder sqlBuilder, IDependencyBuilder dependencyBuilder)
        {
            Affirm.ArgumentNotNull(schema, "schema");
            Affirm.ArgumentNotNull(log, "log");
            Affirm.ArgumentNotNull(sqlBuilder, "sqlBuilder");
            Affirm.ArgumentNotNull(dependencyBuilder, "dependencyBuilder");

            _schema            = schema;
            _sqlBuilder        = sqlBuilder;
            _log               = log;
            _dependencyBuilder = dependencyBuilder;
        }
示例#16
0
        private IStateMachine MoveToState(IStateMachine sm, IState state, ISMParameters parameters)
        {
            Affirm.ArgumentNotNull(sm, "sm");
            Affirm.ArgumentNotNull(state, "state");

            Log.Debug("{0} is going to be moved to state {1}".FormIt(sm, state.id));

            _stateProcessor.ProcessState(state, parameters);

            sm.SetCurrentState(state);

            return(sm);
        }
示例#17
0
        IStateMachine Start(IStateMachineDefinition def, ISMParameters paramters, IStateMachine sm)
        {
            Affirm.ArgumentNotNull(def, "definition");
            Affirm.ArgumentNotNull(sm, "machine");

            def.Validate();

            Log.Debug("SM with {0} is going to be started".FormIt(sm.GetType()));

            sm.SmId = Guid.NewGuid();
            _persistenceService.BuildUpDefinition(sm, def);

            var initialState = sm.Definition.GetInitialState();

            if (initialState == null)
            {
                throw new InvalidOperationException("{0}: can not find intitial state".FormIt(sm));
            }

            return(MoveToState(sm, initialState, paramters));
        }
示例#18
0
        public IStateMachine Start(IStateMachineDefinition def, ISMParameters parameters, Type smType)
        {
            Affirm.ArgumentNotNull(smType, "smType");
            var sm = _serviceProvider.GetService(smType) as IStateMachine;

            if (sm == null)
            {
                throw new ArgumentNullException("Given type {0} is not assingable from IStateMachine or can not be resolved".FormIt(smType));
            }

            try
            {
                Start(def, parameters, sm);
            }
            catch
            {
                sm?.Dispose();

                throw;
            }

            return(sm);
        }
示例#19
0
        public IStateMachine Push(IStateMachine sm, ISMParameters parameters)
        {
            Affirm.ArgumentNotNull(sm, "sm");

            Log.Debug("{0} going to be pushed".FormIt(sm));

            if (sm.Finished)
            {
                throw new InvalidOperationException("{0} is finished already! can not push!".FormIt(sm));
            }

            _stateProcessor.ExitState(sm.CurrentState, parameters);

            var nextState = GetNextTransition(sm, parameters).TargetStateId;

            var state = sm.Definition.GetStateById(nextState);

            if (state == null)
            {
                throw new InvalidOperationException("{0}: State {1} not found!".FormIt(sm, nextState));
            }

            return(MoveToState(sm, state, parameters));
        }
示例#20
0
        public static void CheckState(this IStateMachineDefinition def, IState state)
        {
            Affirm.ArgumentNotNull(state, "state");

            def.CheckState(state.id);
        }
示例#21
0
        public virtual void BuildUpDefinition(IStateMachine sm, IStateMachineDefinition def)
        {
            Affirm.ArgumentNotNull(sm, "sm");
            Affirm.ArgumentNotNull(def, "def");

            def.Validate();

            sm.CurrentState = def.GetStateById(sm.CurrentStateId);

            var childContainer = _serviceProvider.CreateScope();

            //childContainer.RegisterInstance(typeof(IStateMachine), sm);
            //childContainer.RegisterInstance(sm.GetType(), sm);
            sm.Container = childContainer;

            var actionFabric  = sm.Container.ServiceProvider.GetRequiredService <IActionFabric>();
            var triggerFabric = sm.Container.ServiceProvider.GetRequiredService <ITriggerFabric>();

            Action <IEnumerable <IActionHolder> > buildUpActions = (s) =>
            {
                foreach (var act in s)
                {
                    act.NestedAction = actionFabric.Get(act.Code);
                    if (act.NestedAction == null)
                    {
                        throw new StateMachineException(sm.SmId, $"Can not resolve {act.Code} from ation fabric");
                    }
                    act.NestedAction.StateMachine = sm;
                }
            };


            foreach (var state in def.States)
            {
                state.StateMachine = sm;

                if (state.EnterActions != null)
                {
                    buildUpActions(state.EnterActions);
                }

                if (state.ExitActions != null)
                {
                    buildUpActions(state.ExitActions);
                }
            }

            foreach (var tran in def.Transitions)
            {
                tran.StateMachine = sm;

                if (tran.Trigger != null &&
                    !string.IsNullOrEmpty(tran.Trigger.Code))
                {
                    var trigger = triggerFabric.Get(tran.Trigger.Code);

                    if (trigger == null)
                    {
                        throw new StateMachineException(sm.SmId, $"Can not resolve {tran.Trigger.Code} from trigger fabric");
                    }

                    trigger.StateMachine      = sm;
                    tran.Trigger.NestedAction = trigger;
                }
            }

            sm.SetDefinition(def);
        }
示例#22
0
        public BasePersistenceService(IServiceProvider serviceProvider)
        {
            Affirm.ArgumentNotNull(serviceProvider, nameof(serviceProvider));

            _serviceProvider = serviceProvider;
        }