Пример #1
0
        private static List <ReferenceTreeEnum> GetChildren(ReferenceTreeEnum MetaType)
        {
            switch (MetaType)
            {
            case ReferenceTreeEnum.Categorisation:
                return(new List <ReferenceTreeEnum>()
                {
                    ReferenceTreeEnum.CategoryScheme, ReferenceTreeEnum.Dataflow
                });

            case ReferenceTreeEnum.Dataflow:
                return(new List <ReferenceTreeEnum>()
                {
                    ReferenceTreeEnum.Dsd
                });

            case ReferenceTreeEnum.Dsd:
                return(new List <ReferenceTreeEnum>()
                {
                    ReferenceTreeEnum.Codelist, ReferenceTreeEnum.Concept
                });

            case ReferenceTreeEnum.CategoryScheme:
            case ReferenceTreeEnum.Codelist:
            case ReferenceTreeEnum.Concept:
            default:
                return(new List <ReferenceTreeEnum>());
            }
        }
Пример #2
0
        private static List <ReferenceTreeEnum> GetParentsAndSibling(ReferenceTreeEnum MetaType)
        {
            List <ReferenceTreeEnum> pa      = GetParent(MetaType);
            List <ReferenceTreeEnum> sibling = new List <ReferenceTreeEnum>();

            pa.ForEach(p => sibling.AddRange(GetChildren(p)));
            pa.AddRange(sibling);
            return(pa);
        }
Пример #3
0
        private static void GetDescendants(ReferenceTreeEnum MetaType, ref List <ReferenceTreeEnum> lst)
        {
            List <ReferenceTreeEnum> desc = GetChildren(MetaType);

            lst.AddRange(desc);
            foreach (var d in desc)
            {
                GetDescendants(d, ref lst);
            }
        }
Пример #4
0
        /// <summary>
        /// Get a Structure reference in ResolveReference Query request
        /// </summary>
        /// <param name="startMetaType">requested Metadata type</param>
        /// <returns></returns>
        public static List <ReferenceTreeEnum> ResolveReferences(ReferenceTreeEnum startMetaType)
        {
            //Children+Siblings
            List <ReferenceTreeEnum> padre      = GetParent(startMetaType);
            List <ReferenceTreeEnum> references = new List <ReferenceTreeEnum>();

            padre.ForEach(p => references.AddRange(GetChildren(p)));
            references.AddRange(GetChildren(startMetaType));



            references = DeleteDuplexAndOrder(references);
            return(references);
        }
Пример #5
0
        private static List <ReferenceTreeEnum> GetSpecificRef(ReferenceTreeEnum startMetaType, List <SdmxStructureType> specificRef)
        {
            List <ReferenceTreeEnum> references = new List <ReferenceTreeEnum>();

            if (specificRef == null)
            {
                return(references);
            }
            foreach (var item in specificRef)
            {
                switch (item.EnumType)
                {
                case SdmxStructureEnumType.Categorisation:
                    references.Add(ReferenceTreeEnum.Categorisation);
                    break;

                case SdmxStructureEnumType.CategoryScheme:
                    references.Add(ReferenceTreeEnum.CategoryScheme);
                    break;

                case SdmxStructureEnumType.CodeList:
                    references.Add(ReferenceTreeEnum.Codelist);
                    break;

                case SdmxStructureEnumType.ConceptScheme:
                    references.Add(ReferenceTreeEnum.Concept);
                    break;

                case SdmxStructureEnumType.Dataflow:
                    references.Add(ReferenceTreeEnum.Dataflow);
                    break;

                case SdmxStructureEnumType.Dsd:
                    references.Add(ReferenceTreeEnum.Dsd);
                    break;

                default:
                    break;
                }
            }
            return(references);
        }
Пример #6
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);
        }