private void MapXmlElements(IUnityContainer unityContainer, IXmlStepContainer xmlStepContainer)
 {
     foreach (var xmlJobElement in xmlStepContainer.JobElements)
     {
         if (xmlJobElement is XmlStep)
         {
             var xmlStep = (XmlStep)xmlJobElement;
             var stepId  = xmlStep.Id;
             var step    = new StepLoader(xmlStep, unityContainer).LoadStep();
             _stepsMap[stepId] = step;
         }
         else if (xmlJobElement is XmlFlow)
         {
             var xmlFlow = (XmlFlow)xmlJobElement;
             _xmlFlowMap[xmlFlow.Id] = xmlFlow;
             MapXmlElements(unityContainer, xmlFlow);
         }
         else if (xmlJobElement is XmlSplit)
         {
             var xmlSplit = (XmlSplit)xmlJobElement;
             _xmlSplitMap[xmlSplit.Id] = xmlSplit;
             _executor = unityContainer.Resolve <ITaskExecutor>();
             foreach (var xmlFlow in xmlSplit.Flows)
             {
                 MapXmlElements(unityContainer, xmlFlow);
             }
         }
     }
 }
        private FlowBuilder <T> HandleSubElements <T>(FlowBuilder <T> builder, IXmlStepContainer container)
        {
            foreach (var xmlElement in container.JobElements)
            {
                XmlFlow  xmlSubFlow = xmlElement as XmlFlow;
                XmlStep  xmlStep    = xmlElement as XmlStep;
                XmlSplit xmlSplit   = xmlElement as XmlSplit;

                if (xmlElement.Next != null)
                {
                    Next(From(builder, xmlStep, xmlSubFlow, xmlSplit), xmlElement.Next);
                }
                else if (xmlElement.Transitions.Any())
                {
                    foreach (var transition in xmlElement.Transitions)
                    {
                        var transitionBuilder = From(builder, xmlStep, xmlSubFlow, xmlSplit).On(transition.On);
                        var xmlNext           = transition as XmlNext;
                        if (xmlNext != null)
                        {
                            To(transitionBuilder, xmlNext.To);
                        }
                        else if (transition is XmlEnd)
                        {
                            transitionBuilder.End();
                        }
                        else if (transition is XmlFail)
                        {
                            transitionBuilder.Fail();
                        }
                    }
                }
            }
            return(builder);
        }