Пример #1
0
        ///////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////BUILD FROM MUTABLE OBJECT                 //////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////////////    
        #region Constructors and Destructors

        /// <summary>
        /// Initializes a new instance of the <see cref="MetadataTargetCore"/> class.
        /// </summary>
        /// <param name="parent">
        /// The parent. 
        /// </param>
        /// <param name="itemMutableObject">
        /// The sdmxObject. 
        /// </param>
        /// <exception cref="SdmxSemmanticException">
        /// Throws Validate exception.Throws Validate exception.
        /// </exception>
        public MetadataTargetCore(IIdentifiableObject parent, IMetadataTargetMutableObject itemMutableObject)
            : base(itemMutableObject, parent)
        {
            if (itemMutableObject.ConstraintContentTarget != null)
            {
                this.constraintContentTarget = new ConstraintContentTargetCore(this, itemMutableObject.ConstraintContentTarget);
            }

            if (itemMutableObject.KeyDescriptorValuesTarget != null)
            {
                this.keyDescriptorValuesTarget = new KeyDescriptorValuesTargetCore(this, itemMutableObject.KeyDescriptorValuesTarget);
            }

            if (itemMutableObject.DataSetTarget != null)
            {
                this.dataSetTarget = new DataSetTargetCore(itemMutableObject.DataSetTarget, this);
            }

            if (itemMutableObject.ReportPeriodTarget != null)
            {
                this.reportPeriodTarget = new ReportPeriodTargetCore(this, itemMutableObject.ReportPeriodTarget);
            }

            if (itemMutableObject.IdentifiableTarget != null)
            {
                foreach (IIdentifiableTargetMutableObject identifiableTargetMutableObject in itemMutableObject.IdentifiableTarget)
                {
                    this._identifiableTarget.Add(new IdentifiableTargetCore(identifiableTargetMutableObject, this));
                }
            }

            try
            {
                this.Validate();
            }
            catch (SdmxSemmanticException e)
            {
                throw new SdmxSemmanticException(e, ExceptionCode.FailValidation, this);
            }
        }
 /// <summary>
 /// Handles the child elements.
 /// </summary>
 /// <param name="parent">The full target mutable object.</param>
 /// <param name="localName">The local name of the element.</param>
 /// <returns>The <see cref="StructureReaderBaseV20.ElementActions"/>.</returns>
 private ElementActions HandleChildElements(IMetadataTargetMutableObject parent, object localName)
 {
     if (NameTableCache.IsElement(localName, ElementNameTable.IdentifierComponent))
     {
         IIdentifiableTargetMutableObject identifiableTarget = new IdentifiableTargetMutableCore();
         parent.IdentifiableTarget.Add(identifiableTarget); 
         ParseAttributes(identifiableTarget, this.Attributes);
         return this.AddAnnotableAction(identifiableTarget, this.HandleChildElements, this.HandleTextChildElement);
     }
     
     return null;
 }
 /// <summary>
 /// Handles the partial child element.
 /// </summary>
 /// <param name="partialTarget">The partial target.</param>
 /// <param name="fullTarget">The full target.</param>
 /// <param name="localName">The local name of the element.</param>
 private void HandlePartialChildElement(IMetadataTargetMutableObject partialTarget, IMetadataTargetMutableObject fullTarget, object localName)
 {
     if (NameTableCache.IsElement(localName, ElementNameTable.IdentifierComponentRef))
     {
         var identifierRef = this.Text;
         var identifiableTargetMutableObject = fullTarget.IdentifiableTarget.FirstOrDefault(o => string.Equals(identifierRef, o.Id));
         if (identifiableTargetMutableObject != null)
         {
             partialTarget.IdentifiableTarget.Add(identifiableTargetMutableObject);
         }
     }
 }