Пример #1
0
        private GenericResult HandleTradeCommand(
            OrderStateMachine.Trigger trigger,
            ITriggerContext context,
            ITrade trade,
            ITradeEditableData editableData = null
            )
        {
            Contract.Requires(context != null, "context != null");

            _workingData = CurrentData.Clone();
            if (!_stateMachine.CanFireTrigger(trigger))
            {
                return(GenericResult.FailureFormat(String.Format("The commmand {0} is not allowed when the _order is in {1} state", trigger, OrderState)));
            }
            GenericResult result;

            switch (trigger)
            {
            case OrderStateMachine.Trigger.AddTrade:
                trade = new Trade {
                    Order = this
                };
                result = trade.Create(context, editableData);
                break;

            case OrderStateMachine.Trigger.TradeBooked:
                //TODO handle the booking done
                result = GenericResult.Success();
                break;

            case OrderStateMachine.Trigger.CancelTrade:
                result = trade.Cancel(context);
                break;

            case OrderStateMachine.Trigger.UpdateTrade:
            default:
                return(GenericResult.FailureFormat("The trade command {0} is not implemented", trigger));
            }
            return(result.IsSuccess() ? HandleCommand(trigger, context, dealingData: new OrderDealingEventParameter(trade)) : result);
        }