diff options
Diffstat (limited to 'id/moa-id-webgui/src/main/java/at/gv/egovernment/moa/id/config/webgui/MOAIDConfigurationModul.java')
-rw-r--r-- | id/moa-id-webgui/src/main/java/at/gv/egovernment/moa/id/config/webgui/MOAIDConfigurationModul.java | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/id/moa-id-webgui/src/main/java/at/gv/egovernment/moa/id/config/webgui/MOAIDConfigurationModul.java b/id/moa-id-webgui/src/main/java/at/gv/egovernment/moa/id/config/webgui/MOAIDConfigurationModul.java new file mode 100644 index 000000000..72e2321e9 --- /dev/null +++ b/id/moa-id-webgui/src/main/java/at/gv/egovernment/moa/id/config/webgui/MOAIDConfigurationModul.java @@ -0,0 +1,244 @@ +/* + * Copyright 2014 Federal Chancellery Austria + * MOA-ID has been developed in a cooperation between BRZ, the Federal + * Chancellery Austria - ICT staff unit, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://www.osor.eu/eupl/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ +package at.gv.egovernment.moa.id.config.webgui; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import at.gv.egiz.components.configuration.api.Configuration; +import at.gv.egiz.components.configuration.api.ConfigurationException; +import at.gv.egiz.components.configuration.file.PropertiesBasedConfiguration; +import at.gv.egiz.components.configuration.meta.api.ConfigurationModul; +import at.gv.egiz.components.configuration.meta.api.ConfigurationStorageException; +import at.gv.egiz.components.configuration.meta.api.MetadataConfiguration; +import at.gv.egiz.components.configuration.meta.api.SchemaEntry; +import at.gv.egiz.components.configuration.meta.api.impl.BaseMetadataConfiguration; +import at.gv.egovernment.moa.id.commons.config.MOAIDConfigurationConstants; +import at.gv.egovernment.moa.id.config.webgui.exception.ConfigurationValidationException; +import at.gv.egovernment.moa.id.config.webgui.validation.MOAIDConfigurationValidator; + +/** + * @author tlenz + * + */ +@Service +public class MOAIDConfigurationModul implements ConfigurationModul{ + + private static final String MODULE_NAME = "MOAIDConfigurationModul"; + + private static Configuration config; + private static Configuration meta; + private static MetadataConfiguration metadata = null; + + private List<SchemaEntry> schemaList = new ArrayList<SchemaEntry>(); + private static final Logger logger = LoggerFactory.getLogger(MOAIDConfigurationModul.class); + + static { + logger.info("Loading class {}", MOAIDConfigurationModul.class.getName()); + try { + meta = new PropertiesBasedConfiguration(MOAIDConfigurationModul.class.getResourceAsStream("/gui/meta.properties")); + + } catch (IOException | ConfigurationException e) { + logger.error("Failed to build internal datasets in MOAIDConfiguration modul!"); + + } + } + + @Autowired + public void setDatabaseConfiguration(Configuration dbconfig) { + config = dbconfig; + } + + /** + * + */ + public MOAIDConfigurationModul() { + loadType("general", "/gui/types/general.json"); + +// loadType("oa", "/gui/types/oa.json"); + + //TODO: load correct types +// loadType("vidp", "/gui/types/oa.json"); +// loadType("iidp", "/gui/types/oa.json"); +// loadType("gateway", "/gui/types/oa.json"); + + + } + + /* (non-Javadoc) + * @see at.gv.egiz.components.configuration.meta.api.ConfigurationModul#getSchemas() + */ + @Override + public List<SchemaEntry> getSchemas() { + return schemaList; + } + + /* (non-Javadoc) + * @see at.gv.egiz.components.configuration.meta.api.ConfigurationModul#getName() + */ + @Override + public String getName() { + return MODULE_NAME; + } + + /* (non-Javadoc) + * @see at.gv.egiz.components.configuration.meta.api.ConfigurationModul#getPrefix() + */ + @Override + public String getPrefix() { + return MOAIDConfigurationConstants.PREFIX_MOAID; + } + + /* (non-Javadoc) + * @see at.gv.egiz.components.configuration.meta.api.ConfigurationModul#getConfigurationAccess() + */ + @Override + public Configuration getConfigurationAccess() { + return config; + } + + /* (non-Javadoc) + * @see at.gv.egiz.components.configuration.meta.api.ConfigurationModul#getMetadataConfiguration() + */ + @Override + public MetadataConfiguration getMetadataConfiguration() { + if (metadata == null) { + metadata = new BaseMetadataConfiguration(config, meta); + + } + return metadata; + } + + /* (non-Javadoc) + * @see at.gv.egiz.components.configuration.meta.api.ConfigurationModul#buildArrayIdentifier(java.lang.String, int, java.util.Map) + */ + @Override + public String buildArrayIdentifier(String arrayId, int refCounter, + Map<String, String> properties) throws ConfigurationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see at.gv.egiz.components.configuration.meta.api.ConfigurationModul#storeChanges(java.util.Map, java.util.Map, java.util.List) + */ + @Override + public void storeChanges(Map<String, String> changed, + Map<String, String> added, List<String> deleted) + throws ConfigurationStorageException { + + logger.debug("Start configuration saving process ..."); + MOAIDConfigurationValidator configValidator = new MOAIDConfigurationValidator(); + int numOfGroups = configValidator.preProcess(changed, added, deleted); + + if (configValidator.getPreProcessedConfigurationData() != null && + numOfGroups > 0) { + logger.trace("Validate {} groups of key/value pairs", numOfGroups); + try { + configValidator.validate(); + + } catch (ConfigurationValidationException e) { + logger.warn("Validation of MOA-ID configuration FAILED."); + + //TODO: update ConfigurationStorageException to add specific information of validation errors + throw new ConfigurationStorageException( + "Configuration validation finds " + e.getValidationErrors().size() + " errors!", + e, false, false); + } + + try { + logger.trace("PreProcess configuration before saving."); + Map<String, String> configToStore = configValidator.postProcessing(deleted); + + //store all keys + logger.debug("Store {} key/value pairs to configuration", configToStore.size()); + Iterator<Entry<String, String>> storageInterator = configToStore.entrySet().iterator(); + while (storageInterator.hasNext()) { + Entry<String, String> el = storageInterator.next(); + try { + config.setStringValue(el.getKey(), el.getValue()); + logger.trace("Store key: " + el.getKey() + " with value: " + + el.getValue()); + + } catch (ConfigurationException e) { + logger.error("Store key: " + el.getKey() + " with value: " + + el.getValue() + " FAILED.", e); + + } + } + + //delete all unused keys + logger.debug("Delete {} keys pairs from configuration", deleted.size()); + Iterator<String> deleteInterator = deleted.iterator(); + while (deleteInterator.hasNext()) { + String el = deleteInterator.next(); + try { + config.deleteIds(el); + logger.trace("Delete key {}", el); + + } catch (ConfigurationException e) { + logger.error("Delete key: " + el + " FAILED.", e); + + } + } + + } catch (Exception e) { + logger.warn("Configuration post-processing FAILED.", e); + throw new ConfigurationStorageException("Configuration can not be stored.", e); + + } + + + } else { + logger.info("Configuration saving process finished: No key/value pairs found."); + + } + } + + private void loadType(String name, String resource) { + InputStream is = null; + try { + SchemaEntry entry = new SchemaEntry(); + is = MOAIDConfigurationModul.class.getResourceAsStream(resource); + entry.jsonSchema = IOUtils.toString(is); + entry.typeName = name; + schemaList.add(entry); + } catch (IOException e) { + logger.error("Failed to load Type OA!", e); + } finally { + IOUtils.closeQuietly(is); + } + } + +} |