public void TestDetail(SdmxStructureEnumType sdmxStructure, StructureReferenceDetailEnumType detail)
        {
            var agency = new ComplexTextReferenceCore(null, TextSearch.GetFromEnum(TextSearchEnumType.Equal), "TEST");
            var id = new ComplexTextReferenceCore(null, TextSearch.GetFromEnum(TextSearchEnumType.Equal), "TEST");
            IComplexVersionReference versionRef = new ComplexVersionReferenceCore(TertiaryBool.ParseBoolean(false), "1.0", null, null);
            var complexStructureReferenceCore = new ComplexStructureReferenceCore(agency, id, versionRef, SdmxStructureType.GetFromEnum(sdmxStructure), null, null, null, null);
            var complexStructureQueryMetadataCore = new ComplexStructureQueryMetadataCore(
                true,
                ComplexStructureQueryDetail.GetFromEnum(ComplexStructureQueryDetailEnumType.Full),
                ComplexMaintainableQueryDetail.GetFromEnum(ComplexMaintainableQueryDetailEnumType.Full),
                StructureReferenceDetail.GetFromEnum(detail),
                new [] { SdmxStructureType.GetFromEnum(sdmxStructure) });
            IComplexStructureQuery complexStructureQuery = new ComplexStructureQueryCore(complexStructureReferenceCore, complexStructureQueryMetadataCore);

            var builder = new ComplexStructureQueryBuilderV21();
            var structureQuery = builder.BuildComplexStructureQuery(complexStructureQuery);
            var fileName = string.Format("test-ComplexStructureQueryBuilderV21-{0}-{1}.xml", sdmxStructure.ToString(), detail.ToString());
            structureQuery.Save(fileName);
            using (var readable = new FileReadableDataLocation(fileName))
            {
                XMLParser.ValidateXml(readable, SdmxSchemaEnumType.VersionTwoPointOne);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// list of Metadata type referenced
        /// a tree of references
        ///   *         Categorisation
        ///   * CategoryScheme       Dataflow
        ///   *                        Dsd
        ///   *                Codelist    Concept
        /// </summary>
        /// <param name="startMetaType">Metadata type to found reference</param>
        /// <param name="refType">StructureReferenceDetailEnumType</param>
        /// <param name="specificRef">List of Structure required for references</param>
        /// <returns>list of Metadata type referenced</returns>
        public static List <ReferenceTreeEnum> GetReferences(ReferenceTreeEnum startMetaType, StructureReferenceDetailEnumType refType, List <SdmxStructureType> specificRef)
        {
            List <ReferenceTreeEnum> references = new List <ReferenceTreeEnum>();

            switch (refType)
            {
            case StructureReferenceDetailEnumType.All:
                GetDescendants(startMetaType, ref references);
                references.AddRange(GetParentsAndSibling(startMetaType));
                break;

            case StructureReferenceDetailEnumType.Children:
                references = GetChildren(startMetaType);
                break;

            case StructureReferenceDetailEnumType.Descendants:
                GetDescendants(startMetaType, ref references);
                break;

            case StructureReferenceDetailEnumType.Parents:
                references = GetParent(startMetaType);
                break;

            case StructureReferenceDetailEnumType.ParentsSiblings:
                references = GetParentsAndSibling(startMetaType);
                break;

            case StructureReferenceDetailEnumType.Specific:
                references = GetSpecificRef(startMetaType, specificRef);
                break;

            case StructureReferenceDetailEnumType.None:
            case StructureReferenceDetailEnumType.Null:
                break;
            }

            references = DeleteDuplexAndOrder(references);

            return(references);
        }
        public void TestGetMaintainables(
            SdmxStructureEnumType structureEnumType, 
            StructureQueryDetailEnumType detail, 
            StructureReferenceDetailEnumType refDetailEnum, 
            SdmxStructureEnumType specificStructure)
        {
            var mutableSearchManager = this.GetMutableSearchManager(this._connectionString);
            var refDetail = StructureReferenceDetail.GetFromEnum(refDetailEnum);

            var sdmxStructureType = SdmxStructureType.GetFromEnum(specificStructure == SdmxStructureEnumType.HierarchicalCodelist && structureEnumType == SdmxStructureEnumType.CodeList ? SdmxStructureEnumType.HierarchicalCodelist : SdmxStructureEnumType.Categorisation);
            IStructureReference reference = new StructureReferenceImpl(new MaintainableRefObjectImpl(), sdmxStructureType);

            SdmxStructureType structureType = SdmxStructureType.GetFromEnum(structureEnumType);
            IRestStructureQuery query = new RESTStructureQueryCore(
                StructureQueryDetail.GetFromEnum(StructureQueryDetailEnumType.Full),
                StructureReferenceDetail.GetFromEnum(StructureReferenceDetailEnumType.Specific),
                structureType,
                reference,
                false);
            var allObjects = mutableSearchManager.GetMaintainables(query).GetMaintainables(structureType);
            var referenceLevel = StructureReferenceDetail.GetFromEnum(refDetailEnum);

            _log.DebugFormat(CultureInfo.InvariantCulture, "Structure type: {0}, Detail: {1}, Reference : {2}", structureType, detail, refDetail);
            foreach (var maintainableMutableObject in allObjects)
            {
                if ("MA".Equals(maintainableMutableObject.AgencyId))
                {
                    continue;
                }

                var structureReference = _fromMutable.Build(maintainableMutableObject);
                _log.DebugFormat(CultureInfo.InvariantCulture, "Checking maintainable : {0}", structureReference);
                var mockQuery = new RESTStructureQueryCore(StructureQueryDetail.GetFromEnum(detail), referenceLevel, SdmxStructureType.GetFromEnum(specificStructure), structureReference, false);
                switch (refDetail.EnumType)
                {
                    case StructureReferenceDetailEnumType.Null:
                        break;
                    case StructureReferenceDetailEnumType.None:
                        {
                            var mutableObject = GetMutables(mutableSearchManager, mockQuery, maintainableMutableObject);
                            Assert.IsTrue(mutableObject.GetMaintainables(structureType).All(o => o.StructureType.EnumType == structureType.EnumType));
                        }

                        break;
                    case StructureReferenceDetailEnumType.Parents:
                        {
                            var mutableObject = GetMutables(mutableSearchManager, mockQuery, maintainableMutableObject);
                            ValidateParents(mutableObject, structureType, detail != StructureQueryDetailEnumType.Full, structureReference);
                        }

                        break;
                    case StructureReferenceDetailEnumType.ParentsSiblings:
                        {
                            var mutableObject = GetMutables(mutableSearchManager, mockQuery, maintainableMutableObject);
                            ValidateParentsAndSiblings(mutableObject, structureType, detail != StructureQueryDetailEnumType.Full);
                        }

                        break;
                    case StructureReferenceDetailEnumType.Children:
                        {
                            var mutableObject = GetMutables(mutableSearchManager, mockQuery, maintainableMutableObject);
                            ValidateChildren(mutableObject, structureType, detail != StructureQueryDetailEnumType.Full);
                        }

                        break;
                    case StructureReferenceDetailEnumType.Descendants:
                        {
                            var mutableObject = GetMutables(mutableSearchManager, mockQuery, maintainableMutableObject);
                            ValidateDescendants(mutableObject, structureType, detail != StructureQueryDetailEnumType.Full);
                        }

                        break;
                    case StructureReferenceDetailEnumType.All:
                        {
                            var mutableObject = GetMutables(mutableSearchManager, mockQuery, maintainableMutableObject);
                            ValidateAll(mutableObject, structureType, detail != StructureQueryDetailEnumType.Full);
                        }

                        break;
                    case StructureReferenceDetailEnumType.Specific:
                        {
                            if (specificStructure != SdmxStructureEnumType.Categorisation || detail == StructureQueryDetailEnumType.Full)
                            {
                                var specificStructureReference = SdmxStructureType.GetFromEnum(specificStructure);
                                var specificQuery = new RESTStructureQueryCore(StructureQueryDetail.GetFromEnum(detail), referenceLevel, specificStructureReference, structureReference, false);
                                var mutablesWithSpecific = GetMutables(mutableSearchManager, specificQuery, maintainableMutableObject);
                                ValidateSpecific(mutablesWithSpecific, structureType, detail != StructureQueryDetailEnumType.Full, specificStructureReference, structureReference);
                            }
                        }

                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }
            }
        }
        public void TestGetMaintainablesAuthResult(SdmxStructureEnumType structureEnumType, StructureQueryDetailEnumType detail, StructureReferenceDetailEnumType refDetailEnum)
        {
            var mutableSearchManager = this.GetAuthMutableSearchManager(this._connectionString);
            var refDetail = StructureReferenceDetail.GetFromEnum(refDetailEnum);
            var structureType = SdmxStructureType.GetFromEnum(structureEnumType);
            IStructureReference reference = new StructureReferenceImpl(new MaintainableRefObjectImpl(), structureType);
            switch (structureType.EnumType)
            {
                case SdmxStructureEnumType.Dataflow:
                case SdmxStructureEnumType.Dsd:
                    var allowedDataflows = (from x in this._fullRetrievalManager.GetMutableDataflowObjects(new MaintainableRefObjectImpl(), false, false) select _fromMutable.Build(x).MaintainableReference).ToArray();

                    var list = this._fullRetrievalManager.GetMutableMaintainables(reference, false, false);
                    var queryMetadataMock = new Mock<IStructureQueryMetadata>();
                    queryMetadataMock.Setup(query => query.IsReturnLatest).Returns(false);
                    queryMetadataMock.Setup(query => query.SpecificStructureReference).Returns((SdmxStructureType)null);
                    queryMetadataMock.Setup(query => query.StructureReferenceDetail).Returns(refDetail);
                    queryMetadataMock.Setup(query => query.StructureQueryDetail).Returns(StructureQueryDetail.GetFromEnum(detail));

                    var mockQuery = new Mock<IRestStructureQuery>();
                    mockQuery.Setup(query => query.StructureReference).Returns(reference);
                    mockQuery.Setup(query => query.StructureQueryMetadata).Returns(() => queryMetadataMock.Object);
                    _log.DebugFormat(CultureInfo.InvariantCulture, "Structure type: {0}, Detail: {1}, Reference : {2}", structureType, detail, refDetail);
                    foreach (var maintainableMutableObject in list)
                    {
                        switch (refDetail.EnumType)
                        {
                            case StructureReferenceDetailEnumType.Null:
                                break;
                            case StructureReferenceDetailEnumType.None:
                                {
                                    var mutableObject = mutableSearchManager.GetMaintainables(mockQuery.Object, allowedDataflows);
                                    Assert.IsNotNull(mutableObject, _fromMutable.Build(maintainableMutableObject).ToString());
                                    Assert.IsNotEmpty(mutableObject.AllMaintainables, _fromMutable.Build(maintainableMutableObject).ToString());
                                }

                                break;
                            case StructureReferenceDetailEnumType.Parents:
                                {
                                    var mutableObject = mutableSearchManager.GetMaintainables(mockQuery.Object, allowedDataflows);
                                    Assert.IsNotNull(mutableObject, _fromMutable.Build(maintainableMutableObject).ToString());
                                    Assert.IsNotEmpty(mutableObject.AllMaintainables, _fromMutable.Build(maintainableMutableObject).ToString());
                                }

                                break;
                            case StructureReferenceDetailEnumType.ParentsSiblings:
                                break;
                            case StructureReferenceDetailEnumType.Children:
                                {
                                    var mutableObject = mutableSearchManager.GetMaintainables(mockQuery.Object, allowedDataflows);
                                    Assert.IsNotNull(mutableObject, _fromMutable.Build(maintainableMutableObject).ToString());
                                    Assert.IsNotEmpty(mutableObject.AllMaintainables, _fromMutable.Build(maintainableMutableObject).ToString());
                                }

                                break;
                            case StructureReferenceDetailEnumType.Descendants:
                                break;
                            case StructureReferenceDetailEnumType.All:
                                break;
                            case StructureReferenceDetailEnumType.Specific:
                                {
                                    queryMetadataMock.Setup(query => query.StructureReferenceDetail).Returns(StructureReferenceDetail.GetFromEnum(StructureReferenceDetailEnumType.None));
                                    var mutableObject = mutableSearchManager.GetMaintainables(mockQuery.Object, allowedDataflows);
                                    queryMetadataMock.Setup(query => query.StructureReferenceDetail).Returns(refDetail);
                                    Assert.IsNotNull(mutableObject, _fromMutable.Build(maintainableMutableObject).ToString());
                                    Assert.IsNotEmpty(mutableObject.AllMaintainables, _fromMutable.Build(maintainableMutableObject).ToString());
                                }

                                break;
                            default:
                                throw new ArgumentOutOfRangeException();
                        }
                    }

                    break;
            }
        }
 private string  GetStructureQueryFormat(IStructureReference dataflowRef, string version,StructureQueryDetailEnumType structureQueryDetail, StructureReferenceDetailEnumType structureReference )
 {
     IStructureQueryFormat<string> structureQueryFormat = new RestQueryFormat();
     IStructureQueryFactory factory = new RestStructureQueryFactory();
     IStructureQueryBuilderManager structureQueryBuilderManager = new StructureQueryBuilderManager(factory);
     bool returnLatest = version == null;
     SdmxStructureType specificStructureReference = structureReference == StructureReferenceDetailEnumType.Specific? SdmxStructureType.GetFromEnum(SdmxStructureEnumType.CodeList) : null;
     IRestStructureQuery structureQuery = new RESTStructureQueryCore(StructureQueryDetail.GetFromEnum(structureQueryDetail), StructureReferenceDetail.GetFromEnum(structureReference), specificStructureReference, dataflowRef, returnLatest);
     string request = structureQueryBuilderManager.BuildStructureQuery(structureQuery, structureQueryFormat);
     return request;
 }
        public void TestRestStructureQueryIsMaintainable(string agency, string id, string version, StructureQueryDetailEnumType structureQueryDetail, StructureReferenceDetailEnumType structureReferenceDetail)
        {

            var dataflowRef = new StructureReferenceImpl(SdmxStructureType.GetFromEnum(SdmxStructureEnumType.Dataflow))
            {
                MaintainableId = id,
                AgencyId = agency,
                Version = version,
            };

            bool returnLatest = version == null;
            IRestStructureQuery structureQuery;
            
            Assert.Throws<SdmxSemmanticException>(() => structureQuery = new RESTStructureQueryCore(StructureQueryDetail.GetFromEnum(structureQueryDetail), StructureReferenceDetail.GetFromEnum(structureReferenceDetail), SdmxStructureType.GetFromEnum(SdmxStructureEnumType.Code), dataflowRef, returnLatest));
            Assert.Throws<SdmxSemmanticException>(() => structureQuery = new RESTStructureQueryCore(StructureQueryDetail.GetFromEnum(structureQueryDetail), StructureReferenceDetail.GetFromEnum(structureReferenceDetail), SdmxStructureType.GetFromEnum(SdmxStructureEnumType.Category), dataflowRef, returnLatest));
            Assert.Throws<SdmxSemmanticException>(() => structureQuery = new RESTStructureQueryCore(StructureQueryDetail.GetFromEnum(structureQueryDetail), StructureReferenceDetail.GetFromEnum(structureReferenceDetail), SdmxStructureType.GetFromEnum(SdmxStructureEnumType.Dimension), dataflowRef, returnLatest));

        }
        public void TestRestStructureQueryExpectedResultTest2(string agency, string id, string version, string expectedResult, StructureQueryDetailEnumType structureQueryDetail, StructureReferenceDetailEnumType structureReferenceDetail)
        {

            var dataflowRef = new StructureReferenceImpl(SdmxStructureType.GetFromEnum(SdmxStructureEnumType.Dataflow))
            {
                MaintainableId = id,
                AgencyId = agency,
                Version = version,
            };

            string request = GetStructureQueryFormat(dataflowRef, version, structureQueryDetail, structureReferenceDetail);
            Assert.IsNotNull(request);
            Assert.AreEqual(request, expectedResult);

        }