public IProcessStepObjectBase Build(IProcessStepObject buildFrom,
				ISdmxRetrievalManager retrievalManager) {
	
			IList<IINputOutputObjectBase> input = new List<IINputOutputObjectBase>();
			IList<IINputOutputObjectBase> output = new List<IINputOutputObjectBase>();
			IList<ITransition> transitions = new List<ITransition>();
			IList<IProcessStepObjectBase> processSteps = new List<IProcessStepObjectBase>();
	
			/* foreach */
			foreach (IInputOutput eachInput  in  buildFrom.Input) {
				ILOG.J2CsMapping.Collections.Collections.Add(input,inputOutputSuperBeanBuilder.Build(eachInput,
									retrievalManager));
			}
	
			/* foreach */
			foreach (IInputOutput eachOutput  in  buildFrom.Output) {
				ILOG.J2CsMapping.Collections.Collections.Add(output,inputOutputSuperBeanBuilder.Build(eachOutput,
									retrievalManager));
			}
	
			/* foreach */
			foreach (ITransition eachTrans  in  buildFrom.GetTransitions()) {
				ILOG.J2CsMapping.Collections.Collections.Add(transitions,eachTrans);
			}
	
			/* foreach */
			foreach (IProcessStepObject childStep  in  buildFrom.ProcessSteps) {
				ILOG.J2CsMapping.Collections.Collections.Add(processSteps,Build(childStep, retrievalManager));
			}
	
			return new ProcessStepObjectBaseCore(buildFrom, input, output,
					buildFrom.Computation, transitions, processSteps);
		}
		public ProcessStepObjectBaseCore(IProcessStepObject processStep,
				IList<IInputOutputObjectBase> inputs,
				IList<IInputOutputObjectBase> outputs, IComputationObject computation,
				IList<ITransition> transitions,
				IList<IProcessStepObjectBase> processSteps) : base(processStep) {
	
			this._processStep = processStep;
			this._inputs = inputs;
			this._outputs = outputs;
			this._computation = computation;
			this._transitions = transitions;
			this._processSteps = processSteps;
		}
        /// <summary>
        /// Walks through Processes and sub processes to set the IProcessStepObject referenced from the targetStep
        /// </summary>
        /// <param name="processSteps">List of processes.
        /// </param>
        /// <param name="targetStepSplit">
        /// The target Step Split. 
        /// </param>
        /// <param name="currentPosition">
        /// The current Position. 
        /// </param>
        private void SetTargetStep(IList<IProcessStepObject> processSteps, string[] targetStepSplit, int currentPosition)
        {
            foreach (IProcessStepObject currentProcessStep in processSteps)
            {
                if (currentProcessStep.Id.Equals(targetStepSplit[currentPosition]))
                {
                    int nextPos = currentPosition + 1;
                    if (targetStepSplit.Length > nextPos)
                    {
                        this.SetTargetStep(currentProcessStep.ProcessSteps, targetStepSplit, nextPos);
                        return;
                    }
                    else
                    {
                        this.processStep = currentProcessStep;
                        return;
                    }
                }
            }

            throw new SdmxSemmanticException(
                "Can not resolve reference to ProcessStep with reference '" + this.targetStep + "'");
        }
        /// <summary>
        /// Process <paramref name="buildFrom"/>
        /// </summary>
        /// <param name="buildFrom">
        /// The <see cref="IProcessStepObject"/> to build from
        /// </param>
        /// <param name="builtObj">
        /// The output
        /// </param>
        private void ProcessProcessStep(IProcessStepObject buildFrom, ProcessStepType builtObj)
        {
            string value = buildFrom.Id;
            if (!string.IsNullOrWhiteSpace(value))
            {
                builtObj.id = buildFrom.Id;
            }

            IList<ITextTypeWrapper> names = buildFrom.Names;
            if (ObjectUtil.ValidCollection(names))
            {
                builtObj.Name = this.GetTextType(names);
            }

            IList<ITextTypeWrapper> descriptions = buildFrom.Descriptions;
            if (ObjectUtil.ValidCollection(descriptions))
            {
                builtObj.Description = this.GetTextType(descriptions);
            }

            IList<IInputOutputObject> inputObjects = buildFrom.Input;
            if (ObjectUtil.ValidCollection(inputObjects))
            {
                /* foreach */
                foreach (IInputOutputObject input in inputObjects)
                {
                    if (input.StructureReference != null)
                    {
                        builtObj.Input.Add(
                            XmlobjectsEnumUtil.GetSdmxObjectIdType(input.StructureReference.TargetReference));
                    }
                }
            }

            IList<IInputOutputObject> outputObjects = buildFrom.Output;
            if (ObjectUtil.ValidCollection(outputObjects))
            {
                /* foreach */
                foreach (IInputOutputObject outputObject in outputObjects)
                {
                    if (outputObject.StructureReference != null)
                    {
                        builtObj.Input.Add(
                            XmlobjectsEnumUtil.GetSdmxObjectIdType(outputObject.StructureReference.TargetReference));
                    }
                }
            }

            if (buildFrom.Computation != null)
            {
                builtObj.Computation.AddAll(this.GetTextType(buildFrom.Computation.Description));
            }

            IList<ITransition> transitions = buildFrom.Transitions;
            if (ObjectUtil.ValidCollection(transitions))
            {
                /* foreach */
                foreach (ITransition transition in transitions)
                {
                    var transitionType = new TransitionType();
                    builtObj.Transition.Add(transitionType);
                    if (transition.TargetStep != null)
                    {
                        transitionType.TargetStep = transition.TargetStep.Id;
                    }

                    IList<ITextTypeWrapper> textTypeWrappers = transition.Condition;
                    if (ObjectUtil.ValidCollection(textTypeWrappers))
                    {
                        transitionType.Condition = this.GetTextType(textTypeWrappers[0]);
                    }
                }
            }

            IList<IProcessStepObject> processStepObjects = buildFrom.ProcessSteps;
            if (ObjectUtil.ValidCollection(processStepObjects))
            {
                /* foreach */
                foreach (IProcessStepObject processStep in processStepObjects)
                {
                    var newProcessStepType = new ProcessStepType();
                    builtObj.ProcessStep.Add(newProcessStepType);
                    this.ProcessProcessStep(processStep, newProcessStepType);
                }
            }

            if (this.HasAnnotations(buildFrom))
            {
                builtObj.Annotations = this.GetAnnotationsType(buildFrom);
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ProcessStepMutableCore"/> class.
        /// </summary>
        /// <param name="objTarget">
        /// The obj target. 
        /// </param>
        public ProcessStepMutableCore(IProcessStepObject objTarget)
            : base(objTarget)
        {
            this._input = new List<IInputOutputMutableObject>();
            this._output = new List<IInputOutputMutableObject>();
            this._transitions = new List<ITransitionMutableObject>();
            this._processSteps = new List<IProcessStepMutableObject>();

            if (objTarget.Input != null)
            {
                foreach (IInputOutputObject currentIo in objTarget.Input)
                {
                    this._input.Add(new InputOutputMutableCore(currentIo));
                }
            }

            if (objTarget.Output != null)
            {
                foreach (IInputOutputObject currentIo0 in objTarget.Output)
                {
                    this._output.Add(new InputOutputMutableCore(currentIo0));
                }
            }

            // make into mutable objTarget lists
            if (objTarget.ProcessSteps != null)
            {
                foreach (IProcessStepObject processStepObject in objTarget.ProcessSteps)
                {
                    this.AddProcessStep(new ProcessStepMutableCore(processStepObject));
                }
            }

            if (objTarget.Transitions != null)
            {
                foreach (ITransition t in objTarget.Transitions)
                {
                    this.AddTransition(new TransitionMutableCore(t));
                }
            }

            if (objTarget.Computation != null)
            {
                this._computation = new ComputationMutableCore(objTarget.Computation);
            }
        }