public static void Push(this IDispatcher dispatcher, Action <CommandComposite> configuration)
        {
            var composite = new CommandComposite();

            configuration(composite);
            dispatcher.Push(composite);
        }
Esempio n. 2
0
        protected ActionResult TryPush(Action <CommandComposite> configuration, Action <IncTryPushSetting> action = null)
        {
            var composite = new CommandComposite();

            configuration(composite);
            return(TryPush(composite, action));
        }
Esempio n. 3
0
        public virtual ActionResult Push()
        {
            var parameter = dispatcher.Query(new GetMvdParameterQuery()
            {
                Params = HttpContext.Request.Params
            });

            var commands = dispatcher.Query(new CreateByTypeQuery.AsCommands()
            {
                IncTypes          = parameter.Type,
                ModelState        = ModelState,
                ControllerContext = ControllerContext,
                IsComposite       = parameter.IsCompositeArray
            });

            var composite = new CommandComposite(commands);

            return(TryPush(commandComposite => dispatcher.Query(new MVDExecute(HttpContext)
            {
                Instance = composite
            }), composite, setting => setting.SuccessResult = () =>
            {
                var data = commands.Length == 1 ? commands[0].Result : commands.Select(r => r.Result);
                return IncodingResult.Success(data);
            }));
        }
Esempio n. 4
0
        public virtual async Task <ActionResult> Push()
        {
            var parameter = dispatcher.Query(new GetMvdParameterQuery()
            {
                Params = ControllerContext.GetNameValueCollection()
            });

            var commands = await new CreateMessageByType2.AsCommands
            {
                Provider    = _serviceProvider,
                IncTypes    = parameter.Type,
                Controller  = this,
                IsComposite = parameter.IsCompositeArray
            }.Execute();

            var composite = new CommandComposite(commands);

            return(await TryPushAsync(async commandComposite => await dispatcher.QueryAsync(new MVDExecuteAsync()
            {
                Instance = composite
            }), composite, setting => setting.SuccessResult = () =>
            {
                var data = commands.Length == 1 ? commands[0].Result : commands.Select(r => r.Result);
                return IncodingResult.Success(data);
            }));
        }
    public void CommandCompositeBase_Add_ReturnThis()
    {
        // Arrange
        var command = new Command();

        // Act
        var commandComposite = new CommandComposite();
        var actual           = commandComposite.Add(command);

        //Assert
        Assert.AreEqual(actual, commandComposite);
    }
Esempio n. 6
0
        public async Task PushAsyncInternal(CommandComposite composite)
        {
            bool isOuterCycle = !unitOfWorkCollection.Any();
            var  isFlush      = composite.Parts.Any(s => s is CommandBase || s is CommandBaseAsync);

            try
            {
                foreach (var groupMessage in composite.Parts.GroupBy(part => part.Setting, r => r))
                {
                    foreach (var part in groupMessage)
                    {
                        if (isOuterCycle)
                        {
                            if (part.Setting.UID == Guid.Empty)
                            {
                                part.Setting.UID = Guid.NewGuid();
                            }
                            part.Setting.IsOuter = true;
                        }
                        var unitOfWork = unitOfWorkCollection.AddOrGet(groupMessage.Key, isFlush);
                        foreach (var interception in interceptions)
                        {
                            interception().OnBefore(part);
                        }

                        await part.OnExecuteAsync(this, unitOfWork);

                        foreach (var interception in interceptions)
                        {
                            interception().OnAfter(part);
                        }

                        var isFlushInIteration = part is CommandBase || part is CommandBaseAsync;
                        if (unitOfWork.IsValueCreated && isFlushInIteration)
                        {
                            await unitOfWork.Value.FlushAsync();
                        }
                    }
                }
                if (isOuterCycle && isFlush)
                {
                    await this.unitOfWorkCollection.CommitAsync();
                }
            }
            finally
            {
                if (isOuterCycle)
                {
                    unitOfWorkCollection.Dispose();
                }
            }
        }
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values == null)
            {
                throw new ArgumentNullException(nameof(values));
            }

            var commands = values.OfType <ICommand>();

            var chain = new CommandComposite(commands);

            return(chain);
        }
        protected ActionResult TryPush(Action <CommandComposite> push, CommandComposite composite, Action <IncTryPushSetting> action = null, bool?isAjax = null)
        {
            var setting = new IncTryPushSetting();

            action.Do(r => r(setting));

            Func <ActionResult> defaultSuccess = () => View(composite.Parts[0]);
            var isActualAjax = isAjax.GetValueOrDefault(HttpContext.Request.IsAjaxRequest());

            if (isActualAjax)
            {
                defaultSuccess = () => IncodingResult.Success();
            }
            var success = setting.SuccessResult ?? defaultSuccess;

            Func <IncWebException, ActionResult> defaultError = (ex) => View(composite.Parts[0]);

            if (isActualAjax)
            {
                defaultError = (ex) => IncodingResult.Error((ModelStateDictionary)ModelState);
            }
            var error = setting.ErrorResult ?? defaultError;

            if (!ModelState.IsValid)
            {
                return(error(IncWebException.For(string.Empty, string.Empty)));
            }

            try
            {
                push(composite);
                return(success());
            }
            catch (IncWebException exception)
            {
                foreach (var pairError in exception.Errors)
                {
                    foreach (var errorMessage in pairError.Value)
                    {
                        ModelState.AddModelError(pairError.Key, errorMessage);
                    }
                }

                return(error(exception));
            }
        }
    public void CommandCompositeBase_Add_Exception()
    {
        // Arrange
        var actual = false;

        // Act
        var compositeCommand = new CommandComposite();

        try
        {
            compositeCommand.Add(null);
        }
        catch (ArgumentNullException)
        {
            actual = true;
        }

        //Assert
        Assert.IsTrue(actual);
    }
