/// <summary> /// Validates the SDMX V20. /// </summary> /// <param name="dataQuery"> /// The data query. /// </param> /// <param name="format"> /// The format. /// </param> /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxNoResultsException"> /// This dataflow uses SDMX v2.0 only /// DataStructureDefinition. /// </exception> private static void ValidateSdmxV20(IBaseDataQuery dataQuery, BaseConstantType <BaseDataFormatEnumType> format) { if (!dataQuery.DataStructure.IsCompatible(SdmxSchema.GetFromEnum(SdmxSchemaEnumType.VersionTwo))) { // TODO check java message/error in this case throw new SdmxNoResultsException("This dataflow uses SDMX v2.1 only DataStructureDefinition."); } switch (format.EnumType) { case BaseDataFormatEnumType.Null: break; case BaseDataFormatEnumType.Generic: case BaseDataFormatEnumType.Compact: case BaseDataFormatEnumType.Utility: case BaseDataFormatEnumType.Edi: ValidateSdmxV20TimeSeries(dataQuery); break; case BaseDataFormatEnumType.CrossSectional: ValidateErrors(Validator.ValidateForCrossSectional(dataQuery.DataStructure)); break; default: throw new SdmxSemmanticException("SDMX v2.0 Unsupported format " + format); } }
public static BaseConstantType getBaseType(SWIGTYPE_Ogre__GpuConstantType ctype) { BaseConstantType ret = (BaseConstantType)OgrePINVOKE.GpuConstantDefinition_getBaseType((int)ctype); if (OgrePINVOKE.SWIGPendingException.Pending) { throw OgrePINVOKE.SWIGPendingException.Retrieve(); } return(ret); }
/// <summary> /// Validates the SDMX V20. /// </summary> /// <param name="dataQuery"> /// The data query. /// </param> /// <param name="format"> /// The format. /// </param> /// <exception cref="Org.Sdmxsource.Sdmx.Api.Exception.SdmxNoResultsException"> /// This dataflow uses SDMX v2.0 only /// DataStructureDefinition. /// </exception> private static void ValidateSdmxV20(IBaseDataQuery dataQuery, BaseConstantType<BaseDataFormatEnumType> format) { if (!dataQuery.DataStructure.IsCompatible(SdmxSchema.GetFromEnum(SdmxSchemaEnumType.VersionTwo))) { // TODO check java message/error in this case throw new SdmxNoResultsException("This dataflow uses SDMX v2.1 only DataStructureDefinition."); } switch (format.EnumType) { case BaseDataFormatEnumType.Null: break; case BaseDataFormatEnumType.Generic: case BaseDataFormatEnumType.Compact: case BaseDataFormatEnumType.Utility: case BaseDataFormatEnumType.Edi: ValidateSdmxV20TimeSeries(dataQuery); break; case BaseDataFormatEnumType.CrossSectional: ValidateErrors(Validator.ValidateForCrossSectional(dataQuery.DataStructure)); break; default: throw new SdmxSemmanticException("SDMX v2.0 Unsupported format " + format); } }
/// <summary> /// Returns the <see cref="IStructureWriterEngine"/> engine. /// </summary> /// <param name="schemaVersion"> /// The schema version. /// </param> /// <param name="stream"> /// The stream. /// </param> /// <returns> /// The <see cref="IStructureWriterEngine"/>. /// </returns> /// <exception cref="SdmxNotImplementedException"> /// The specified value at <paramref name="schemaVersion"/> is not supported /// </exception> private IStructureWriterEngine GetObjectEngine(BaseConstantType<SdmxSchemaEnumType> schemaVersion, Stream stream) { switch (schemaVersion.EnumType) { case SdmxSchemaEnumType.VersionOne: return this._writer != null ? new StructureWriterEngineV1(this._writer) : new StructureWriterEngineV1(stream); case SdmxSchemaEnumType.VersionTwo: return this._writer != null ? new StructureWriterV2(this._writer) : new StructureWriterV2(stream); case SdmxSchemaEnumType.Edi: return new StructureWriterEngineEdi(stream); case SdmxSchemaEnumType.VersionTwoPointOne: return this._writer != null ? new StructureWriterEngineV21(this._writer) : new StructureWriterEngineV21(stream); default: throw new SdmxNotImplementedException(ExceptionCode.Unsupported, schemaVersion + " - StructureWritingManagerImpl.writeStructure"); } }
/// <summary> /// The validate parents and siblings. /// </summary> /// <param name="mutableObject"> /// The mutable object. /// </param> /// <param name="structureType"> /// The structure type. /// </param> /// <param name="stubs"> /// The stubs. /// </param> private static void ValidateParentsAndSiblings(IMutableObjects mutableObject, BaseConstantType<SdmxStructureEnumType> structureType, bool stubs) { switch (structureType.EnumType) { case SdmxStructureEnumType.Categorisation: break; case SdmxStructureEnumType.CategoryScheme: { if (!stubs) { Assert.IsNotEmpty(mutableObject.Categorisations); Assert.IsNotEmpty(mutableObject.Dataflows); Assert.IsNotEmpty(mutableObject.CategorySchemes); var referencedByParent = (from m in mutableObject.Categorisations select new StructureReferenceImpl(m.CategoryReference.MaintainableReference, m.CategoryReference.MaintainableStructureEnumType)) .Distinct().ToArray(); var got = from o in mutableObject.CategorySchemes select _fromMutable.Build(o); if (referencedByParent.Length > 0) { CollectionAssert.IsSubsetOf(referencedByParent, got); } } } break; case SdmxStructureEnumType.CodeList: { if (!mutableObject.Codelists.All(o => "MA".Equals(o.AgencyId))) { Assert.IsNotEmpty(mutableObject.Codelists); Assert.IsTrue(mutableObject.DataStructures.Count + mutableObject.HierarchicalCodelists.Count > 0, _fromMutable.Build(mutableObject.Codelists.First()).ToString()); if (mutableObject.DataStructures.Count > 0) { Assert.IsNotEmpty(mutableObject.ConceptSchemes); } } if (!stubs) { var referencedByParent = GetComponentReferences(mutableObject, structureType); var got = (from o in mutableObject.Codelists select _fromMutable.Build(o)).Distinct<IStructureReference>().ToArray(); CollectionAssert.IsSubsetOf(referencedByParent, got); var hclReferences = (from m in mutableObject.HierarchicalCodelists from codelistRefMutableObject in m.CodelistRef select codelistRefMutableObject.CodelistReference).Distinct().ToArray(); CollectionAssert.IsSubsetOf(hclReferences, got); } } break; case SdmxStructureEnumType.ConceptScheme: { Assert.IsNotEmpty(mutableObject.ConceptSchemes); Assert.IsNotEmpty(mutableObject.Codelists); Assert.IsNotEmpty(mutableObject.DataStructures); if (!stubs) { var referencedByParent = GetComponentReferences(mutableObject, structureType); var got = from o in mutableObject.ConceptSchemes select _fromMutable.Build(o); CollectionAssert.IsSubsetOf(referencedByParent, got); } } break; case SdmxStructureEnumType.Dataflow: { Assert.IsNotEmpty(mutableObject.Categorisations); Assert.IsNotEmpty(mutableObject.Dataflows); Assert.IsNotEmpty(mutableObject.CategorySchemes); if (!stubs) { var referencedByParent = (from m in mutableObject.Categorisations select m.StructureReference).Distinct().ToArray(); var got = (from o in mutableObject.Dataflows select _fromMutable.Build(o)).Distinct<IStructureReference>().ToArray(); if (referencedByParent.Length > 0) { CollectionAssert.IsSubsetOf(referencedByParent, got); } } } break; case SdmxStructureEnumType.Dsd: { Assert.IsNotEmpty(mutableObject.Dataflows); Assert.IsNotEmpty(mutableObject.DataStructures); if (!stubs) { var referencedByParent = (from m in mutableObject.Dataflows select m.DataStructureRef).Distinct().ToArray(); var got = from o in mutableObject.DataStructures select _fromMutable.Build(o); CollectionAssert.IsSubsetOf(referencedByParent, got); } } break; case SdmxStructureEnumType.HierarchicalCodelist: break; } }
/// <summary> /// Validates the descendants. /// </summary> /// <param name="mutableObject"> /// The mutable object. /// </param> /// <param name="structureType"> /// Type of the structure. /// </param> /// <param name="stubs"> /// if set to <c>true</c> [stubs]. /// </param> private static void ValidateDescendants(IMutableObjects mutableObject, BaseConstantType<SdmxStructureEnumType> structureType, bool stubs) { switch (structureType.EnumType) { case SdmxStructureEnumType.Categorisation: if (!stubs) { Assert.IsNotEmpty(mutableObject.Dataflows); Assert.IsNotEmpty(mutableObject.CategorySchemes); Assert.IsNotEmpty(mutableObject.DataStructures); Assert.IsNotEmpty(mutableObject.Codelists); Assert.IsNotEmpty(mutableObject.ConceptSchemes); } break; case SdmxStructureEnumType.CategoryScheme: break; case SdmxStructureEnumType.CodeList: break; case SdmxStructureEnumType.ConceptScheme: break; case SdmxStructureEnumType.Dataflow: { Assert.IsNotEmpty(mutableObject.Dataflows); Assert.IsNotEmpty(mutableObject.DataStructures); Assert.IsNotEmpty(mutableObject.Codelists); Assert.IsNotEmpty(mutableObject.ConceptSchemes); } break; case SdmxStructureEnumType.Dsd: { Assert.IsNotEmpty(mutableObject.DataStructures); Assert.IsNotEmpty(mutableObject.Codelists); Assert.IsNotEmpty(mutableObject.ConceptSchemes); } break; case SdmxStructureEnumType.HierarchicalCodelist: Assert.IsNotEmpty(mutableObject.Codelists); break; } }
/// <summary> /// The validate children. /// </summary> /// <param name="mutableObject">The mutable object.</param> /// <param name="structureType">The structure type.</param> /// <param name="stubs">if set to <c>true</c> [stubs].</param> private static void ValidateChildren(IMutableObjects mutableObject, BaseConstantType<SdmxStructureEnumType> structureType, bool stubs) { switch (structureType.EnumType) { case SdmxStructureEnumType.Categorisation: Assert.IsNotEmpty(mutableObject.Dataflows); Assert.IsNotEmpty(mutableObject.CategorySchemes); if (!stubs) { var categorySchemeRefs = (from m in mutableObject.Categorisations select new StructureReferenceImpl(m.CategoryReference.MaintainableReference, m.CategoryReference.MaintainableStructureEnumType)) .Distinct().ToArray(); var got = from o in mutableObject.CategorySchemes select _fromMutable.Build(o); CollectionAssert.AreEquivalent(categorySchemeRefs, got); } if (!stubs) { var dataflows = (from m in mutableObject.Categorisations select m.StructureReference).Distinct(); var got = from o in mutableObject.Dataflows select _fromMutable.Build(o); CollectionAssert.AreEquivalent(dataflows, got); } break; case SdmxStructureEnumType.CategoryScheme: break; case SdmxStructureEnumType.CodeList: break; case SdmxStructureEnumType.ConceptScheme: break; case SdmxStructureEnumType.Dataflow: { Assert.IsNotEmpty(mutableObject.DataStructures); if (!stubs) { var dataflows = (from m in mutableObject.Dataflows select m.DataStructureRef).Distinct(); var got = from o in mutableObject.DataStructures select _fromMutable.Build(o); CollectionAssert.AreEquivalent(dataflows, got); } } break; case SdmxStructureEnumType.Dsd: Assert.IsNotEmpty(mutableObject.ConceptSchemes); Assert.IsNotEmpty(mutableObject.Codelists); if (!stubs) { var sdmxStructureType = SdmxStructureType.GetFromEnum(SdmxStructureEnumType.ConceptScheme); ValidateComponentReferences(mutableObject, sdmxStructureType); } if (!stubs) { var sdmxStructureType = SdmxStructureType.GetFromEnum(SdmxStructureEnumType.CodeList); ValidateComponentReferences(mutableObject, sdmxStructureType); } break; case SdmxStructureEnumType.HierarchicalCodelist: Assert.IsNotEmpty(mutableObject.Codelists); if (!stubs) { var got = (from o in mutableObject.Codelists select _fromMutable.Build(o)).Distinct<IStructureReference>().ToArray(); var hclReferences = (from m in mutableObject.HierarchicalCodelists from codelistRefMutableObject in m.CodelistRef select codelistRefMutableObject.CodelistReference).Distinct().ToArray(); CollectionAssert.IsSubsetOf(hclReferences, got); } break; } }
/// <summary> /// Validates all. /// </summary> /// <param name="mutableObject"> /// The mutable object. /// </param> /// <param name="structureType"> /// Type of the structure. /// </param> /// <param name="stubs"> /// if set to <c>true</c> [stubs]. /// </param> private static void ValidateAll(IMutableObjects mutableObject, BaseConstantType<SdmxStructureEnumType> structureType, bool stubs) { ValidateParentsAndSiblings(mutableObject, structureType, stubs); ValidateDescendants(mutableObject, structureType, stubs); }
/// <summary> /// Get component references. /// </summary> /// <param name="mutableObject"> /// The mutable object. /// </param> /// <param name="structureType"> /// The structure type. /// </param> /// <returns> /// The component reference /// </returns> private static IEnumerable<IStructureReference> GetComponentReferences(IMutableObjects mutableObject, BaseConstantType<SdmxStructureEnumType> structureType) { ISet<IStructureReference> structureReferences = new HashSet<IStructureReference>(); foreach (var dsd in mutableObject.DataStructures) { structureReferences.UnionWith(_referenceSetBuilder.Build(dsd)); } return (from m in structureReferences where m.MaintainableStructureEnumType.EnumType == structureType.EnumType select new StructureReferenceImpl(m.MaintainableReference, m.MaintainableStructureEnumType)).Distinct().ToArray(); }
/// <summary> /// Validates the specific. /// </summary> /// <param name="mutableObject"> /// The mutable object. /// </param> /// <param name="structureType"> /// Type of the structure. /// </param> /// <param name="stubs"> /// if set to <c>true</c> [stubs]. /// </param> /// <param name="specificStructureType"> /// Type of the specific structure. /// </param> /// <param name="structureReference"> /// The structure reference. /// </param> private static void ValidateSpecific( IMutableObjects mutableObject, BaseConstantType<SdmxStructureEnumType> structureType, bool stubs, BaseConstantType<SdmxStructureEnumType> specificStructureType, IStructureReference structureReference) { switch (structureType.EnumType) { case SdmxStructureEnumType.Categorisation: switch (specificStructureType.EnumType) { case SdmxStructureEnumType.Categorisation: break; case SdmxStructureEnumType.CategoryScheme: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CodeList: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.ConceptScheme: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dataflow: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dsd: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.HierarchicalCodelist: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; } break; case SdmxStructureEnumType.CategoryScheme: // if we have stubs then no categorisations can be retrieved. // as a result we cannot get other structures. if (!stubs) { switch (specificStructureType.EnumType) { case SdmxStructureEnumType.Categorisation: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CategoryScheme: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CodeList: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.ConceptScheme: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dataflow: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dsd: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.HierarchicalCodelist: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; } } break; case SdmxStructureEnumType.CodeList: switch (specificStructureType.EnumType) { case SdmxStructureEnumType.Categorisation: if (!stubs) { Assert.IsNotEmpty(mutableObject.Categorisations, structureReference.ToString()); } Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CategoryScheme: if (!stubs) { Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); } Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CodeList: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.ConceptScheme: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dataflow: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dsd: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.HierarchicalCodelist: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); // Assert.IsNotEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; } break; case SdmxStructureEnumType.ConceptScheme: switch (specificStructureType.EnumType) { case SdmxStructureEnumType.Categorisation: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CategoryScheme: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CodeList: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.ConceptScheme: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dataflow: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dsd: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.HierarchicalCodelist: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; } break; case SdmxStructureEnumType.Dataflow: switch (specificStructureType.EnumType) { case SdmxStructureEnumType.Categorisation: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CategoryScheme: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CodeList: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.ConceptScheme: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dataflow: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dsd: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.HierarchicalCodelist: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; } break; case SdmxStructureEnumType.Dsd: switch (specificStructureType.EnumType) { case SdmxStructureEnumType.Categorisation: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CategoryScheme: Assert.IsNotEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CodeList: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.ConceptScheme: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dataflow: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dsd: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.HierarchicalCodelist: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; } break; case SdmxStructureEnumType.HierarchicalCodelist: switch (specificStructureType.EnumType) { case SdmxStructureEnumType.Categorisation: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CategoryScheme: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.CodeList: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.ConceptScheme: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dataflow: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.Dsd: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; case SdmxStructureEnumType.HierarchicalCodelist: Assert.IsEmpty(mutableObject.CategorySchemes, structureReference.ToString()); Assert.IsEmpty(mutableObject.Categorisations, structureReference.ToString()); Assert.IsEmpty(mutableObject.Dataflows, structureReference.ToString()); Assert.IsEmpty(mutableObject.DataStructures, structureReference.ToString()); Assert.IsEmpty(mutableObject.Codelists, structureReference.ToString()); Assert.IsEmpty(mutableObject.ConceptSchemes, structureReference.ToString()); Assert.IsNotEmpty(mutableObject.HierarchicalCodelists, structureReference.ToString()); break; } break; } }
/// <summary> /// Parse the Header.DataSetAction and update the <see cref="_isDeleteMessage"/> /// </summary> /// <param name="action"> /// The SDMX Header /// </param> private void ParseAction(BaseConstantType<DatasetActionEnumType> action) { this._isDeleteMessage = action != null && action.EnumType == DatasetActionEnumType.Delete; }
/// <summary> /// Processes the node. /// </summary> /// <param name="crossReferenceManager">The cross reference manager.</param> /// <param name="maintainable">The maintainable.</param> /// <param name="specificStructureType">Type of the specific structure.</param> /// <param name="returnStub">if set to <c>true</c> [return stub].</param> /// <param name="allowedDataflows">The allowed dataflows.</param> /// <param name="rootNode">The root node.</param> /// <param name="specificObjects">The specific objects.</param> /// <param name="stack">The stack.</param> private static void ProcessNode( IAuthCrossReferenceMutableRetrievalManager crossReferenceManager, IMaintainableMutableObject maintainable, BaseConstantType<SdmxStructureEnumType> specificStructureType, bool returnStub, IList<IMaintainableRefObject> allowedDataflows, RelationNode rootNode, ICollection<IMaintainableMutableObject> specificObjects, Stack<IMaintainableMutableObject> stack) { var isTarget = rootNode.DestType == specificStructureType.EnumType; bool getStub; Action<IMaintainableMutableObject> action; if (isTarget) { getStub = returnStub; action = specificObjects.Add; } else { getStub = rootNode.DestType != SdmxStructureEnumType.Categorisation; action = stack.Push; } var rootFunc = GetFunc(crossReferenceManager, getStub, allowedDataflows, rootNode); foreach (var maintainableMutableObject in rootFunc(maintainable)) { action(maintainableMutableObject); } }
/// <summary> /// Returns specific structures of the specified type <paramref name="specificStructureType"/> related to the <paramref name="maintainable"/> /// </summary> /// <param name="crossReferenceManager"> /// The cross reference manager. /// </param> /// <param name="maintainable"> /// The maintainable. /// </param> /// <param name="specificStructureType"> /// The specific structure type. /// </param> /// <param name="returnStub"> /// The return stub. /// </param> /// <param name="allowedDataflows"> /// The allowed dataflows. /// </param> /// <returns> /// The <see cref="IEnumerable{IMaintainableMutableObject}"/>. /// </returns> private static IEnumerable<IMaintainableMutableObject> GetSpecificObjects( IAuthCrossReferenceMutableRetrievalManager crossReferenceManager, IMaintainableMutableObject maintainable, BaseConstantType<SdmxStructureEnumType> specificStructureType, bool returnStub, IList<IMaintainableRefObject> allowedDataflows) { var specificObjects = new List<IMaintainableMutableObject>(); var relationNodes = RelationBuilder.Build(maintainable.StructureType.EnumType, specificStructureType.EnumType); var stack = new Stack<IMaintainableMutableObject>(); foreach (var rootNode in relationNodes) { ProcessNode(crossReferenceManager, maintainable, specificStructureType, returnStub, allowedDataflows, rootNode, specificObjects, stack); while (stack.Count > 0) { var current = stack.Pop(); var currentNode = RelationBuilder.Build(current.StructureType.EnumType, specificStructureType.EnumType).FirstOrDefault(); if (currentNode != null) { ProcessNode(crossReferenceManager, current, specificStructureType, returnStub, allowedDataflows, currentNode, specificObjects, stack); } } } return specificObjects; }