aboutsummaryrefslogtreecommitdiff
path: root/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfigurationImpl.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/MOAIDConfigurationImpl.java')
-rw-r--r--id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfigurationImpl.java191
1 files changed, 191 insertions, 0 deletions
diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfigurationImpl.java b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfigurationImpl.java
new file mode 100644
index 000000000..805bcb33e
--- /dev/null
+++ b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/config/persistence/MOAIDConfigurationImpl.java
@@ -0,0 +1,191 @@
+package at.gv.egovernment.moa.id.commons.config.persistence;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import at.gv.egiz.components.configuration.api.Configuration;
+import at.gv.egiz.components.configuration.api.ConfigurationException;
+import at.gv.egovernment.moa.id.commons.config.MOAIDConfigurationConstants;
+import at.gv.egovernment.moa.id.commons.db.dao.config.ConfigProperty;
+import at.gv.egovernment.moa.id.commons.db.dao.config.DatabaseConfigPropertyImpl;
+import at.gv.egovernment.moa.id.commons.utils.KeyValueUtils;
+import at.gv.egovernment.moa.logging.Logger;
+
+/**
+ * The implementation of a key-value configuration implementing the {@link Configuration} interface.
+ * It employs the {@link ConfigPropertyDao} to persist configuration data.
+ */
+@Component
+@Transactional("transactionManager")
+public class MOAIDConfigurationImpl extends DatabaseConfigPropertyImpl implements MOAIDConfiguration {
+
+// Configuration configPropertyDao;
+//
+// /**
+// * Sets the {@link ConfigPropertyDao}.
+// * @param configPropertyDao the ConfigPropertyDao
+// */
+// @Required
+// public void setConfigPropertyDao(Configuration configPropertyDao) {
+// this.configPropertyDao = configPropertyDao;
+// }
+
+ public void setStringValue(String id, String value) throws ConfigurationException {
+ super.setStringValue(id, value);
+
+ }
+
+ public void deleteIds(String idSearch) throws ConfigurationException {
+ super.deleteIds(idSearch);
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egovernment.moa.id.commons.config.persistence.MOAIDConfiguration#getPropertySubset(java.lang.String)
+ */
+ public Map<String, String> getPropertySubset(String preFix) throws ConfigurationException{
+ EntityManager em = this.getPersistenceContext();
+ if (null == em) {
+ Logger.error("No EntityManager set!");
+ throw new ConfigurationException("No EntityManager set!");
+
+ }
+
+ TypedQuery<ConfigProperty> configQuery = em.createQuery("select dbconfig from ConfigProperty dbconfig where dbconfig.key like :key", ConfigProperty.class);
+ configQuery.setParameter("key", preFix + "%");
+ List<ConfigProperty> configResult = configQuery.getResultList();
+
+ if (configResult == null || configResult.isEmpty()) {
+ Logger.warn("Found no configuration keys with prefix: " + preFix + ".%");
+ return null;
+
+ }
+ Logger.trace("Find " + configResult.size() + " key/value pairs with prefix: " + preFix + ".%");
+
+ //build key/value configuration map from database entries
+ Map<String, String> result = getKeyValueFromDatabaseDAO(
+ configResult.iterator(), preFix, true);
+ return result;
+
+ }
+
+ /* (non-Javadoc)
+ * @see at.gv.egovernment.moa.id.commons.config.persistence.MOAIDConfiguration#searchPropertiesWithWildcard(java.lang.String)
+ */
+ @Override
+ public Map<String, String> searchPropertiesWithWildcard(String searchKey)
+ throws ConfigurationException {
+ EntityManager em = this.getPersistenceContext();
+ if (null == em) {
+ Logger.error("No EntityManager set!");
+ throw new ConfigurationException("No EntityManager set!");
+
+ }
+
+ TypedQuery<ConfigProperty> configQuery = em.createQuery("select dbconfig from ConfigProperty dbconfig where dbconfig.key like :key", ConfigProperty.class);
+ configQuery.setParameter("key", searchKey.replace("*", "%"));
+ List<ConfigProperty> configResult = configQuery.getResultList();
+
+ if (configResult == null || configResult.isEmpty()) {
+ Logger.warn("Found no configuration keys with searchKey: " + searchKey);
+ return null;
+
+ }
+ Logger.trace("Find " + configResult.size() + " key/value pairs with searchKey: " + searchKey);
+
+ //build key/value configuration map from database entries
+ Map<String, String> result = getKeyValueFromDatabaseDAO(
+ configResult.iterator(), null, false);
+ return result;
+
+ }
+
+ @Override
+ public Map<String, String> getOnlineApplication(String publicURLPrefix)
+ throws ConfigurationException {
+ EntityManager em = this.getPersistenceContext();
+ if (null == em) {
+ Logger.error("No EntityManager set!");
+ throw new ConfigurationException("No EntityManager set!");
+
+ }
+
+ //search key prefix for online application with this publicURLPrefix
+ String keyId = MOAIDConfigurationConstants.PREFIX_MOAID_SERVICES
+ + ".%."
+ + MOAIDConfigurationConstants.SERVICE_UNIQUEIDENTIFIER;
+
+ TypedQuery<ConfigProperty> oaSearchQuery = em.createQuery("select dbconfig from ConfigProperty dbconfig where dbconfig.key like :key and dbconfig.value = SUBSTRING(:uniqueID, 1, LENGTH(dbconfig.value))", ConfigProperty.class);
+ oaSearchQuery.setParameter("key", keyId);
+ oaSearchQuery.setParameter("uniqueID", publicURLPrefix);
+ List<ConfigProperty> oaSearchResult = oaSearchQuery.getResultList();
+
+ if (oaSearchResult.size() == 0) {
+ Logger.debug("No entries found.");
+ return null; }
+
+ if (oaSearchResult.size() > 1) {
+ Logger.warn("OAIdentifier match to more then one DB-entry!");
+ return null;
+ }
+
+ String oaIdKey = oaSearchResult.get(0).getKey();
+ String oaIdValue = oaSearchResult.get(0).getValue();
+ Logger.trace("Find online application with uniqueID: " + oaIdValue + " and keyID: " + oaIdKey);
+
+ //load all online application key/value pairs from database
+ String oaType = KeyValueUtils.getFirstChildAfterPrefix(oaIdKey, MOAIDConfigurationConstants.PREFIX_MOAID_SERVICES);
+ String oaKey = KeyValueUtils.getPrefixFromKey(oaIdKey, MOAIDConfigurationConstants.SERVICE_UNIQUEIDENTIFIER);
+
+ TypedQuery<ConfigProperty> oaConfigQuery = em.createQuery("select dbconfig from ConfigProperty dbconfig where dbconfig.key like :key", ConfigProperty.class);
+ oaConfigQuery.setParameter("key", oaKey + ".%");
+ List<ConfigProperty> oaConfigResult = oaConfigQuery.getResultList();
+
+ if (oaConfigResult == null) {
+ Logger.warn("Found no configuration keys with prefix: " + oaKey + ".%");
+ return null;
+ }
+ Logger.trace("Find " + oaConfigResult.size() + " key/value pairs with prefix: " + oaKey + ".%");
+
+ //build key/value configuration map from database entries
+ Map<String, String> result = getKeyValueFromDatabaseDAO(
+ oaConfigResult.iterator(), oaKey, true);
+ result.put(MOAIDConfigurationConstants.PREFIX_MOAID_SERVICES, oaType);
+
+ return result;
+ }
+
+ /**
+ * Small helper method. NOTE: may return empty configuration properties, but never {@code null}.
+ *
+ * @param propPrefix: the prefix of the desired property.
+ * @param input: List of database objects with key/value information.
+ * @param removePrefix: Indicates if the prefix should be removed from the result key
+ * @return the {@link Map} of configuration properties
+ */
+ private Map<String, String> getKeyValueFromDatabaseDAO(Iterator<ConfigProperty> input, final String prefix, boolean removePrefix) {
+ Map<String, String> configProp = new HashMap<String, String>();
+ while (input.hasNext()) {
+ ConfigProperty el = input.next();
+ if (removePrefix) {
+ if (el.getKey().startsWith(prefix)) {
+ String propertyName = KeyValueUtils.removePrefixFromKey(el.getKey(), prefix);
+ configProp.put(propertyName, el.getValue());
+
+ }
+ } else
+ configProp.put(el.getKey(), el.getValue());
+
+ }
+ return configProp;
+ }
+
+}