///////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////BUILD FROM MUTABLE OBJECTS             //////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////////////
        #region Constructors and Destructors

        /// <summary>
        /// Initializes a new instance of the <see cref="ProcessStepCore"/> class.
        /// </summary>
        /// <param name="parent">
        /// The parent. 
        /// </param>
        /// <param name="processStepMutableObject">
        /// The iprocess. 
        /// </param>
        /// <exception cref="SdmxSemmanticException">
        /// Throws Validate exception.
        /// </exception>
        public ProcessStepCore(IIdentifiableObject parent, IProcessStepMutableObject processStepMutableObject)
            : base(processStepMutableObject, parent)
        {
            this.input = new List<IInputOutputObject>();
            this.output = new List<IInputOutputObject>();
            this.transitions = new List<ITransition>();
            this.processSteps = new List<IProcessStepObject>();
            if (processStepMutableObject.Input != null)
            {
                foreach (IInputOutputMutableObject currentIo in processStepMutableObject.Input)
                {
                    this.input.Add(new InputOutputCore(this, currentIo));
                }
            }

            if (processStepMutableObject.Output != null)
            {
                foreach (IInputOutputMutableObject currentIo0 in processStepMutableObject.Output)
                {
                    this.output.Add(new InputOutputCore(this, currentIo0));
                }
            }

            if (processStepMutableObject.Computation != null)
            {
                this.computation = new ComputationCore(this, processStepMutableObject.Computation);
            }

            if (processStepMutableObject.Transitions != null)
            {
                foreach (ITransitionMutableObject mutable in processStepMutableObject.Transitions)
                {
                    this.transitions.Add(new TransitionCore(mutable, this));
                }
            }

            if (processStepMutableObject.ProcessSteps != null)
            {
                foreach (IProcessStepMutableObject mutable1 in processStepMutableObject.ProcessSteps)
                {
                    this.processSteps.Add(new ProcessStepCore(this, mutable1));
                }
            }

            try
            {
                this.Validate();
            }
            catch (SdmxSemmanticException e)
            {
                throw new SdmxSemmanticException(e, ExceptionCode.FailValidation, this);
            }
        }
 /// <summary>
 /// The add process step.
 /// </summary>
 /// <param name="processStep">
 /// The process step. 
 /// </param>
 public void AddProcessStep(IProcessStepMutableObject processStep)
 {
     this._processSteps.Add(processStep);
 }