/////////////////////////////////////////////////////////////////////////////////////////////////// ////////////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); } } }