/// <summary> /// Handle top level elements. /// </summary> /// <param name="parent"> /// The parent. /// </param> /// <param name="localName"> /// The local name. /// </param> /// <returns> /// The <see cref="StructureReaderBaseV20.ElementActions"/>. /// </returns> protected override ElementActions HandleTopLevel(IMutableObjects parent, object localName) { ElementActions actions = null; if (NameTableCache.IsElement(localName, ElementNameTable.MetadataStructureDefinition)) { var codelist = new MetadataStructureDefinitionMutableCore(); ParseAttributes(codelist, this.Attributes); parent.AddMetadataStructure(codelist); actions = this.AddNameableAction(codelist, this.HandleChildElements); } return actions; }
/// <summary> /// Handles the CodeList element child elements /// </summary> /// <param name="parent"> /// The parent ICodelistMutableObject object /// </param> /// <param name="localName"> /// The name of the current xml element /// </param> /// <returns> /// The <see cref="StructureReaderBaseV20.ElementActions"/>. /// </returns> private ElementActions HandleChildElements(MetadataStructureDefinitionMutableCore parent, object localName) { ElementActions actions = null; if (NameTableCache.IsElement(localName, ElementNameTable.TargetIdentifiers)) { actions = this.BuildElementActions(parent, this.HandleChildElements, DoNothing); } else if (NameTableCache.IsElement(localName, ElementNameTable.ReportStructure)) { IReportStructureMutableObject reportStructure = new ReportStructureMutableCore(); ParseAttributes(reportStructure, this.Attributes); parent.ReportStructures.Add(reportStructure); string target = Helper.TrySetFromAttribute(Attributes, AttributeNameTable.target, (string)null); if (target != null) { reportStructure.TargetMetadatas.Add(target); } actions = this.AddAnnotableAction(reportStructure, this.HandleChildElements, DoNothing); } else if (NameTableCache.IsElement(localName, ElementNameTable.FullTargetIdentifier)) { var fullTarget = new MetadataTargetMutableCore(); ParseAttributes(fullTarget, this.Attributes); parent.MetadataTargets.Add(fullTarget); actions = this.AddAnnotableAction(fullTarget, this.HandleChildElements, DoNothing); } else if (NameTableCache.IsElement(localName, ElementNameTable.PartialTargetIdentifier)) { var partialTarget = new MetadataTargetMutableCore(); ParseAttributes(partialTarget, this.Attributes); if (!ObjectUtil.ValidCollection(parent.MetadataTargets)) { throw new SdmxSyntaxException("FullTargetIdentifier not set or PartialTargetIdentifier in wrong order"); } parent.MetadataTargets.Add(partialTarget); var fullTarget = parent.MetadataTargets[0]; actions = this.AddAnnotableAction(partialTarget, DoNothingComplex, (core, o) => this.HandlePartialChildElement(core, fullTarget, o)); } return actions; }