aboutsummaryrefslogtreecommitdiff
path: root/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/ConfigurationImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/ConfigurationImpl.java')
-rw-r--r--id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/ConfigurationImpl.java161
1 files changed, 161 insertions, 0 deletions
diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/ConfigurationImpl.java b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/ConfigurationImpl.java
new file mode 100644
index 000000000..c90b60440
--- /dev/null
+++ b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/ConfigurationImpl.java
@@ -0,0 +1,161 @@
+package at.gv.egovernment.moa.id.commons.config.persistence;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityExistsException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Required;
+import org.springframework.stereotype.Component;
+
+import at.gv.egovernment.moa.id.commons.db.dao.config.ConfigProperty;
+import at.gv.egovernment.moa.id.commons.db.dao.config.ConfigPropertyDao;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.CollectionType;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
+/**
+ * The implementation of a key-value configuration implementing the {@link Configuration} interface.
+ * It employs the {@link ConfigPropertyDao} to persist configuration data.
+ */
+@Component
+public class ConfigurationImpl implements Configuration {
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ ConfigPropertyDao configPropertyDao;
+ private JsonMapper mapper = new JsonMapper();
+
+ /**
+ * Sets the {@link ConfigPropertyDao}.
+ * @param configPropertyDao the ConfigPropertyDao
+ */
+ @Required
+ public void setConfigPropertyDao(ConfigPropertyDao configPropertyDao) {
+ this.configPropertyDao = configPropertyDao;
+ }
+
+ @Override
+ public List<String> getAllKeys(){
+ try {
+ return this.configPropertyDao.getAllKeys();
+ } catch (Exception e) {
+ log.debug("Error while retrieving a list of all keys in the database.");
+ return null;
+ }
+ }
+
+ @Override
+ public Object get(String key) {
+ // return null if key does not exist
+ try {
+ ConfigProperty property = configPropertyDao.getProperty(key);
+ if (property != null && property.getValue() != null) {
+ return mapper.deserialize(property.getValue(), null);
+ } else {
+ return null;
+ }
+ } catch (IllegalArgumentException e) {
+ log.debug("Error while searching for key '{}' in the database.", key);
+ return null;
+ } catch (Exception e) {
+ log.debug("Error while deserializing value of key '{}' to object.", key);
+ return null;
+ }
+ }
+
+ @Override
+ public <T> T get(String key, Class<T> clazz) {
+ // return null if key does not exist
+ try {
+ ConfigProperty property = configPropertyDao.getProperty(key);
+ if (property != null && property.getValue() != null) {
+ return clazz.cast(mapper.deserialize(property.getValue(), clazz));
+ } else {
+ return null;
+ }
+ } catch (IllegalArgumentException e) {
+ log.debug("Error while searching for key '{}' in the database.", key);
+ return null;
+ } catch (Exception e) {
+ log.debug("Error while deserializing value of key '{}' to object of type {}.", key, clazz.getClass());
+ return null;
+ }
+ }
+
+ @Override
+ public boolean set(String key, Object value) {
+
+ try {
+ if (value == null) {
+ configPropertyDao.delete(key);
+ return true;
+ } else {
+
+ ConfigProperty keyValue = new ConfigProperty();
+ keyValue.setKey(key);
+
+ keyValue.setValue(mapper.serialize(value));
+ configPropertyDao.saveProperty(keyValue);
+ return true;
+ }
+ } catch (JsonProcessingException e) {
+ log.debug("Error while serializing object for key '{}'.", key);
+ return false;
+ } catch (EntityExistsException e) {
+ log.debug("Property '{}' already exists!", key);
+ return false;
+ } catch (Exception e) {
+ log.debug("Error while setting value for key '{}' in the database.", key);
+ return false;
+ }
+ }
+
+ @Override
+ public <T> T get(String key, Class<T> clazz, Object defaultValue) {
+
+ T value = get(key, clazz);
+ if (value != null) {
+ return value;
+ } else {
+ return clazz.cast(defaultValue);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> List<T> getList(String key, Class<T> clazz) {
+
+ CollectionType listType = TypeFactory.defaultInstance().constructCollectionType(List.class, clazz);
+ try {
+ if ((configPropertyDao.getProperty(key) == null)
+ || (configPropertyDao.getProperty(key).getValue() == null)) {
+ return new ArrayList<T>();
+ }
+ String json = configPropertyDao.getProperty(key).getValue();
+ ObjectMapper mapper = new ObjectMapper();
+
+ return (List<T>) mapper.readValue(json, listType);
+ } catch (JsonMappingException e) {
+ ArrayList<T> tmp = new ArrayList<T>();
+ T value = get(key, clazz);
+ if (value != null) {
+ tmp.add(value);
+ }
+ return tmp;
+ } catch (IOException e) {
+ log.debug("Error while deserializing value for key '{}' to List<{}>.", key, clazz.getClass());
+ return new ArrayList<T>();
+ } catch (Exception e){
+ log.debug("Error while searching key '{}' in the database.", key);
+ return new ArrayList<T>();
+ }
+ }
+
+}