diff options
5 files changed, 254 insertions, 0 deletions
| diff --git a/id/server/moa-id-commons/pom.xml b/id/server/moa-id-commons/pom.xml index b573263bc..c16c68a5f 100644 --- a/id/server/moa-id-commons/pom.xml +++ b/id/server/moa-id-commons/pom.xml @@ -123,6 +123,16 @@              <artifactId>mysql-connector-java</artifactId>              <version>${mysql-connector.java}</version>          </dependency> +		<dependency> +			<groupId>commons-cli</groupId> +			<artifactId>commons-cli</artifactId> +		</dependency> +		 +		<dependency> +			<groupId>org.springframework</groupId> +			<artifactId>spring-orm</artifactId> +		</dependency> +		      </dependencies>      <build> diff --git a/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/dal/ConfigProperty.java b/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/dal/ConfigProperty.java new file mode 100644 index 000000000..7e4e217b0 --- /dev/null +++ b/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/dal/ConfigProperty.java @@ -0,0 +1,95 @@ +package com.datentechnik.moa.id.conf.persistence.dal; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Lob; +import javax.persistence.Table; + +/** + * Reflects a MOAID configuration entry. + *  + */ +@Table(name = "moaid_configuration") +@Entity +public class ConfigProperty implements Serializable { +	private static final long serialVersionUID = 1L; + +	@Id +	@Column(name = "propertyKey", unique = true) +	private String key; + +	@Lob +	@Column(name = "propertyValue") +	private String value; + +	/** +	 * Returns the property's key. +	 * @return The key. +	 */ +	public String getKey() { +		return key; +	} + +	/** +	 * Sets the property's key. +	 * @param key The key +	 */ +	public void setKey(String key) { +		this.key = key; +	} + +	/** +	 * Returns the property's value (which might be {@code null}). +	 * @return The property's value (might be {@code null}). +	 */ +	public String getValue() { +		return value; +	} + +	/** +	 * Sets the property's value. +	 * @param value The value +	 */ +	public void setValue(String value) { +		this.value = value; +	} + +	@Override +	public int hashCode() { +		final int prime = 31; +		int result = 1; +		result = prime * result + ((key == null) ? 0 : key.hashCode()); +		return result; +	} + +	@Override +	public boolean equals(Object obj) { +		if (this == obj) +			return true; +		if (obj == null) +			return false; +		if (getClass() != obj.getClass()) +			return false; +		ConfigProperty other = (ConfigProperty) obj; +		if (key == null) { +			if (other.key != null) +				return false; +		} else if (!key.equals(other.key)) +			return false; +		return true; +	} + +	@Override +	public String toString() { +		StringBuilder builder = new StringBuilder(); +		builder.append("ConfigProperty [key="); +		builder.append(key); +		builder.append(", value="); +		builder.append(value); +		builder.append("]"); +		return builder.toString(); +	} +} diff --git a/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/dal/ConfigPropertyDao.java b/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/dal/ConfigPropertyDao.java new file mode 100644 index 000000000..a11d23ce8 --- /dev/null +++ b/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/dal/ConfigPropertyDao.java @@ -0,0 +1,45 @@ +package com.datentechnik.moa.id.conf.persistence.dal; + +import java.util.List; +import java.util.Set; + +/** + * DAO interface providing means for accessing MOAID configuration properties. + *  + */ +public interface ConfigPropertyDao { + +	/** +	 * Returns the {@link ConfigProperty} associated with {@code key} or {@code null} if the entry does not exist. +	 *  +	 * @param key The configuration key. +	 * @return The configuration property value or {@code null}. +	 */ +	public ConfigProperty getProperty(String key); + +	/** +	 * Persists a given {@link ConfigProperty}. +	 * @param property The property to be persisted. +	 */ +	public void saveProperty(ConfigProperty property); + +	/** +	 * Returns a {@link List} containing all stored {@linkplain ConfigProperty ConfigProperties}. +	 * @return The list with the properties. +	 */ +	public List<ConfigProperty> getProperties(); + +	/** +	 * Returns the value for the configuration property associated with {@code key} or {@code null} if the entry does not exist or its value is {@code null}. +	 *  +	 * @param key The configuration key. +	 * @return The configuration property value or {@code null}. +	 */ +	public String getPropertyValue(String key); + +	/** +	 * Persists a {@link List} of {@linkplain ConfigProperty ConfigProperties}. +	 * @param properties The list containing all the properties to be persisted. +	 */ +	public void saveProperties(Set<ConfigProperty> properties); +} diff --git a/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/dal/ConfigPropertyDaoImpl.java b/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/dal/ConfigPropertyDaoImpl.java new file mode 100644 index 000000000..e1e0a836c --- /dev/null +++ b/id/server/moa-id-commons/src/main/java/com/datentechnik/moa/id/conf/persistence/dal/ConfigPropertyDaoImpl.java @@ -0,0 +1,88 @@ +package com.datentechnik.moa.id.conf.persistence.dal; + +import java.util.List; +import java.util.Set; + +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.transaction.annotation.Transactional; + +/** + * Database backed implementation of the DAO interface + *  + */ + +@Transactional("transactionManager") +public class ConfigPropertyDaoImpl implements ConfigPropertyDao { + +	private Logger log = LoggerFactory.getLogger(getClass()); + +	@PersistenceContext(unitName = "moaidconf") +	private EntityManager em; + +	@Override +	public void saveProperty(ConfigProperty property) { +		if (null == em) { +			log.error("No EntityManager set!"); +			return; +		} + +		if (em.find(ConfigProperty.class, property.getKey()) != null) { +			log.trace("Property '{}' already exists!", property.toString()); +			// TODO: think about merging +			// em.merge(property); +		} else { +			log.debug("Storing '{}'.", property.toString()); +			em.persist(property); +		} +	} + +	@Override +	public ConfigProperty getProperty(String key) { +		log.debug("Looking for configuration property for key '{}'.", key); +		ConfigProperty result = em.find(ConfigProperty.class, key); +		if (result != null) { +			log.debug("Found configuration property {}.", result); +		} else { +			log.debug("Unable to find configuration property for key '{}'.", key); +		} +		return result; +	} + +	@Override +	public String getPropertyValue(String key) { +		ConfigProperty property = getProperty(key); +		if (property == null) { +			return null; +		} +		return property.getValue(); +	} + +	@Override +	public List<ConfigProperty> getProperties() { +		log.debug("Retrieving all properties from database."); +		TypedQuery<ConfigProperty> query = em.createQuery("select mc from ConfigProperty mc", ConfigProperty.class); +		try { +			List<ConfigProperty> questionerVoterList = query.getResultList(); +			return questionerVoterList; +		} catch (NoResultException e) { +			log.debug("No property found in database."); +			return null; +		} +	} + +	@Override +	public void saveProperties(Set<ConfigProperty> properties) { +		log.debug("Storing {} properties to database.", properties.size()); +		for (ConfigProperty cp : properties) { +			saveProperty(cp); +		} +		em.flush(); +	} + +} @@ -46,6 +46,9 @@  			<org.apache.commons.collections4.version>4.0</org.apache.commons.collections4.version>
  			<jodatime.version>2.7</jodatime.version>
 +	    <apache-cli-version>1.2</apache-cli-version>
 +	    <spring-orm-version>3.1.1.RELEASE</spring-orm-version>
 +	   
      </properties>
      <profiles>
 @@ -676,6 +679,19 @@                  <artifactId>jackson-annotations</artifactId>
                  <version>${jackson-version}</version>
              </dependency>
 +
 +			<dependency>
 +				<groupId>commons-cli</groupId>
 +				<artifactId>commons-cli</artifactId>
 +				<version>${apache-cli-version}</version>
 +			</dependency>
 +			
 +			<dependency>
 +				<groupId>org.springframework</groupId>
 +				<artifactId>spring-orm</artifactId>
 +				<version>${spring-orm-version}</version>
 +			</dependency>
 +            
  	        </dependencies>
      </dependencyManagement>
 | 
