private ArtefactInfo Prepare_ArtefactInfo_From_CategoryScheme(CategorySchemeType CategoryScheme, string FileName)
        {
            ArtefactInfo RetVal;
            SDMXObjectModel.Message.StructureType Structure;
            XmlDocument XmlContent;

            RetVal = null;
            XmlContent = null;

            try
            {
                Structure = this.Get_Structure_Object(CategoryScheme);
                XmlContent = Serializer.SerializeToXmlDocument(typeof(SDMXObjectModel.Message.StructureType), Structure);
                RetVal = new ArtefactInfo(CategoryScheme.id, CategoryScheme.agencyID, CategoryScheme.version, string.Empty, ArtefactTypes.CategoryS, FileName, XmlContent);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }

            return RetVal;
        }
        private ArtefactInfo Generate_Theme_CategoryScheme()
        {
            ArtefactInfo RetVal;
            CategorySchemeType CategoryScheme;
            CategoryType Category;
            string ICGId, ICNId, ICName;
            string Query;
            DataTable DtICs;
            RetVal = null;

            try
            {
                CategoryScheme = new CategorySchemeType(Constants.CategoryScheme.Theme.Id, this.AgencyId, Constants.CategoryScheme.Theme.Version, Constants.CategoryScheme.Theme.Name, Constants.CategoryScheme.Theme.Description, Constants.DefaultLanguage, null);

                if (this._completeOrSummaryFlag == true)
                {
                    Query = this.Get_Language_Specific_Query(CategorySchemeTypes.Theme, FilterFieldType.None, string.Empty, this.Language);
                    DtICs = this.DIConnection.ExecuteDataTable(Query);

                    foreach (DataRow DrICs in DtICs.Select(IndicatorClassifications.ICParent_NId + Constants.EqualsTo + Constants.MinusOne))
                    {
                        ICNId = DrICs[IndicatorClassifications.ICNId].ToString();
                        ICGId = DrICs[IndicatorClassifications.ICGId].ToString();
                        ICName = DrICs[IndicatorClassifications.ICName].ToString();

                        Category = new CategoryType(ICGId, ICName, string.Empty, this.Language, null);
                        if (this.MultiLanguageHandlingRequired)
                        {
                            this.Handle_All_Languages(CategorySchemeTypes.Theme, Category, ICGId);
                        }

                        this.Add_Children_Categories(CategorySchemeTypes.Theme, Category, ICNId, DtICs);
                        CategoryScheme.Items.Add(Category);
                    }

                    if (CategoryScheme.Items.Count > 0)
                    {
                        RetVal = this.Prepare_ArtefactInfo_From_CategoryScheme(CategoryScheme, this.Get_File_Name(CategorySchemeTypes.Theme));
                    }
                }
                else
                {
                    RetVal = this.Prepare_ArtefactInfo_From_CategoryScheme(CategoryScheme, this.Get_File_Name(CategorySchemeTypes.Theme));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }

            return RetVal;
        }
        private SDMXObjectModel.Message.StructureType Get_Structure_Object(CategorySchemeType CategoryScheme)
        {
            SDMXObjectModel.Message.StructureType RetVal;

            RetVal = new SDMXObjectModel.Message.StructureType();
            RetVal.Header = this.Get_Appropriate_Header();
            RetVal.Structures = new StructuresType(null, null, null, null, null, null, null, null, null, null, null, CategoryScheme, null, null, null);
            RetVal.Footer = null;

            return RetVal;
        }
        public StructuresType(ProvisionAgreementType provisionAgreement, ConstraintType constraint, ProcessType process, 
                              ReportingTaxonomyType reportingTaxonomoy, StructureSetType structureSet, DataStructureType dataStructure, 
                              MetadataStructureType metadataStructure, ConceptSchemeType conceptScheme, 
                              HierarchicalCodelistType hierarchicalCodelist, CodelistType codelist, CategorisationType categorisation, 
                              CategorySchemeType categoryScheme, MetadataflowType metadataFlow, DataflowType dataFlow, 
                              OrganisationSchemeType organisationScheme)
        {
            if (provisionAgreement != null)
            {
                this.provisionAgreementsField = new List<ProvisionAgreementType>();
                this.provisionAgreementsField.Add(provisionAgreement);
            }

            if (constraint != null)
            {
                this.constraintsField = new List<ConstraintType>();
                this.constraintsField.Add(constraint);
            }

            if (process != null)
            {
                this.processesField = new List<ProcessType>();
                this.processesField.Add(process);
            }

            if (reportingTaxonomoy != null)
            {
                this.reportingTaxonomiesField = new List<ReportingTaxonomyType>();
                this.reportingTaxonomiesField.Add(reportingTaxonomoy);
            }

            if (structureSet != null)
            {
                this.structureSetsField = new List<StructureSetType>();
                this.structureSetsField.Add(structureSet);
            }

            if (dataStructure != null)
            {
                this.dataStructuresField = new List<DataStructureType>();
                this.dataStructuresField.Add(dataStructure);
            }

            if (metadataStructure != null)
            {
                this.metadataStructuresField = new List<MetadataStructureType>();
                this.metadataStructuresField.Add(metadataStructure);
            }

            if (conceptScheme != null)
            {
                this.conceptsField = new List<ConceptSchemeType>();
                this.conceptsField.Add(conceptScheme);
            }

            if (hierarchicalCodelist != null)
            {
                this.hierarchicalCodelistsField = new List<HierarchicalCodelistType>();
                this.hierarchicalCodelistsField.Add(hierarchicalCodelist);
            }

            if (codelist != null)
            {
                this.codelistsField = new List<CodelistType>();
                this.codelistsField.Add(codelist);
            }

            if (categorisation != null)
            {
                this.categorisationsField = new List<CategorisationType>();
                this.categorisationsField.Add(categorisation);
            }

            if (categoryScheme != null)
            {
                this.categorySchemesField = new List<CategorySchemeType>();
                this.categorySchemesField.Add(categoryScheme);
            }

            if (metadataFlow != null)
            {
                this.metadataflowsField = new List<MetadataflowType>();
                this.metadataflowsField.Add(metadataFlow);
            }

            if (dataFlow != null)
            {
                this.dataflowsField = new List<DataflowType>();
                this.dataflowsField.Add(dataFlow);
            }

            if (organisationScheme != null)
            {
                this.organisationSchemesField = new List<OrganisationSchemeType>();
                this.organisationSchemesField.Add(organisationScheme);
            }
        }