diff options
author | Christian Wagner <c.wagner@datentechnik-innovation.com> | 2015-01-13 16:12:36 +0100 |
---|---|---|
committer | Thomas Lenz <tlenz@iaik.tugraz.at> | 2015-06-19 11:07:45 +0200 |
commit | c20d8f3da0b112864130031d39800e60289380d4 (patch) | |
tree | e378d9016f46dfe70e8ad49acabc482a04f32eec /id/server/moa-id-commons/src/main | |
parent | 3ee292090346f27e7e23d4943b74ada281f20552 (diff) | |
download | moa-id-spss-c20d8f3da0b112864130031d39800e60289380d4.tar.gz moa-id-spss-c20d8f3da0b112864130031d39800e60289380d4.tar.bz2 moa-id-spss-c20d8f3da0b112864130031d39800e60289380d4.zip |
add raw configuration persistence functionality
some problems: * all tables annotated via '@Table' are created in every database connected
* loading of 'Configuration' via Spring isn't pretty at all
Diffstat (limited to 'id/server/moa-id-commons/src/main')
3 files changed, 220 insertions, 0 deletions
diff --git a/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/ConfigurationImpl.java b/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/ConfigurationImpl.java new file mode 100644 index 000000000..da2c4b7e6 --- /dev/null +++ b/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/ConfigurationImpl.java @@ -0,0 +1,162 @@ +package com.datentechnik.moa.id.conf.persistence; + +import java.io.IOException; +import java.util.List; + +import org.springframework.beans.factory.annotation.Required; +import org.springframework.stereotype.Component; + +import com.datentechnik.moa.id.conf.persistence.dal.ConfigProperty; +import com.datentechnik.moa.id.conf.persistence.dal.ConfigPropertyDao; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + +/** + * + * + */ +@Component +public class ConfigurationImpl implements Configuration { + + 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 Object get(String key) { + // return null if key does not exist + + try { + return mapper.deserialize(getPropertyValue(key), null); + } catch (Exception e) { + return null; + } + } + + @Override + public <T> T get(String key, Class<T> clazz) { + // return null if key does not exist + ConfigProperty property = configPropertyDao.getProperty(key); + if (property != null && property.getValue() != null) { + try { + return clazz.cast(mapper.deserialize(property.getValue(), clazz)); + } catch (IOException e) { + return null; + } + } else { + return null; + } + } + + @Override + public void set(String key, Object value) { + + ConfigProperty keyValue = new ConfigProperty(); + keyValue.setKey(key); + try { + keyValue.setValue(mapper.serialize(value)); + // System.out.println(">> key - value: " + keyValue.getKey() + " - " + keyValue.getValue() + "\n"); + configPropertyDao.saveProperty(keyValue); + + } catch (JsonProcessingException e) { + // TODO do proper error handling + e.printStackTrace(); + } + + } + + @Override + public <T> T get(String key, Class<T> clazz, Object defaultValue) { + // TODO complete the method + T value = get(key, clazz); + if (value != null) { + return value; + } else { + return clazz.cast(defaultValue); + } + } + + @Override + public <T> List<T> getList(String key, Class<T> clazz) { + // return empty list if key does not exist + // TODO Auto-generated method stub + + return null; + } + + private String getPropertyValue(String key) { + ConfigProperty property = configPropertyDao.getProperty(key); + return property.getValue(); + } + + /** + * + * + */ + private class JsonMapper { + + private ObjectMapper mapper = new ObjectMapper(); + + public JsonMapper() { + this(false); + } + + /** + * + * @param prettyPrint + */ + public JsonMapper(boolean prettyPrint) { + mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE); + mapper.setVisibility(PropertyAccessor.GETTER, Visibility.PUBLIC_ONLY); + mapper.setVisibility(PropertyAccessor.IS_GETTER, Visibility.PUBLIC_ONLY); + if (prettyPrint) { + mapper.enable(SerializationFeature.INDENT_OUTPUT); + } + } + + /** + * + * @param value + * @return + * @throws JsonProcessingException + */ + public String serialize(Object value) throws JsonProcessingException { + return mapper.writeValueAsString(value); + } + + /** + * + * @param value + * @param clazz + * @return + * @throws JsonParseException + * @throws JsonMappingException + * @throws IOException + */ + public <T> Object deserialize(String value, Class<T> clazz) throws JsonParseException, JsonMappingException, IOException { + + ObjectMapper mapper = new ObjectMapper(); + if (clazz != null) { + return mapper.readValue(value, clazz); + } else { + return mapper.readValue(value, Object.class); + } + + } + + }; + +} diff --git a/id/server/moa-id-commons/src/main/resources/META-INF/persistence.xml b/id/server/moa-id-commons/src/main/resources/META-INF/persistence.xml index e77d6c49e..640c1504c 100644 --- a/id/server/moa-id-commons/src/main/resources/META-INF/persistence.xml +++ b/id/server/moa-id-commons/src/main/resources/META-INF/persistence.xml @@ -7,6 +7,11 @@ http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" <persistence-unit name="at.gv.egovernment.moa.id.commons.db.dao.config" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> + <class>com.datentechnik.moa.id.conf.persistence.dal.SOME_CLASS</class> + </persistence-unit> + + <persistence-unit name="moaidconf" transaction-type="RESOURCE_LOCAL"> + <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>com.datentechnik.moa.id.conf.persistence.dal.ConfigProperty</class> <properties> </properties> diff --git a/id/server/moa-id-commons/src/main/resources/configuration.beans.xml b/id/server/moa-id-commons/src/main/resources/configuration.beans.xml new file mode 100644 index 000000000..762c55507 --- /dev/null +++ b/id/server/moa-id-commons/src/main/resources/configuration.beans.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xmlns:tx="http://www.springframework.org/schema/tx" + xmlns:aop="http://www.springframework.org/schema/aop" + xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> + + <tx:annotation-driven /> + <context:annotation-config /> + + <context:property-placeholder location="${location}"/> + + + <bean id="configPropertyDao" + class="com.datentechnik.moa.id.conf.persistence.dal.ConfigPropertyDaoImpl" /> + <bean id="config" class="com.datentechnik.moa.id.conf.persistence.ConfigurationImpl"> + <property name="configPropertyDao" ref="configPropertyDao" /> + </bean> + + + <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" lazy-init="true" destroy-method="close"> + <aop:scoped-proxy/> + <property name="driverClassName" value="${dataSource.driverClassName}" /> + <property name="url" value="${dataSource.url}"/> + <property name="username" value="${dataSource.username}" /> + <property name="password" value="${dataSource.password}" /> + <property name="testOnBorrow" value="true" /> + <property name="validationQuery" value="SELECT 1" /> + </bean> + + + <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> + <property name="showSql" value="true" /> + <property name="generateDdl" value="${jpaVendorAdapter.generateDdl}" /> + <property name="databasePlatform" value="${jpaVendorAdapter.databasePlatform}" /> + </bean> + + + <bean name="moaidconf" id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> + <property name="dataSource" ref="dataSource" /> + <property name="jpaVendorAdapter" ref="jpaVendorAdapter" /> + <property name="persistenceUnitName" value="moaidconf" /> + </bean> + + <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> + <property name="entityManagerFactory" ref="entityManagerFactory" /> + </bean> + +</beans>
\ No newline at end of file |