public List<Dictionary<string, string>> Get_DSDs()
        {
            ISet<Org.Sdmxsource.Sdmx.Api.Model.Mutable.DataStructure.IDataStructureMutableObject> dsds = ISTAT.DBDAL.DataSDMX.GetDSDList();
            List<Dictionary<string, string>> _res = new List<Dictionary<string, string>>();
            foreach (Org.Sdmxsource.Sdmx.Api.Model.Mutable.DataStructure.IDataStructureMutableObject dsd in dsds)
            {

                SDMXIdentifier sdmxIdentity = new SDMXIdentifier()
                {
                    agencyid = dsd.AgencyId,
                    id = dsd.Id,
                    version = dsd.Version
                };

                List<TextTypeWrapper> locations = new List<TextTypeWrapper>();
                foreach (Org.Sdmxsource.Sdmx.Api.Model.Mutable.Base.ITextTypeWrapperMutableObject text in dsd.Names)
                    locations.Add(new TextTypeWrapper(text.Locale, text.Value));

                int langIndex = TextTypeWrapper.GetIndexLocale(locations, SDMX_Dataloader.Engine.BuilderProcedure.CurrentCultureInfo);

                Dictionary<string, string> _result = new Dictionary<string, string>();

                string notFinal = "";

                if (!dsd.FinalStructure.IsTrue)
                    notFinal = "(Not final)";

                _result.Add("Text", string.Format(" [ {0} ] - {1} ", notFinal +" "+ sdmxIdentity.ToString(), dsd.Names[langIndex].Value));
                _result.Add("Value", sdmxIdentity.ToString());

                _res.Add(_result);
            }
            return _res;
        }
        public string CreateExport(string agency, string id, string version, List<string> dimensions, List<string> attributes, string type_download)
        {
            // Retrive Logged user
            SDMX_Dataloader.Engine.Client client = null;
            try
            {
                client = HttpContext.Current.Session[UserDef.UserSessionKey] as SDMX_Dataloader.Engine.Client; if (client == null) throw new Exception("Session Expiried");
            }
            catch (Exception ex)
            {
                return JsonMessage.SessionExpired;
            }

            try
            {

                if (!UserDef.UserCan(client.LoggedUser, UserDef.ActionDef.DefaultProc))
                    return JsonMessage.GetError(Resources.Notification.err_action_denied);

                // Get Settings Properties
                ISTAT.EXPORT.Settings.ContactSettingsHandler configContact =
                   (ISTAT.EXPORT.Settings.ContactSettingsHandler)System.Configuration.ConfigurationManager.GetSection(
                       "ExportDotStatSettingsGroup/ContactSection");

                ISTAT.EXPORT.Settings.SecuritySettingsHandler configSecurity =
                   (ISTAT.EXPORT.Settings.SecuritySettingsHandler)System.Configuration.ConfigurationManager.GetSection(
                       "ExportDotStatSettingsGroup/SecuritySection");

                // Get the current user

                SDMXIdentifier sdmxIdentity = new SDMXIdentifier()
                {
                    agencyid = agency,
                    id = id,
                    version = version
                };

                string filenameDSD = sdmxIdentity.ToString();

                Org.Sdmxsource.Sdmx.Util.Objects.Container.SdmxObjectsImpl sdmxObjects = new Org.Sdmxsource.Sdmx.Util.Objects.Container.SdmxObjectsImpl();

                Org.Sdmxsource.Sdmx.Api.Model.Objects.DataStructure.IDataStructureObject dsd = DataSDMX.GetDSD(sdmxIdentity);

                sdmxObjects.AddDataStructure(dsd);

                foreach (Org.Sdmxsource.Sdmx.Api.Model.Objects.DataStructure.IDimension dim in dsd.DimensionList.Dimensions){
                    if (!dim.TimeDimension && dimensions.Contains(dim.Id) && dim.HasCodedRepresentation())
                    {
                        Org.Sdmxsource.Sdmx.Api.Model.Objects.Codelist.ICodelistObject codelist = DataSDMX.GetCodelist(new SDMXIdentifier()
                        {
                            agencyid = dim.Representation.Representation.MaintainableReference.AgencyId,
                            id = dim.Representation.Representation.MaintainableReference.MaintainableId,
                            version = dim.Representation.Representation.MaintainableReference.Version
                        });
                        sdmxObjects.AddCodelist(codelist);
                    }
                }

                foreach (Org.Sdmxsource.Sdmx.Api.Model.Objects.DataStructure.IAttributeObject att in dsd.Attributes){
                    if (attributes.Contains(att.Id) && att.HasCodedRepresentation())
                    {
                        Org.Sdmxsource.Sdmx.Api.Model.Objects.Codelist.ICodelistObject codelist=DataSDMX.GetCodelist(new SDMXIdentifier(){
                            agencyid = att.Representation.Representation.MaintainableReference.AgencyId,
                            id = att.Representation.Representation.MaintainableReference.MaintainableId,
                            version = att.Representation.Representation.MaintainableReference.Version
                        });
                        sdmxObjects.AddCodelist(codelist);
                    }
                }

                List<ISTAT.IO.Utility.FileGeneric> files = new List<ISTAT.IO.Utility.FileGeneric>();

                List<ContactRef> contacs = new List<ContactRef>();
                contacs.Add(new ContactRef()
                {
                    name = configContact.Name,
                    direction = configContact.Direction,
                    email = configContact.Email
                });

                List<SecurityDef> securities = new List<SecurityDef>();
                securities.Add(new SecurityDef()
                {
                    domain = configSecurity.Domain,
                    userGroup = configSecurity.UserGroup,
                });

                DSDExporter _dsdExp = new DSDExporter(sdmxObjects);

                #region Export DSD
                if (type_download == "dsd")
                {

                    if (_dsdExp.CreateData(
                        contacs,
                        securities,
                        true, false))
                    {
                        System.Xml.XmlDocument xDoc = _dsdExp.XMLDoc;

                        MemoryStream xmlStream = new MemoryStream();
                        xDoc.Save(xmlStream);

                        xmlStream.Flush();
                        xmlStream.Position = 0;

                        ISTAT.IO.Utility.FileGeneric file = new ISTAT.IO.Utility.FileGeneric();
                        file.filename = filenameDSD + ".xml";
                        file.stream = xmlStream;

                        files.Add(file);
                    }
                }
                #endregion
                #region Export Codelist
                if (type_download == "codelist")
                {

                    if (_dsdExp.CreateData(
                        contacs,
                        securities,
                        true, false))
                    {
                        foreach (CodelistExporter _codeExp in _dsdExp.ExporterCodelists)
                        {
                            System.Xml.XmlDocument xDoc_code = _codeExp.XMLDoc;
                            MemoryStream xmlStream_code = new MemoryStream();
                            xDoc_code.Save(xmlStream_code);
                            xmlStream_code.Flush();
                            xmlStream_code.Position = 0;
                            ISTAT.IO.Utility.FileGeneric file_code = new ISTAT.IO.Utility.FileGeneric();
                            file_code.filename = _codeExp.Code.ToString() + ".xml";
                            file_code.stream = xmlStream_code;
                            files.Add(file_code);

                            Stream streamCSV = CSVWriter.CreateStream(_codeExp.DataView);
                            ISTAT.IO.Utility.FileGeneric file_csv = new ISTAT.IO.Utility.FileGeneric();
                            file_csv.filename = _codeExp.DataFilename;
                            file_csv.stream = streamCSV;
                            files.Add(file_csv);
                        }
                    }
                }
                #endregion
                #region Export ALL
                if (type_download == "all")
                {

                    if (_dsdExp.CreateData(
                        contacs,
                        securities,
                        true, false))
                    {
                        System.Xml.XmlDocument xDoc = _dsdExp.XMLDoc;

                        MemoryStream xmlStream = new MemoryStream();
                        xDoc.Save(xmlStream);

                        xmlStream.Flush();
                        xmlStream.Position = 0;

                        ISTAT.IO.Utility.FileGeneric file = new ISTAT.IO.Utility.FileGeneric();
                        file.filename = filenameDSD + ".xml";
                        file.stream = xmlStream;

                        files.Add(file);
                        foreach (CodelistExporter _codeExp in _dsdExp.ExporterCodelists)
                        {
                            System.Xml.XmlDocument xDoc_code = _codeExp.XMLDoc;
                            MemoryStream xmlStream_code = new MemoryStream();
                            xDoc_code.Save(xmlStream_code);
                            xmlStream_code.Flush();
                            xmlStream_code.Position = 0;
                            ISTAT.IO.Utility.FileGeneric file_code = new ISTAT.IO.Utility.FileGeneric();
                            file_code.filename = _codeExp.Code.ToString() + ".xml";
                            file_code.stream = xmlStream_code;
                            files.Add(file_code);

                            Stream streamCSV = CSVWriter.CreateStream(_codeExp.DataView);
                            ISTAT.IO.Utility.FileGeneric file_csv = new ISTAT.IO.Utility.FileGeneric();
                            file_csv.filename = _codeExp.DataFilename;
                            file_csv.stream = streamCSV;
                            files.Add(file_csv);
                        }
                    }
                }
                #endregion

                string fileZip = System.Web.HttpContext.Current.Server.MapPath(@"~\Temp\\" + filenameDSD + ".zip");
                System.IO.File.Delete(fileZip);
                Ionic.Utils.Zip.ZipFile zip = new Ionic.Utils.Zip.ZipFile(fileZip);
                foreach (ISTAT.IO.Utility.FileGeneric file in files)
                    zip.AddFileStream(file.filename, string.Empty, file.stream);
                zip.Save();

                client.FileToDownload = fileZip;

                return JsonMessage.EmptyJSON;

            }
            catch (Exception ex)
            {

                Logger.Error(ex.Message);
                return JsonMessage.ErrorOccured;

            }
        }