aboutsummaryrefslogtreecommitdiff
path: root/id/server/moa-id-commons/src/main/java/at
diff options
context:
space:
mode:
Diffstat (limited to 'id/server/moa-id-commons/src/main/java/at')
-rw-r--r--id/server/moa-id-commons/src/main/java/at/gv/egiz/components/configuration/api/AbstractConfigurationImpl.java538
1 files changed, 538 insertions, 0 deletions
diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egiz/components/configuration/api/AbstractConfigurationImpl.java b/id/server/moa-id-commons/src/main/java/at/gv/egiz/components/configuration/api/AbstractConfigurationImpl.java
new file mode 100644
index 000000000..801e765c3
--- /dev/null
+++ b/id/server/moa-id-commons/src/main/java/at/gv/egiz/components/configuration/api/AbstractConfigurationImpl.java
@@ -0,0 +1,538 @@
+/*
+ * 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.egiz.components.configuration.api;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author tlenz
+ *
+ */
+public abstract class AbstractConfigurationImpl implements Configuration {
+
+ private static final Logger logger = LoggerFactory
+ .getLogger(AbstractConfigurationImpl.class);
+
+ /**
+ * Get all keys from configuration
+ * @return The List<string> values or null if no keys found
+ */
+ abstract protected List<String> getAllKeys() throws ConfigurationException;
+
+ /**
+ * Get key specific value from configuration
+ * @param key The cfg id
+ * @return The string value or null if not found
+ */
+ abstract protected String getValue(String key) throws ConfigurationException;
+
+ /**
+ * Check configuration contains a specific key
+ * @param key The cfg id
+ * @return True if the cfg key is found
+ */
+ abstract protected boolean containsKey(String key) throws ConfigurationException;
+
+ /**
+ * Store a key/value pair to configuration
+ * @param key The cfg key
+ * @param value The cfg value
+ */
+ abstract protected void storeKey(String key, String value) throws ConfigurationException;
+
+ /**
+ * Delete a key from configuration
+ * @param key The cfg key
+ */
+ abstract protected void deleteKey(String key) throws ConfigurationException;
+
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getStringValue(java.lang.String)
+ */
+ @Override
+ public String getStringValue(String id) throws ConfigurationException {
+ return getStringValue(id, null);
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getStringValue(java.lang.String, java.lang.String)
+ */
+ @Override
+ public String getStringValue(String id, String defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null) {
+ return defaultValue;
+ }
+ return value;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setStringValue(java.lang.String, java.lang.String)
+ */
+ @Override
+ public void setStringValue(String id, String value)
+ throws ConfigurationException {
+ if (containsKey(id)) {
+ logger.debug("{} is overwritten with {}", id, value);
+ }
+ storeKey(id, value);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getByteValue(java.lang.String)
+ */
+ @Override
+ public byte getByteValue(String id) throws ConfigurationException {
+ return getByteValue(id, (byte) 0);
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getByteValue(java.lang.String, byte)
+ */
+ @Override
+ public byte getByteValue(String id, byte defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ byte bvalue = Byte.parseByte(value);
+ return bvalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a byte value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setByteValue(java.lang.String, byte)
+ */
+ @Override
+ public void setByteValue(String id, byte value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getShortValue(java.lang.String)
+ */
+ @Override
+ public short getShortValue(String id) throws ConfigurationException {
+ return getShortValue(id, (short) 0);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getShortValue(java.lang.String, short)
+ */
+ @Override
+ public short getShortValue(String id, short defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ short svalue = Short.parseShort(value);
+ return svalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a short value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setShortValue(java.lang.String, short)
+ */
+ @Override
+ public void setShortValue(String id, short value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getIntegerValue(java.lang.String)
+ */
+ @Override
+ public int getIntegerValue(String id) throws ConfigurationException {
+ return getIntegerValue(id, 0);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getIntegerValue(java.lang.String, int)
+ */
+ @Override
+ public int getIntegerValue(String id, int defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ int ivalue = Integer.parseInt(value);
+ return ivalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a int value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setIntegerValue(java.lang.String, int)
+ */
+ @Override
+ public void setIntegerValue(String id, int value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getLongValue(java.lang.String)
+ */
+ @Override
+ public long getLongValue(String id) throws ConfigurationException {
+ return getLongValue(id, 0L);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getLongValue(java.lang.String, long)
+ */
+ @Override
+ public long getLongValue(String id, long defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ long lvalue = Long.parseLong(value);
+ return lvalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a long value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setLongValue(java.lang.String, long)
+ */
+ @Override
+ public void setLongValue(String id, long value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getFloatValue(java.lang.String)
+ */
+ @Override
+ public float getFloatValue(String id) throws ConfigurationException {
+ return getFloatValue(id, 0.0F);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getFloatValue(java.lang.String, float)
+ */
+ @Override
+ public float getFloatValue(String id, float defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ float fvalue = Float.parseFloat(value);
+ return fvalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a float value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setFloatValue(java.lang.String, float)
+ */
+ @Override
+ public void setFloatValue(String id, float value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getDoubleValue(java.lang.String)
+ */
+ @Override
+ public double getDoubleValue(String id) throws ConfigurationException {
+ return getDoubleValue(id, 0.0D);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getDoubleValue(java.lang.String, double)
+ */
+ @Override
+ public double getDoubleValue(String id, double defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ double dvalue = Double.parseDouble(value);
+ return dvalue;
+ } catch (Throwable e) {
+ logger.warn("Invalid configuration value {} is not a double value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setDoubleValue(java.lang.String, double)
+ */
+ @Override
+ public void setDoubleValue(String id, double value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getBooleanValue(java.lang.String)
+ */
+ @Override
+ public boolean getBooleanValue(String id) throws ConfigurationException {
+ return getBooleanValue(id, false);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getBooleanValue(java.lang.String, boolean)
+ */
+ @Override
+ public boolean getBooleanValue(String id, boolean defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null)
+ return defaultValue;
+ try {
+ boolean bvalue = Boolean.parseBoolean(value);
+ return bvalue;
+ } catch (Throwable e) {
+ logger.warn(
+ "Invalid configuration value {} is not a boolean value",
+ id, e);
+ }
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setBooleanValue(java.lang.String, boolean)
+ */
+ @Override
+ public void setBooleanValue(String id, boolean value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getCharValue(java.lang.String)
+ */
+ @Override
+ public char getCharValue(String id) throws ConfigurationException {
+ return getCharValue(id, '\0');
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getCharValue(java.lang.String, char)
+ */
+ @Override
+ public char getCharValue(String id, char defaultValue)
+ throws ConfigurationException {
+ String value = getValue(id);
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value.toCharArray().length > 0) {
+ return value.toCharArray()[0];
+ }
+ logger.warn("Invalid configuration value {} is not a char value", id);
+ return defaultValue;
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setCharValue(java.lang.String, short)
+ */
+ @Override
+ public void setCharValue(String id, short value)
+ throws ConfigurationException {
+ setStringValue(id, String.valueOf(value));
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getObjectValue(java.lang.String, java.lang.Class)
+ */
+ @Override
+ public <T> T getObjectValue(String id, Class<T> cls)
+ throws ConfigurationException {
+ return getObjectValue(id, cls, null);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getObjectValue(java.lang.String, java.lang.Class, java.lang.Object)
+ */
+ @Override
+ public <T> T getObjectValue(String id, Class<T> cls, T defaultValue)
+ throws ConfigurationException {
+ String savedValue = getStringValue(id);
+ if (savedValue == null) {
+ return defaultValue;
+ }
+ ObjectTranslator objectTranslator = ConfigurationFactory
+ .getObjectTranslator(cls);
+ if (objectTranslator == null) {
+ logger.warn(
+ "Found object value but could not find Object Transator for cls {}",
+ cls.getName());
+
+ throw new ConfigurationException("No Object Translator for ["
+ + cls.getName() + "] available");
+ }
+ return objectTranslator.toObject(savedValue, cls);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#setObjectValue(java.lang.String, java.lang.Object)
+ */
+ @Override
+ public <T> void setObjectValue(String id, Object object)
+ throws ConfigurationException {
+ ObjectTranslator objectTranslator = ConfigurationFactory
+ .getObjectTranslator(object);
+ if (objectTranslator == null) {
+ logger.warn("Could not find Object Transator for cls {}", object
+ .getClass().getName());
+
+ throw new ConfigurationException("No Object Translator for ["
+ + object.getClass().getName() + "] available");
+ }
+ String cfgValue = objectTranslator.toString(object);
+ setStringValue(id, cfgValue);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#findConfigurationId(java.lang.String)
+ */
+ @Override
+ abstract public String[] findConfigurationId(String searchString)
+ throws ConfigurationException;
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#findByValue(java.lang.String)
+ */
+ @Override
+ abstract public String[] findByValue(String searchString)
+ throws ConfigurationException;
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getConfigurationIds()
+ */
+ @Override
+ public String[] getConfigurationIds() throws ConfigurationException {
+ List<String> allKeys = getAllKeys();
+ return allKeys.toArray(new String[allKeys.size()]);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getConfigurationIdNextLevel(java.lang.String)
+ */
+ @Override
+ public String[] getConfigurationIdNextLevel(String prefix)
+ throws ConfigurationException {
+ String[] allIds = getConfigurationIds();
+ Set<String> subIds = new HashSet<String>();
+
+ for (String id : allIds) {
+ if (id.startsWith(prefix)) {
+ String idAfterPrefix = id.substring(prefix.length());
+ int index = idAfterPrefix.indexOf(".");
+
+ if (index == 0) {
+ idAfterPrefix = idAfterPrefix.substring(1);
+ index = idAfterPrefix.indexOf(".");
+ }
+
+ if (index > 0) {
+ String adding = idAfterPrefix.substring(0, index);
+ if (!(adding.isEmpty())) {
+ subIds.add(adding);
+ }
+ } else if (!(idAfterPrefix.isEmpty())) {
+ subIds.add(idAfterPrefix);
+ }
+ }
+
+ }
+
+ String[] subIdarray = new String[subIds.size()];
+ subIdarray = (String[]) subIds.toArray(subIdarray);
+ return subIdarray;
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#synchronize()
+ */
+ @Override
+ abstract public void synchronize() throws ConfigurationException;
+
+ /* (non-Javadoc)
+ * @see at.gv.egiz.components.configuration.api.Configuration#getName()
+ */
+ @Override
+ abstract public String getName();
+
+}