/// <summary> /// processes all v2.1 structure Query messages and build the {@link ComplexStructureQuery} /// </summary> /// <param name="reader">The reader.</param> /// <param name="queryMessageType">Type of the query message.</param> /// <returns>a parsed {@link ComplexStructureQuery} set in the {@link QueryWorkspace} </returns> /// <exception cref="System.ArgumentException">Not a structure query message: + queryMessageType</exception> private IQueryWorkspace ProcessQueryMessage(XmlReader reader, QueryMessageEnumType queryMessageType) { IComplexStructureQuery complexQuery; switch (queryMessageType) { case QueryMessageEnumType.StructuresWhere: StructuresQuery structuresQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<StructuresQuery, StructuresQueryType>(reader); complexQuery = _queryBuilder.Build(structuresQuery.Content); break; case QueryMessageEnumType.DataflowWhere: DataflowQuery dataflowQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<DataflowQuery, DataflowQueryType>(reader); complexQuery = _queryBuilder.Build(dataflowQuery.Content); break; case QueryMessageEnumType.MetadataflowWhere: MetadataflowQuery metadataflowQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<MetadataflowQuery, MetadataflowQueryType>(reader); complexQuery = _queryBuilder.Build(metadataflowQuery.Content); break; case QueryMessageEnumType.DsdWhere: DataStructureQuery dataStructureQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<DataStructureQuery, DataStructureQueryType>(reader); complexQuery = _queryBuilder.Build(dataStructureQuery.Content); break; case QueryMessageEnumType.MdsWhere: MetadataStructureQuery metadataStructureQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<MetadataStructureQuery, MetadataStructureQueryType>(reader); complexQuery = _queryBuilder.Build(metadataStructureQuery.Content); break; case QueryMessageEnumType.CategorySchemeWhere: CategorySchemeQuery categorySchemeQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<CategorySchemeQuery, CategorySchemeQueryType>(reader); complexQuery = _queryBuilder.Build(categorySchemeQuery.Content); break; case QueryMessageEnumType.ConceptSchemeWhere: ConceptSchemeQuery conceptSchemeQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<ConceptSchemeQuery, ConceptSchemeQueryType>(reader); complexQuery = _queryBuilder.Build(conceptSchemeQuery.Content); break; case QueryMessageEnumType.CodelistWhere: CodelistQuery codelistQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<CodelistQuery, CodelistQueryType>(reader); complexQuery = _queryBuilder.Build(codelistQuery.Content); break; case QueryMessageEnumType.HclWhere: HierarchicalCodelistQuery hierarchicalCodelistQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<HierarchicalCodelistQuery, HierarchicalCodelistQueryType>(reader); complexQuery = _queryBuilder.Build(hierarchicalCodelistQuery.Content); break; case QueryMessageEnumType.OrganisationSchemeWhere: OrganisationSchemeQuery organisationSchemeQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<OrganisationSchemeQuery, OrganisationSchemeQueryType>(reader); complexQuery = _queryBuilder.Build(organisationSchemeQuery.Content); break; case QueryMessageEnumType.ReportingTaxonomyWhere: ReportingTaxonomyQuery reportingTaxonomyQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<ReportingTaxonomyQuery, ReportingTaxonomyQueryType>(reader); complexQuery = _queryBuilder.Build(reportingTaxonomyQuery.Content); break; case QueryMessageEnumType.StructureSetWhere: StructureSetQuery structureSetQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<StructureSetQuery, StructureSetQueryType>(reader); complexQuery = _queryBuilder.Build(structureSetQuery.Content); break; case QueryMessageEnumType.ProcessWhere: ProcessQuery processQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<ProcessQuery, ProcessQueryType>(reader); complexQuery = _queryBuilder.Build(processQuery.Content); break; case QueryMessageEnumType.CategorisationWhere: CategorisationQuery categorisationQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<CategorisationQuery, CategorisationQueryType>(reader); complexQuery = _queryBuilder.Build(categorisationQuery.Content); break; case QueryMessageEnumType.ProvisionAgreementWhere: ProvisionAgreementQuery provisionAgreementQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<ProvisionAgreementQuery, ProvisionAgreementQueryType>(reader); complexQuery = _queryBuilder.Build(provisionAgreementQuery.Content); break; case QueryMessageEnumType.ConstraintWhere: ConstraintQuery constraintQuery = Org.Sdmx.Resources.SdmxMl.Schemas.V21.MessageFactory.Load<ConstraintQuery, ConstraintQueryType>(reader); complexQuery = _queryBuilder.Build(constraintQuery.Content); break; default: throw new ArgumentException("Not a structure query message:" + queryMessageType); } return new QueryWorkspace(complexQuery); }
public void TestGetQueryMessageTypes(string file, QueryMessageEnumType expectedResult) { using (var readable = new FileReadableDataLocation(file)) { IList<QueryMessageEnumType> queryMessageEnumTypes = SdmxMessageUtil.GetQueryMessageTypes(readable); Assert.IsNotNull(queryMessageEnumTypes); if (expectedResult != QueryMessageEnumType.Null) { Assert.IsNotEmpty(queryMessageEnumTypes); var messageEnumTypes = from x in queryMessageEnumTypes where (x == expectedResult) select x; CollectionAssert.AreEquivalent(queryMessageEnumTypes, messageEnumTypes); } } }