public static void Push(this IDispatcher dispatcher, Action <CommandComposite> configuration) { var composite = new CommandComposite(); configuration(composite); dispatcher.Push(composite); }
protected ActionResult TryPush(Action <CommandComposite> configuration, Action <IncTryPushSetting> action = null) { var composite = new CommandComposite(); configuration(composite); return(TryPush(composite, action)); }
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); })); }
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); }
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); }
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)); } }
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)); }
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)); }