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);
        }
        private FlowBuilder <T> From <T>(FlowBuilder <T> builder, XmlStep xmlStep, XmlFlow xmlFlow, XmlSplit xmlSplit)
        {
            if (xmlStep != null)
            {
                return(builder.From(_stepsMap[xmlStep.Id]));
            }

            if (xmlFlow != null)
            {
                return(builder.From(LoadFlow(xmlFlow)));
            }

            if (xmlSplit != null)
            {
                return(builder.From(LoadSplit(xmlSplit)));
            }

            // Won't happen
            return(null);
        }
 /// <summary>
 /// Constructs a new <see cref="StepLoader"/> with the specified input and output types.
 /// </summary>
 public StepLoader(XmlStep step, IUnityContainer container)
 {
     _step      = step;
     _container = container;
 }