Esempio n. 10
0
        protected ActionResult TryPush(CommandComposite composite, Action <IncTryPushSetting> action = null)
        {
            var setting = new IncTryPushSetting();

            action.Do(r => r(setting));

            Func <ActionResult> defaultSuccess = () => View(composite.Parts[0].Message);

            if (HttpContext.Request.IsAjaxRequest())
            {
                defaultSuccess = () => IncodingResult.Success();
            }
            var success = setting.SuccessResult ?? defaultSuccess;

            Func <IncWebException, ActionResult> defaultError = (ex) => View(composite.Parts[0].Message);

            if (HttpContext.Request.IsAjaxRequest())
            {
                defaultError = (ex) => IncodingResult.Error(ModelState);
            }
            var error = setting.ErrorResult ?? defaultError;

            if (!ModelState.IsValid)
            {
                return(error(IncWebException.Empty));
            }

            try
            {
                this.dispatcher.Push(composite);
                return(success());
            }
            catch (IncWebException exception)
            {
                ModelState.AddModelError(exception.Property, exception.Message);
                return(error(exception));
            }
        }
Esempio n. 11
0
        public virtual async Task <ActionResult> Query()
        {
            var parameter = dispatcher.Query(new GetMvdParameterQuery()
            {
                Params = ControllerContext.GetNameValueCollection()
            });
            var query = await new CreateMessageByType2()
            {
                Type = parameter.Type, Controller = this
            }.Execute();

            if (parameter.IsValidate && !ModelState.IsValid)
            {
                return(IncodingResult.Error(ModelState));
            }

            var composite = new CommandComposite((IMessage)query);

            return(await TryPushAsync(async commandComposite => await dispatcher.QueryAsync(new MVDExecuteAsync()
            {
                Instance = composite
            }), composite, setting => setting.SuccessResult = () => IncodingResult.Success(composite.Parts[0].Result), isAjax : true));
        }
Esempio n. 12
0
        public virtual ActionResult Query()
        {
            var parameter = dispatcher.Query(new GetMvdParameterQuery()
            {
                Params = HttpContext.Request.Params
            });
            var query = dispatcher.Query(new CreateByTypeQuery()
            {
                Type = parameter.Type, ControllerContext = this.ControllerContext, ModelState = ModelState
            });

            if (parameter.IsValidate && !ModelState.IsValid)
            {
                return(IncodingResult.Error(ModelState));
            }

            var composite = new CommandComposite((IMessage)query);

            return(TryPush(commandComposite => dispatcher.Query(new MVDExecute(HttpContext)
            {
                Instance = composite
            }), composite, setting => setting.SuccessResult = () => IncodingResult.Success(composite.Parts[0].Result), isAjax: true));
        }
 public void Push(CommandComposite composite)
 {
     _dispatcherImplementation.Push(composite);
 }
        public void Initialize(Action <InitScheduler> initializeAction = null)
        {
            var init = new InitScheduler();

            initializeAction.Do(action => action(init));
            Task.Factory.StartNew(() =>
            {
                try
                {
                    while (init.Conditional())
                    {
                        var dispatcher = IoCFactory.Instance.TryResolve <IDispatcher>();
                        foreach (var pair in dispatcher.Query(new GetExpectedDelayToSchedulerQuery
                        {
                            FetchSize = init.FetchSize,
                            Date = DateTime.UtcNow
                        }, init.Setting))
                        {
                            var ids = pair.Value.Select(r => r.Id).ToArray();
                            dispatcher.Push(new ChangeDelayToSchedulerStatusCommand
                            {
                                Ids    = ids,
                                Status = DelayOfStatus.InProgress
                            }, init.Setting);

                            try
                            {
                                var policy    = ActionPolicy.Direct();
                                var composite = new CommandComposite();
                                foreach (var delayToScheduler in pair.Value)
                                {
                                    var instanceCommand = delayToScheduler.Instance;
                                    composite.Quote(instanceCommand)
                                    .WithConnectionString(instanceCommand.Setting.Connection)
                                    .WithDateBaseString(instanceCommand.Setting.DataBaseInstance)
                                    .Mute(instanceCommand.Setting.Mute);
                                }

                                composite.Quote(new ChangeDelayToSchedulerStatusCommand
                                {
                                    Ids             = ids,
                                    Status          = DelayOfStatus.Success,
                                    UpdateNextStart = true
                                }, init.Setting);
                                policy.Do(() => dispatcher.Push(composite));
                            }
                            catch (Exception ex)
                            {
                                dispatcher.Push(new ChangeDelayToSchedulerStatusCommand
                                {
                                    Ids         = ids,
                                    Status      = DelayOfStatus.Error,
                                    Description = ex.ToString()
                                }, init.Setting);
                            }
                        }

                        ////ncrunch: no coverage start
                        Thread.Sleep(init.Interval);
                    }
                }
                ////ncrunch: no coverage end
                catch (Exception ex)
                {
                    if (!string.IsNullOrWhiteSpace(init.Log_Debug))
                    {
                        LoggingFactory.Instance.LogException(init.Log_Debug, ex);
                    }
                }
            }, init.TaskCreationOptions);
        }
 protected ActionResult TryPush(CommandComposite composite, Action <IncTryPushSetting> action = null)
 {
     return(TryPush(commandComposite => dispatcher.Push(commandComposite), composite, action));
 }