/// <summary>
        /// Adds the saved configuration from document to the map.
        /// </summary>
        /// <param name="document">The document storing the saved configuration.</param>
        public void AddSavedConfigurations(Document document)
        {
            if (m_schema == null)
            {
                m_schema = Schema.Lookup(s_schemaId);
            }

            if (m_schema != null)
            {
                foreach (DataStorage storedSetup in GetSavedConfigurations(document))
                {
                    Entity configEntity = storedSetup.GetEntity(m_schema);
                    IFCExportConfiguration configuration = IFCExportConfiguration.CreateDefaultConfiguration();
                    configuration.Name = configEntity.Get <String>(s_setupName);
                    //configuration.Description = configEntity.Get<String>(s_setupDescription);
                    configuration.IFCVersion                       = (IFCVersion)configEntity.Get <int>(s_setupVersion);
                    configuration.IFCFileType                      = (IFCFileFormat)configEntity.Get <int>(s_setupFileFormat);
                    configuration.SpaceBoundaries                  = configEntity.Get <int>(s_setupSpaceBoundaries);
                    configuration.ExportBaseQuantities             = configEntity.Get <bool>(s_setupQTO);
                    configuration.SplitWallsAndColumns             = configEntity.Get <bool>(s_splitWallsAndColumns);
                    configuration.Export2DElements                 = configEntity.Get <bool>(s_setupExport2D);
                    configuration.ExportInternalRevitPropertySets  = configEntity.Get <bool>(s_setupExportRevitProps);
                    configuration.Use2DRoomBoundaryForVolume       = configEntity.Get <bool>(s_setupUse2DForRoomVolume);
                    configuration.UseFamilyAndTypeNameForReference = configEntity.Get <bool>(s_setupUseFamilyAndTypeName);
                    configuration.ExportPartsAsBuildingElements    = configEntity.Get <bool>(s_setupExportPartsAsBuildingElements);

                    Add(configuration);
                }
            }
        }
        public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {
            if (dictionary == null)
            {
                throw new ArgumentNullException("dictionary");
            }

            if (type != typeof(IFCExportConfiguration))
            {
                return(null);
            }

            // Create the instance to deserialize into.
            IFCExportConfiguration config = IFCExportConfiguration.CreateDefaultConfiguration();

            config.DeserializeFromJson(dictionary, serializer);
            return(config);
        }
        /// <summary>
        /// Creates a new configuration, either a default or a copy configuration.
        /// </summary>
        /// <param name="configuration">The specific configuration, null to create a defult configuration.</param>
        /// <param name="name">The name of the new configuration.</param>
        /// <returns>The new configuration.</returns>
        private IFCExportConfiguration CreateNewEditableConfiguration(IFCExportConfiguration configuration, String name)
        {
            // create new configuration based on input, or default configuration.
            IFCExportConfiguration newConfiguration;

            if (configuration == null)
            {
                newConfiguration      = IFCExportConfiguration.CreateDefaultConfiguration();
                newConfiguration.Name = name;
            }
            else
            {
                newConfiguration = configuration.Duplicate(name);
            }
            m_configurationsMap.Add(newConfiguration);

            // set new configuration as selected
            listBoxConfigurations.Items.Add(newConfiguration);
            listBoxConfigurations.SelectedItem = newConfiguration;
            return(configuration);
        }
        /// <summary>
        /// Adds the saved configuration from document to the map.
        /// </summary>
        public void AddSavedConfigurations()
        {
            try
            {
                if (m_schema == null)
                {
                    m_schema = Schema.Lookup(s_schemaId);
                }
                if (m_mapSchema == null)
                {
                    m_mapSchema = Schema.Lookup(s_mapSchemaId);
                }

                if (m_mapSchema != null)
                {
                    foreach (DataStorage storedSetup in GetSavedConfigurations(m_mapSchema))
                    {
                        Entity configEntity = storedSetup.GetEntity(m_mapSchema);
                        IDictionary <string, string> configMap     = configEntity.Get <IDictionary <string, string> >(s_configMapField);
                        IFCExportConfiguration       configuration = IFCExportConfiguration.CreateDefaultConfiguration();
                        if (configMap.ContainsKey(s_setupName))
                        {
                            configuration.Name = configMap[s_setupName];
                        }
                        if (configMap.ContainsKey(s_setupVersion))
                        {
                            configuration.IFCVersion = (IFCVersion)Enum.Parse(typeof(IFCVersion), configMap[s_setupVersion]);
                        }
                        if (configMap.ContainsKey(s_setupFileFormat))
                        {
                            configuration.IFCFileType = (IFCFileFormat)Enum.Parse(typeof(IFCFileFormat), configMap[s_setupFileFormat]);
                        }
                        if (configMap.ContainsKey(s_setupSpaceBoundaries))
                        {
                            configuration.SpaceBoundaries = int.Parse(configMap[s_setupSpaceBoundaries]);
                        }
                        if (configMap.ContainsKey(s_setupActivePhase))
                        {
                            configuration.ActivePhaseId = new ElementId(int.Parse(configMap[s_setupActivePhase]));
                        }
                        if (configMap.ContainsKey(s_setupQTO))
                        {
                            configuration.ExportBaseQuantities = bool.Parse(configMap[s_setupQTO]);
                        }
                        if (configMap.ContainsKey(s_setupCurrentView))
                        {
                            configuration.VisibleElementsOfCurrentView = bool.Parse(configMap[s_setupCurrentView]);
                        }
                        if (configMap.ContainsKey(s_splitWallsAndColumns))
                        {
                            configuration.SplitWallsAndColumns = bool.Parse(configMap[s_splitWallsAndColumns]);
                        }
                        if (configMap.ContainsKey(s_setupExport2D))
                        {
                            configuration.Export2DElements = bool.Parse(configMap[s_setupExport2D]);
                        }
                        if (configMap.ContainsKey(s_setupExportRevitProps))
                        {
                            configuration.ExportInternalRevitPropertySets = bool.Parse(configMap[s_setupExportRevitProps]);
                        }
                        if (configMap.ContainsKey(s_setupExportIFCCommonProperty))
                        {
                            configuration.ExportIFCCommonPropertySets = bool.Parse(configMap[s_setupExportIFCCommonProperty]);
                        }
                        if (configMap.ContainsKey(s_setupUse2DForRoomVolume))
                        {
                            configuration.Use2DRoomBoundaryForVolume = bool.Parse(configMap[s_setupUse2DForRoomVolume]);
                        }
                        if (configMap.ContainsKey(s_setupUseFamilyAndTypeName))
                        {
                            configuration.UseFamilyAndTypeNameForReference = bool.Parse(configMap[s_setupUseFamilyAndTypeName]);
                        }
                        if (configMap.ContainsKey(s_setupExportPartsAsBuildingElements))
                        {
                            configuration.ExportPartsAsBuildingElements = bool.Parse(configMap[s_setupExportPartsAsBuildingElements]);
                        }
                        if (configMap.ContainsKey(s_useActiveViewGeometry))
                        {
                            configuration.UseActiveViewGeometry = bool.Parse(configMap[s_useActiveViewGeometry]);
                        }
                        if (configMap.ContainsKey(s_setupExportSpecificSchedules))
                        {
                            configuration.ExportSpecificSchedules = bool.Parse(configMap[s_setupExportSpecificSchedules]);
                        }
                        if (configMap.ContainsKey(s_setupExportBoundingBox))
                        {
                            configuration.ExportBoundingBox = bool.Parse(configMap[s_setupExportBoundingBox]);
                        }
                        if (configMap.ContainsKey(s_setupExportSolidModelRep))
                        {
                            configuration.ExportSolidModelRep = bool.Parse(configMap[s_setupExportSolidModelRep]);
                        }
                        if (configMap.ContainsKey(s_setupExportSchedulesAsPsets))
                        {
                            configuration.ExportSchedulesAsPsets = bool.Parse(configMap[s_setupExportSchedulesAsPsets]);
                        }
                        if (configMap.ContainsKey(s_setupExportUserDefinedPsets))
                        {
                            configuration.ExportUserDefinedPsets = bool.Parse(configMap[s_setupExportUserDefinedPsets]);
                        }
                        if (configMap.ContainsKey(s_setupExportUserDefinedPsetsFileName))
                        {
                            configuration.ExportUserDefinedPsetsFileName = configMap[s_setupExportUserDefinedPsetsFileName];
                        }
                        if (configMap.ContainsKey(s_setupExportUserDefinedParameterMapping))
                        {
                            configuration.ExportUserDefinedParameterMapping = bool.Parse(configMap[s_setupExportUserDefinedParameterMapping]);
                        }
                        if (configMap.ContainsKey(s_setupExportUserDefinedParameterMappingFileName))
                        {
                            configuration.ExportUserDefinedParameterMappingFileName = configMap[s_setupExportUserDefinedParameterMappingFileName];
                        }
                        if (configMap.ContainsKey(s_setupExportLinkedFiles))
                        {
                            configuration.ExportLinkedFiles = bool.Parse(configMap[s_setupExportLinkedFiles]);
                        }
                        if (configMap.ContainsKey(s_setupIncludeSiteElevation))
                        {
                            configuration.IncludeSiteElevation = bool.Parse(configMap[s_setupIncludeSiteElevation]);
                        }
                        if (configMap.ContainsKey(s_setupStoreIFCGUID))
                        {
                            configuration.StoreIFCGUID = bool.Parse(configMap[s_setupStoreIFCGUID]);
                        }
                        if (configMap.ContainsKey(s_setupExportRoomsInView))
                        {
                            configuration.ExportRoomsInView = bool.Parse(configMap[s_setupExportRoomsInView]);
                        }
                        if (configMap.ContainsKey(s_includeSteelElements))
                        {
                            configuration.IncludeSteelElements = bool.Parse(configMap[s_includeSteelElements]);
                        }
                        if (configMap.ContainsKey(s_useTypeNameOnlyForIfcType))
                        {
                            configuration.UseTypeNameOnlyForIfcType = bool.Parse(configMap[s_useTypeNameOnlyForIfcType]);
                        }
                        if (configMap.ContainsKey(s_useVisibleRevitNameAsEntityName))
                        {
                            configuration.UseVisibleRevitNameAsEntityName = bool.Parse(configMap[s_useVisibleRevitNameAsEntityName]);
                        }

                        Add(configuration);
                    }
                    return; // if finds the config in map schema, return and skip finding the old schema.
                }

                // find the config in old schema.
                if (m_schema != null)
                {
                    foreach (DataStorage storedSetup in GetSavedConfigurations(m_schema))
                    {
                        Entity configEntity = storedSetup.GetEntity(m_schema);
                        IFCExportConfiguration configuration = IFCExportConfiguration.CreateDefaultConfiguration();
                        configuration.Name                            = configEntity.Get <String>(s_setupName);
                        configuration.IFCVersion                      = (IFCVersion)configEntity.Get <int>(s_setupVersion);
                        configuration.IFCFileType                     = (IFCFileFormat)configEntity.Get <int>(s_setupFileFormat);
                        configuration.SpaceBoundaries                 = configEntity.Get <int>(s_setupSpaceBoundaries);
                        configuration.ExportBaseQuantities            = configEntity.Get <bool>(s_setupQTO);
                        configuration.SplitWallsAndColumns            = configEntity.Get <bool>(s_splitWallsAndColumns);
                        configuration.Export2DElements                = configEntity.Get <bool>(s_setupExport2D);
                        configuration.ExportInternalRevitPropertySets = configEntity.Get <bool>(s_setupExportRevitProps);
                        Field fieldIFCCommonPropertySets = m_schema.GetField(s_setupExportIFCCommonProperty);
                        if (fieldIFCCommonPropertySets != null)
                        {
                            configuration.ExportIFCCommonPropertySets = configEntity.Get <bool>(s_setupExportIFCCommonProperty);
                        }
                        configuration.Use2DRoomBoundaryForVolume       = configEntity.Get <bool>(s_setupUse2DForRoomVolume);
                        configuration.UseFamilyAndTypeNameForReference = configEntity.Get <bool>(s_setupUseFamilyAndTypeName);
                        Field fieldPartsAsBuildingElements = m_schema.GetField(s_setupExportPartsAsBuildingElements);
                        if (fieldPartsAsBuildingElements != null)
                        {
                            configuration.ExportPartsAsBuildingElements = configEntity.Get <bool>(s_setupExportPartsAsBuildingElements);
                        }
                        Field fieldExportBoundingBox = m_schema.GetField(s_setupExportBoundingBox);
                        if (fieldExportBoundingBox != null)
                        {
                            configuration.ExportBoundingBox = configEntity.Get <bool>(s_setupExportBoundingBox);
                        }
                        Field fieldExportSolidModelRep = m_schema.GetField(s_setupExportSolidModelRep);
                        if (fieldExportSolidModelRep != null)
                        {
                            configuration.ExportSolidModelRep = configEntity.Get <bool>(s_setupExportSolidModelRep);
                        }
                        Field fieldExportSchedulesAsPsets = m_schema.GetField(s_setupExportSchedulesAsPsets);
                        if (fieldExportSchedulesAsPsets != null)
                        {
                            configuration.ExportSchedulesAsPsets = configEntity.Get <bool>(s_setupExportSchedulesAsPsets);
                        }
                        Field fieldExportUserDefinedPsets = m_schema.GetField(s_setupExportUserDefinedPsets);
                        if (fieldExportUserDefinedPsets != null)
                        {
                            configuration.ExportUserDefinedPsets = configEntity.Get <bool>(s_setupExportUserDefinedPsets);
                        }
                        Field fieldExportUserDefinedPsetsFileName = m_schema.GetField(s_setupExportUserDefinedPsetsFileName);
                        if (fieldExportUserDefinedPsetsFileName != null)
                        {
                            configuration.ExportUserDefinedPsetsFileName = configEntity.Get <string>(s_setupExportUserDefinedPsetsFileName);
                        }

                        Field fieldExportUserDefinedParameterMapingTable = m_schema.GetField(s_setupExportUserDefinedParameterMapping);
                        if (fieldExportUserDefinedParameterMapingTable != null)
                        {
                            configuration.ExportUserDefinedParameterMapping = configEntity.Get <bool>(s_setupExportUserDefinedParameterMapping);
                        }

                        Field fieldExportUserDefinedParameterMappingFileName = m_schema.GetField(s_setupExportUserDefinedParameterMappingFileName);
                        if (fieldExportUserDefinedParameterMappingFileName != null)
                        {
                            configuration.ExportUserDefinedParameterMappingFileName = configEntity.Get <string>(s_setupExportUserDefinedParameterMappingFileName);
                        }

                        Field fieldExportLinkedFiles = m_schema.GetField(s_setupExportLinkedFiles);
                        if (fieldExportLinkedFiles != null)
                        {
                            configuration.ExportLinkedFiles = configEntity.Get <bool>(s_setupExportLinkedFiles);
                        }
                        Field fieldIncludeSiteElevation = m_schema.GetField(s_setupIncludeSiteElevation);
                        if (fieldIncludeSiteElevation != null)
                        {
                            configuration.IncludeSiteElevation = configEntity.Get <bool>(s_setupIncludeSiteElevation);
                        }
                        Field fieldStoreIFCGUID = m_schema.GetField(s_setupStoreIFCGUID);
                        if (fieldStoreIFCGUID != null)
                        {
                            configuration.StoreIFCGUID = configEntity.Get <bool>(s_setupStoreIFCGUID);
                        }
                        Field fieldActivePhase = m_schema.GetField(s_setupActivePhase);
                        if (fieldActivePhase != null)
                        {
                            configuration.ActivePhaseId = new ElementId(int.Parse(configEntity.Get <string>(s_setupActivePhase)));
                        }
                        Field fieldExportRoomsInView = m_schema.GetField(s_setupExportRoomsInView);
                        if (fieldExportRoomsInView != null)
                        {
                            configuration.ExportRoomsInView = configEntity.Get <bool>(s_setupExportRoomsInView);
                        }
                        Field fieldIncludeSteelElements = m_schema.GetField(s_includeSteelElements);
                        if (fieldIncludeSteelElements != null)
                        {
                            configuration.IncludeSteelElements = configEntity.Get <bool>(s_includeSteelElements);
                        }

                        Field fieldUseTypeNameOnlyForIfcType = m_schema.GetField(s_useTypeNameOnlyForIfcType);
                        if (fieldUseTypeNameOnlyForIfcType != null)
                        {
                            configuration.UseTypeNameOnlyForIfcType = configEntity.Get <bool>(s_useTypeNameOnlyForIfcType);
                        }
                        Field fieldUseVisibleRevitNameAsEntityName = m_schema.GetField(s_useVisibleRevitNameAsEntityName);
                        if (fieldUseVisibleRevitNameAsEntityName != null)
                        {
                            configuration.UseVisibleRevitNameAsEntityName = configEntity.Get <bool>(s_useVisibleRevitNameAsEntityName);
                        }

                        Add(configuration);
                    }
                }
            }
            catch (System.Exception)
            {
                // to avoid fail to show the dialog if any exception throws in reading schema.
            }
        }
        /// <summary>
        /// Adds the saved configuration from document to the map.
        /// </summary>
        public void AddSavedConfigurations()
        {
            try
            {
                // find the config in old schema.
                if (m_OldSchema == null)
                {
                    m_OldSchema = Schema.Lookup(s_OldSchemaId);

                    if (m_OldSchema != null)
                    {
                        foreach (DataStorage storedSetup in GetSavedConfigurations(m_OldSchema))
                        {
                            Entity configEntity = storedSetup.GetEntity(m_OldSchema);
                            IFCExportConfiguration configuration = IFCExportConfiguration.CreateDefaultConfiguration();
                            configuration.Name                            = configEntity.Get <String>(s_setupName);
                            configuration.IFCVersion                      = (IFCVersion)configEntity.Get <int>(s_setupVersion);
                            configuration.ExchangeRequirement             = IFCExchangeRequirements.ParseEREnum(configEntity.Get <String>(s_exchangeRequirement));
                            configuration.IFCFileType                     = (IFCFileFormat)configEntity.Get <int>(s_setupFileFormat);
                            configuration.SpaceBoundaries                 = configEntity.Get <int>(s_setupSpaceBoundaries);
                            configuration.ExportBaseQuantities            = configEntity.Get <bool>(s_setupQTO);
                            configuration.SplitWallsAndColumns            = configEntity.Get <bool>(s_splitWallsAndColumns);
                            configuration.Export2DElements                = configEntity.Get <bool>(s_setupExport2D);
                            configuration.ExportInternalRevitPropertySets = configEntity.Get <bool>(s_setupExportRevitProps);
                            Field fieldIFCCommonPropertySets = m_OldSchema.GetField(s_setupExportIFCCommonProperty);
                            if (fieldIFCCommonPropertySets != null)
                            {
                                configuration.ExportIFCCommonPropertySets = configEntity.Get <bool>(s_setupExportIFCCommonProperty);
                            }
                            configuration.Use2DRoomBoundaryForVolume       = configEntity.Get <bool>(s_setupUse2DForRoomVolume);
                            configuration.UseFamilyAndTypeNameForReference = configEntity.Get <bool>(s_setupUseFamilyAndTypeName);
                            Field fieldPartsAsBuildingElements = m_OldSchema.GetField(s_setupExportPartsAsBuildingElements);
                            if (fieldPartsAsBuildingElements != null)
                            {
                                configuration.ExportPartsAsBuildingElements = configEntity.Get <bool>(s_setupExportPartsAsBuildingElements);
                            }
                            Field fieldExportBoundingBox = m_OldSchema.GetField(s_setupExportBoundingBox);
                            if (fieldExportBoundingBox != null)
                            {
                                configuration.ExportBoundingBox = configEntity.Get <bool>(s_setupExportBoundingBox);
                            }
                            Field fieldExportSolidModelRep = m_OldSchema.GetField(s_setupExportSolidModelRep);
                            if (fieldExportSolidModelRep != null)
                            {
                                configuration.ExportSolidModelRep = configEntity.Get <bool>(s_setupExportSolidModelRep);
                            }
                            Field fieldExportSchedulesAsPsets = m_OldSchema.GetField(s_setupExportSchedulesAsPsets);
                            if (fieldExportSchedulesAsPsets != null)
                            {
                                configuration.ExportSchedulesAsPsets = configEntity.Get <bool>(s_setupExportSchedulesAsPsets);
                            }
                            Field fieldExportUserDefinedPsets = m_OldSchema.GetField(s_setupExportUserDefinedPsets);
                            if (fieldExportUserDefinedPsets != null)
                            {
                                configuration.ExportUserDefinedPsets = configEntity.Get <bool>(s_setupExportUserDefinedPsets);
                            }
                            Field fieldExportUserDefinedPsetsFileName = m_OldSchema.GetField(s_setupExportUserDefinedPsetsFileName);
                            if (fieldExportUserDefinedPsetsFileName != null)
                            {
                                configuration.ExportUserDefinedPsetsFileName = configEntity.Get <string>(s_setupExportUserDefinedPsetsFileName);
                            }

                            Field fieldExportUserDefinedParameterMapingTable = m_OldSchema.GetField(s_setupExportUserDefinedParameterMapping);
                            if (fieldExportUserDefinedParameterMapingTable != null)
                            {
                                configuration.ExportUserDefinedParameterMapping = configEntity.Get <bool>(s_setupExportUserDefinedParameterMapping);
                            }

                            Field fieldExportUserDefinedParameterMappingFileName = m_OldSchema.GetField(s_setupExportUserDefinedParameterMappingFileName);
                            if (fieldExportUserDefinedParameterMappingFileName != null)
                            {
                                configuration.ExportUserDefinedParameterMappingFileName = configEntity.Get <string>(s_setupExportUserDefinedParameterMappingFileName);
                            }

                            Field fieldExportLinkedFiles = m_OldSchema.GetField(s_setupExportLinkedFiles);
                            if (fieldExportLinkedFiles != null)
                            {
                                configuration.ExportLinkedFiles = configEntity.Get <bool>(s_setupExportLinkedFiles);
                            }
                            Field fieldIncludeSiteElevation = m_OldSchema.GetField(s_setupIncludeSiteElevation);
                            if (fieldIncludeSiteElevation != null)
                            {
                                configuration.IncludeSiteElevation = configEntity.Get <bool>(s_setupIncludeSiteElevation);
                            }
                            Field fieldStoreIFCGUID = m_OldSchema.GetField(s_setupStoreIFCGUID);
                            if (fieldStoreIFCGUID != null)
                            {
                                configuration.StoreIFCGUID = configEntity.Get <bool>(s_setupStoreIFCGUID);
                            }
                            Field fieldActivePhase = m_OldSchema.GetField(s_setupActivePhase);
                            if (fieldActivePhase != null)
                            {
                                configuration.ActivePhaseId = int.Parse(configEntity.Get <string>(s_setupActivePhase));
                            }
                            Field fieldExportRoomsInView = m_OldSchema.GetField(s_setupExportRoomsInView);
                            if (fieldExportRoomsInView != null)
                            {
                                configuration.ExportRoomsInView = configEntity.Get <bool>(s_setupExportRoomsInView);
                            }
                            Field fieldIncludeSteelElements = m_OldSchema.GetField(s_includeSteelElements);
                            if (fieldIncludeSteelElements != null)
                            {
                                configuration.IncludeSteelElements = configEntity.Get <bool>(s_includeSteelElements);
                            }
                            Field fieldUseOnlyTriangulation = m_OldSchema.GetField(s_useOnlyTriangulation);
                            if (fieldUseOnlyTriangulation != null)
                            {
                                configuration.UseOnlyTriangulation = configEntity.Get <bool>(s_useOnlyTriangulation);
                            }
                            Field fieldUseTypeNameOnlyForIfcType = m_OldSchema.GetField(s_useTypeNameOnlyForIfcType);
                            if (fieldUseTypeNameOnlyForIfcType != null)
                            {
                                configuration.UseTypeNameOnlyForIfcType = configEntity.Get <bool>(s_useTypeNameOnlyForIfcType);
                            }
                            Field fieldUseVisibleRevitNameAsEntityName = m_OldSchema.GetField(s_useVisibleRevitNameAsEntityName);
                            if (fieldUseVisibleRevitNameAsEntityName != null)
                            {
                                configuration.UseVisibleRevitNameAsEntityName = configEntity.Get <bool>(s_useVisibleRevitNameAsEntityName);
                            }
                            Field fieldTessellationLevelOfDetail = m_OldSchema.GetField(s_setupTessellationLevelOfDetail);
                            if (fieldTessellationLevelOfDetail != null)
                            {
                                configuration.TessellationLevelOfDetail = configEntity.Get <double>(s_setupTessellationLevelOfDetail);
                            }

                            AddOrReplace(configuration);
                        }
                    }
                }

                // This is the newer schema
                if (m_mapSchema == null)
                {
                    m_mapSchema = Schema.Lookup(s_mapSchemaId);

                    if (m_mapSchema != null)
                    {
                        foreach (DataStorage storedSetup in GetSavedConfigurations(m_mapSchema))
                        {
                            Entity configEntity = storedSetup.GetEntity(m_mapSchema);
                            IDictionary <string, string> configMap     = configEntity.Get <IDictionary <string, string> >(s_configMapField);
                            IFCExportConfiguration       configuration = IFCExportConfiguration.CreateDefaultConfiguration();
                            if (configMap.ContainsKey(s_setupName))
                            {
                                configuration.Name = configMap[s_setupName];
                            }
                            if (configMap.ContainsKey(s_setupVersion))
                            {
                                configuration.IFCVersion = (IFCVersion)Enum.Parse(typeof(IFCVersion), configMap[s_setupVersion]);
                            }
                            if (configMap.ContainsKey(s_exchangeRequirement))
                            {
                                configuration.ExchangeRequirement = IFCExchangeRequirements.ParseEREnum(configMap[s_exchangeRequirement]);
                            }
                            if (configMap.ContainsKey(s_setupFileFormat))
                            {
                                configuration.IFCFileType = (IFCFileFormat)Enum.Parse(typeof(IFCFileFormat), configMap[s_setupFileFormat]);
                            }
                            if (configMap.ContainsKey(s_setupSpaceBoundaries))
                            {
                                configuration.SpaceBoundaries = int.Parse(configMap[s_setupSpaceBoundaries]);
                            }
                            if (configMap.ContainsKey(s_setupActivePhase))
                            {
                                configuration.ActivePhaseId = int.Parse(configMap[s_setupActivePhase]);
                            }
                            if (configMap.ContainsKey(s_setupQTO))
                            {
                                configuration.ExportBaseQuantities = bool.Parse(configMap[s_setupQTO]);
                            }
                            if (configMap.ContainsKey(s_setupCurrentView))
                            {
                                configuration.VisibleElementsOfCurrentView = bool.Parse(configMap[s_setupCurrentView]);
                            }
                            if (configMap.ContainsKey(s_splitWallsAndColumns))
                            {
                                configuration.SplitWallsAndColumns = bool.Parse(configMap[s_splitWallsAndColumns]);
                            }
                            if (configMap.ContainsKey(s_setupExport2D))
                            {
                                configuration.Export2DElements = bool.Parse(configMap[s_setupExport2D]);
                            }
                            if (configMap.ContainsKey(s_setupExportRevitProps))
                            {
                                configuration.ExportInternalRevitPropertySets = bool.Parse(configMap[s_setupExportRevitProps]);
                            }
                            if (configMap.ContainsKey(s_setupExportIFCCommonProperty))
                            {
                                configuration.ExportIFCCommonPropertySets = bool.Parse(configMap[s_setupExportIFCCommonProperty]);
                            }
                            if (configMap.ContainsKey(s_setupUse2DForRoomVolume))
                            {
                                configuration.Use2DRoomBoundaryForVolume = bool.Parse(configMap[s_setupUse2DForRoomVolume]);
                            }
                            if (configMap.ContainsKey(s_setupUseFamilyAndTypeName))
                            {
                                configuration.UseFamilyAndTypeNameForReference = bool.Parse(configMap[s_setupUseFamilyAndTypeName]);
                            }
                            if (configMap.ContainsKey(s_setupExportPartsAsBuildingElements))
                            {
                                configuration.ExportPartsAsBuildingElements = bool.Parse(configMap[s_setupExportPartsAsBuildingElements]);
                            }
                            if (configMap.ContainsKey(s_useActiveViewGeometry))
                            {
                                configuration.UseActiveViewGeometry = bool.Parse(configMap[s_useActiveViewGeometry]);
                            }
                            if (configMap.ContainsKey(s_setupExportSpecificSchedules))
                            {
                                configuration.ExportSpecificSchedules = bool.Parse(configMap[s_setupExportSpecificSchedules]);
                            }
                            if (configMap.ContainsKey(s_setupExportBoundingBox))
                            {
                                configuration.ExportBoundingBox = bool.Parse(configMap[s_setupExportBoundingBox]);
                            }
                            if (configMap.ContainsKey(s_setupExportSolidModelRep))
                            {
                                configuration.ExportSolidModelRep = bool.Parse(configMap[s_setupExportSolidModelRep]);
                            }
                            if (configMap.ContainsKey(s_setupExportSchedulesAsPsets))
                            {
                                configuration.ExportSchedulesAsPsets = bool.Parse(configMap[s_setupExportSchedulesAsPsets]);
                            }
                            if (configMap.ContainsKey(s_setupExportUserDefinedPsets))
                            {
                                configuration.ExportUserDefinedPsets = bool.Parse(configMap[s_setupExportUserDefinedPsets]);
                            }
                            if (configMap.ContainsKey(s_setupExportUserDefinedPsetsFileName))
                            {
                                configuration.ExportUserDefinedPsetsFileName = configMap[s_setupExportUserDefinedPsetsFileName];
                            }
                            if (configMap.ContainsKey(s_setupExportUserDefinedParameterMapping))
                            {
                                configuration.ExportUserDefinedParameterMapping = bool.Parse(configMap[s_setupExportUserDefinedParameterMapping]);
                            }
                            if (configMap.ContainsKey(s_setupExportUserDefinedParameterMappingFileName))
                            {
                                configuration.ExportUserDefinedParameterMappingFileName = configMap[s_setupExportUserDefinedParameterMappingFileName];
                            }
                            if (configMap.ContainsKey(s_setupExportLinkedFiles))
                            {
                                configuration.ExportLinkedFiles = bool.Parse(configMap[s_setupExportLinkedFiles]);
                            }
                            if (configMap.ContainsKey(s_setupIncludeSiteElevation))
                            {
                                configuration.IncludeSiteElevation = bool.Parse(configMap[s_setupIncludeSiteElevation]);
                            }
                            if (configMap.ContainsKey(s_setupStoreIFCGUID))
                            {
                                configuration.StoreIFCGUID = bool.Parse(configMap[s_setupStoreIFCGUID]);
                            }
                            if (configMap.ContainsKey(s_setupExportRoomsInView))
                            {
                                configuration.ExportRoomsInView = bool.Parse(configMap[s_setupExportRoomsInView]);
                            }
                            if (configMap.ContainsKey(s_includeSteelElements))
                            {
                                configuration.IncludeSteelElements = bool.Parse(configMap[s_includeSteelElements]);
                            }
                            if (configMap.ContainsKey(s_useTypeNameOnlyForIfcType))
                            {
                                configuration.UseTypeNameOnlyForIfcType = bool.Parse(configMap[s_useTypeNameOnlyForIfcType]);
                            }
                            if (configMap.ContainsKey(s_useVisibleRevitNameAsEntityName))
                            {
                                configuration.UseVisibleRevitNameAsEntityName = bool.Parse(configMap[s_useVisibleRevitNameAsEntityName]);
                            }
                            if (configMap.ContainsKey(s_useOnlyTriangulation))
                            {
                                configuration.UseOnlyTriangulation = bool.Parse(configMap[s_useOnlyTriangulation]);
                            }
                            if (configMap.ContainsKey(s_setupTessellationLevelOfDetail))
                            {
                                configuration.TessellationLevelOfDetail = double.Parse(configMap[s_setupTessellationLevelOfDetail]);
                            }
                            if (configMap.ContainsKey(s_setupSitePlacement))
                            {
                                SiteTransformBasis siteTrfBasis = SiteTransformBasis.Shared;
                                if (Enum.TryParse(configMap[s_setupSitePlacement], out siteTrfBasis))
                                {
                                    configuration.SitePlacement = siteTrfBasis;
                                }
                            }
                            // Geo Reference info
                            if (configMap.ContainsKey(s_selectedSite))
                            {
                                configuration.SelectedSite = configMap[s_selectedSite];
                            }
                            if (configMap.ContainsKey(s_geoRefCRSName))
                            {
                                configuration.GeoRefCRSName = configMap[s_geoRefCRSName];
                            }
                            if (configMap.ContainsKey(s_geoRefCRSDesc))
                            {
                                configuration.GeoRefCRSDesc = configMap[s_geoRefCRSDesc];
                            }
                            if (configMap.ContainsKey(s_geoRefEPSGCode))
                            {
                                configuration.GeoRefEPSGCode = configMap[s_geoRefEPSGCode];
                            }
                            if (configMap.ContainsKey(s_geoRefGeodeticDatum))
                            {
                                configuration.GeoRefGeodeticDatum = configMap[s_geoRefGeodeticDatum];
                            }
                            if (configMap.ContainsKey(s_geoRefMapUnit))
                            {
                                configuration.GeoRefMapUnit = configMap[s_geoRefMapUnit];
                            }

                            AddOrReplace(configuration);
                        }
                    }
                }

                // In this latest schema, the entire configuration for one config is stored as a json string in the entirety
                if (m_jsonSchema == null)
                {
                    m_jsonSchema = Schema.Lookup(s_jsonSchemaId);
                    if (m_jsonSchema != null)
                    {
                        foreach (DataStorage storedSetup in GetSavedConfigurations(m_jsonSchema))
                        {
                            Entity configEntity                  = storedSetup.GetEntity(m_jsonSchema);
                            string configData                    = configEntity.Get <string>(s_configMapField);
                            JavaScriptSerializer   ser           = new JavaScriptSerializer();
                            IFCExportConfiguration configuration = ser.Deserialize <IFCExportConfiguration>(configData);
                            AddOrReplace(configuration);
                        }
                    }
                }

                // Add the last selected configurations if any
                if (IFCExport.LastSelectedConfig != null && IFCExport.LastSelectedConfig.Count > 0)
                {
                    foreach (KeyValuePair <string, IFCExportConfiguration> lastSelConfig in IFCExport.LastSelectedConfig)
                    {
                        AddOrReplace(lastSelConfig.Value);
                    }
                }
            }
            catch (System.Exception)
            {
                // to avoid fail to show the dialog if any exception throws in reading schema.
            }
        }