/// <summary>
        /// Get hierachical codelist
        /// </summary>
        /// <param name="xmlNodeList">list of XmlNode (child nodes)</param>
        /// <param name="ParentCode">dimension Parent Code</param>
        /// <returns>list of Mutable Code Object</returns>
        private List <ICodeMutableObject> GetRecurviveDimension(XmlNodeList xmlNodeList, string ParentCode)
        {
            try
            {
                List <ICodeMutableObject> dim = new List <ICodeMutableObject>();

                foreach (XmlNode Member in xmlNodeList)
                {
                    if (((Member.Name != "Dimension" && Member.Name != "ChildMember" && Member.Name != "Member")) || Member.Attributes == null || Member.Attributes["Code"] == null)
                    {
                        continue;
                    }
                    string code = Member.Attributes["Code"].Value;

                    dim.Add(CodelistItemBuilder.BuildCodeObjects(Member.Attributes["Code"].Value, SdmxObjectNameDescription.GetNameDescriptions(Member), ParentCode));

                    dim.AddRange(GetRecurviveDimension(Member.ChildNodes, code));
                }
                return(dim);
            }
            catch (SdmxException) { throw; }
            catch (Exception)
            {
                return(new List <ICodeMutableObject>());
            }
        }
        /// <summary>
        /// retrieves the codelist of Frequency dimension from the file "FrequencyCodelist.xml"
        /// </summary>
        /// <returns>list of Mutable Code Object</returns>
        public List <ICodeMutableObject> GetFrequencyCodelist()
        {
            List <ICodeMutableObject> FrequencyCodesObjects = new List <ICodeMutableObject>();

            try
            {
                XmlDocument configuration = new XmlDocument();
                configuration.Load(FlyConfiguration.FrequencyCodelistFile);
                foreach (XmlNode item in configuration.ChildNodes[0].ChildNodes)
                {
                    if (item.Name != "Code" && item.Attributes == null || item.Attributes["Code"] == null)
                    {
                        continue;
                    }
                    FrequencyCodesObjects.Add(CodelistItemBuilder.BuildCodeObjects(item.Attributes["Code"].Value, SdmxObjectNameDescription.GetNameDescriptions(item), null));
                }
            }
            catch (SdmxException) { throw; }
            catch (Exception ex)
            {
                throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.GetFrequencyCodelist, ex);
            }

            return(FrequencyCodesObjects);
        }
        private List <ICodeMutableObject> SpecialCodelist_CL_COUNT(string _dataFlowCode)
        {
            List <IParameterValue> parametri = new List <IParameterValue>()
            {
                new ParameterValue()
                {
                    Item = "DataSetCode", Value = _dataFlowCode
                },
                new ParameterValue()
                {
                    Item = "WhereStatement", Value = "1=1"
                },
                new ParameterValue()
                {
                    Item = "UserName", Value = FlyConfiguration.UserName
                },
                new ParameterValue()
                {
                    Item = "Domain", Value = FlyConfiguration.Domain
                },
            };
            List <ICodeMutableObject> codes = new List <ICodeMutableObject>();

            codes.Add(CodelistItemBuilder.BuildCodeObjects(((DWHAccess)DbAccess).GetCL_COUNT(parametri).ToString(), new List <SdmxObjectNameDescription>()
            {
                new SdmxObjectNameDescription()
                {
                    Lingua = "en",
                    Name   = "Data count",
                }
            }, null));
            return(codes);
        }
        private List <ICodeMutableObject> AttributeCodelistFromFile(IAttributeConcept attribute)
        {
            List <ICodeMutableObject> AttributeCodesObjects = new List <ICodeMutableObject>();

            try
            {
                XmlDocument configuration = new XmlDocument();
                configuration.Load(FlyConfiguration.AttributeFile);
                foreach (XmlNode item in configuration.ChildNodes[0].ChildNodes)
                {
                    if (item.Name != "Attribute" && item.Attributes == null || item.Attributes["Code"] == null)
                    {
                        continue;
                    }
                    if (item.Attributes["Code"].Value == attribute.ConceptObjectCode)
                    {
                        foreach (XmlNode nodoCodelistAttr in CommonFunction.FindSubNodo(item, "Codelist").ChildNodes)
                        {
                            if (nodoCodelistAttr.Name == "Code" && nodoCodelistAttr.Attributes != null && nodoCodelistAttr.Attributes["value"] != null)
                            {
                                AttributeCodesObjects.Add(CodelistItemBuilder.BuildCodeObjects(nodoCodelistAttr.Attributes["value"].Value, SdmxObjectNameDescription.GetNameDescriptions(nodoCodelistAttr), null));
                            }
                        }
                        break;
                    }
                }
            }
            catch (SdmxException) { throw; }
            catch (Exception ex)
            {
                throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.GetAttributeError, ex);
            }

            return(AttributeCodesObjects);
        }
        /// <summary>
        /// retrieves the codelist of FlagDimension (OBS_STATUS) from database
        /// </summary>
        /// <param name="DataflowCode">Dataflow Code</param>
        /// <param name="flag">Instance of Attribute "AttributeConcept"</param>
        /// <returns>list of Mutable Code Object</returns>
        public List <ICodeMutableObject> GetFlagCodelist(string DataflowCode, IAttributeConcept flag)
        {
            try
            {
                if (!this.DbAccess.CheckExistStoreProcedure(DBOperationEnum.GetFlags))
                {
                    return(new List <ICodeMutableObject>());
                }
                List <ICodeMutableObject> _CodesObjects = new List <ICodeMutableObject>();

                //prima capisco se non è un attributo o un flag
                List <IParameterValue> parametri = new List <IParameterValue>()
                {
                    new ParameterValue()
                    {
                        Item = "Code", Value = DataflowCode
                    },
                };
                if (!string.IsNullOrEmpty(this.parsingObject.TimeStamp))
                {
                    parametri.Add(new ParameterValue()
                    {
                        Item = "TimeStamp", Value = this.parsingObject.TimeStamp, SqlType = SqlDbType.DateTime
                    });
                }

                //EFFETTUO LA RICHIESTA AL DB
                List <XmlNode> risposta = this.DbAccess.Execute(DBOperationEnum.GetFlags, parametri);


                ////PARSO LA RISPOSTA E CREO L'OGGETTO
                if (risposta.Count == 1 && risposta[0].Name == "DataSet" && risposta[0].ChildNodes.Count > 0)
                {
                    foreach (XmlNode Member in risposta[0])
                    {
                        if (Member.Name != "Flag" || Member.Attributes == null || Member.Attributes["Code"] == null)
                        {
                            continue;
                        }
                        string code = Member.Attributes["Code"].Value;
                        _CodesObjects.Add(CodelistItemBuilder.BuildCodeObjects(Member.Attributes["Code"].Value, SdmxObjectNameDescription.GetNameDescriptions(Member), null));
                    }
                }
                return(_CodesObjects);
            }
            catch (SdmxException) { throw; }
            catch (Exception ex)
            {
                throw new SdmxException(this, FlyExceptionObject.FlyExceptionTypeEnum.CreateICodeMutableObject, ex);
            }
        }
        private List <ICodeMutableObject> SpecialCodelist_CL_TIME_PERIOD(string _dataFlowCode)
        {
            List <IParameterValue> parametri = new List <IParameterValue>()
            {
                new ParameterValue()
                {
                    Item = "DataSetCode", Value = _dataFlowCode
                },
                new ParameterValue()
                {
                    Item = "WhereStatement", Value = "1=1"
                },
                new ParameterValue()
                {
                    Item = "UserName", Value = FlyConfiguration.UserName
                },
                new ParameterValue()
                {
                    Item = "Domain", Value = FlyConfiguration.Domain
                },
            };
            List <ICodeMutableObject> codes = new List <ICodeMutableObject>();
            string StartDate = null;
            string EndDate   = null;

            ((DWHAccess)DbAccess).GetCL_TIME_PERIOD(parametri, out StartDate, out EndDate);

            codes.Add(CodelistItemBuilder.BuildCodeObjects(string.Format("{0}-01-01", StartDate), new List <SdmxObjectNameDescription>()
            {
                new SdmxObjectNameDescription()
                {
                    Lingua = "en",
                    Name   = "Start Time period",
                }
            }, null));
            codes.Add(CodelistItemBuilder.BuildCodeObjects(string.Format("{0}-12-31", EndDate), new List <SdmxObjectNameDescription>()
            {
                new SdmxObjectNameDescription()
                {
                    Lingua = "en",
                    Name   = "End Time period",
                }
            }, null));
            return(codes);
        }