[Lada-commits] [PATCH 09 of 13] Moved Repositories, etc. into data package
Wald Commits
scm-commit at wald.intevation.org
Fri Feb 6 17:57:43 CET 2015
# HG changeset patch
# User Raimund Renkert <raimund.renkert at intevation.de>
# Date 1423241754 -3600
# Node ID f0ad10e0e1b1fe3b92e3c554ab49f25ae19179df
# Parent 5011173fd340abe2b3b7b92b0cac9c14dc0b08f2
Moved Repositories, etc. into data package.
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/AbstractRepository.java
--- a/src/main/java/de/intevation/lada/util/AbstractRepository.java Fri Feb 06 15:58:28 2015 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU GPL (v>=3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out
- * the documentation coming with IMIS-Labordaten-Application for details.
- */
-package de.intevation.lada.util;
-
-import javax.ejb.EJBTransactionRolledbackException;
-import javax.ejb.Stateless;
-import javax.ejb.TransactionAttribute;
-import javax.ejb.TransactionAttributeType;
-import javax.persistence.EntityExistsException;
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.persistence.TransactionRequiredException;
-
-
- at Stateless
-public abstract class AbstractRepository
-implements Repository
-{
- protected EntityManagerProducer emp;
-
- protected String dataSource;
-
- protected String jndiPath;
-
- /**
- * Create or update an object in the database.
- * This operation can not be undone.
- *
- * @param object The object to create or update
- *
- * @throws EntityExistsException
- * @throws IllegalArgumentException
- * @throws EJBTransactionRolledbackException
- * @throws TransactionRequiredException
- */
- @TransactionAttribute(TransactionAttributeType.REQUIRED)
- protected void persistInDatabase(Object object)
- throws EntityExistsException,
- IllegalArgumentException,
- EJBTransactionRolledbackException,
- TransactionRequiredException
- {
- emp.entityManager(dataSource).merge(object);
- }
-
- /**
- * Remove an object from the datebase.
- * This operation can not be undone.
- *
- * @param object The object to remove
- *
- * @throws IllegalArgumentException
- * @throws TransactionRequiredException
- */
- @TransactionAttribute(TransactionAttributeType.REQUIRED)
- protected void removeFromDatabase(Object object)
- throws IllegalArgumentException,
- TransactionRequiredException
- {
- EntityManager em = emp.entityManager(dataSource);
- em.remove(
- em.contains(object) ?
- object : em.merge(object));
- }
-
- public Query queryFromString(String sql) {
- EntityManager em = emp.entityManager(dataSource);
- return em.createNativeQuery(sql);
- }
-
- @Override
- public void setDataSource(String dataSource) {
- this.dataSource = dataSource;
- }
-
- @Override
- public String getDataSource() {
- return this.dataSource;
- }
-
- public void setEntityManagerProducer(EntityManagerProducer emp) {
- this.emp = emp;
- }
-}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/DefaultRepository.java
--- a/src/main/java/de/intevation/lada/util/DefaultRepository.java Fri Feb 06 15:58:28 2015 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU GPL (v>=3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out
- * the documentation coming with IMIS-Labordaten-Application for details.
- */
-package de.intevation.lada.util;
-
-import javax.ejb.EJBTransactionRolledbackException;
-import javax.persistence.EntityExistsException;
-import javax.persistence.TransactionRequiredException;
-
-import de.intevation.lada.util.rest.Response;
-
-
-/**
- * @author rrenkert
- */
-public class DefaultRepository extends ReadOnlyRepository {
-
- public DefaultRepository() {
- }
-
- @Override
- public Response create(Object object) {
- Response response = new Response(true, 200, object);
- try {
- this.persistInDatabase(object);
- }
- catch (EntityExistsException eee) {
- return new Response(false, 601, object);
- }
- catch (IllegalArgumentException iae) {
- return new Response(false, 602, object);
- }
- catch (TransactionRequiredException tre) {
- return new Response(false, 603, object);
- }
- catch (EJBTransactionRolledbackException ete) {
- return new Response(false, 604, object);
- }
- return response;
- }
-
- @Override
- public Response update(Object object) {
- Response response = new Response(true, 200, object);
- try {
- this.persistInDatabase(object);
- }
- catch (EntityExistsException eee) {
- return new Response(false, 601, object);
- }
- catch (IllegalArgumentException iae) {
- return new Response(false, 602, object);
- }
- catch (TransactionRequiredException tre) {
- return new Response(false, 603, object);
- }
- catch (EJBTransactionRolledbackException ete) {
- return new Response(false, 604, object);
- }
- return response;
- }
-
- @Override
- public Response delete(Object object) {
- Response response = new Response(true, 200, null);
- try {
- this.removeFromDatabase(object);
- }
- catch (IllegalArgumentException iae) {
- return new Response(false, 602, object);
- }
- catch (TransactionRequiredException tre) {
- return new Response(false, 603, object);
- }
- return response;
- }
-}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/EntityManagerProducer.java
--- a/src/main/java/de/intevation/lada/util/EntityManagerProducer.java Fri Feb 06 15:58:28 2015 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU GPL (v>=3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out
- * the documentation coming with IMIS-Labordaten-Application for details.
- */
-package de.intevation.lada.util;
-
-import javax.annotation.Resource;
-import javax.ejb.LocalBean;
-import javax.ejb.SessionContext;
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.validation.UnexpectedTypeException;
-
-
- at Stateless
- at LocalBean
-public class EntityManagerProducer {
-
- @Resource
- private SessionContext ctx;
-
- private String jndiPath = "java:app/entitymanager/";
-
- /**
- * Constructor for multi-tenancy entity manager delegate.
- * Default jndi search path is 'java:app/entitymanager'.
- */
- public EntityManagerProducer() {
- }
-
- /**
- * Constructor for multi-tenancy entity manager delegate.
- *
- * @param jndiEnv The jndi path to search for datasources.
- * Defaults to 'java:app/entitymanager'.
- */
- public EntityManagerProducer(String jndiPath) {
- this.jndiPath = jndiPath;
- }
-
- /**
- * Create an entity manager for a datasource.
- *
- * @throws UnexpectedTypeException
- * @param dataSourceName The jndi name of the datasource.
- * @return The entity manager for the datasource.
- */
- public EntityManager entityManager(String dataSourceName) {
-
- EntityManager entityManager =
- (EntityManager) this.ctx.lookup(this.jndiPath + dataSourceName);
-
- if (entityManager == null) {
- throw new UnexpectedTypeException("Unknown data source name '" +
- dataSourceName + "'.");
- }
-
- return entityManager;
-
- }
-}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/QueryBuilder.java
--- a/src/main/java/de/intevation/lada/util/QueryBuilder.java Fri Feb 06 15:58:28 2015 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,238 +0,0 @@
-/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU GPL (v>=3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out
- * the documentation coming with IMIS-Labordaten-Application for details.
- */
-package de.intevation.lada.util;
-
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Path;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-/**
- * @author <a href="mailto:rrenkert at intevation.de">Raimund Renkert</a>
- */
-public class QueryBuilder<T> {
-
- private EntityManager manager;
- private CriteriaBuilder builder;
- private CriteriaQuery<T> query;
- private Root<T> root;
- private Class<T> clazz;
- private Predicate filter;
-
- /**
- * Create a new QueryBuilder for the specified class.
- *
- * @param manager
- * @param clazz
- */
- public QueryBuilder(EntityManager manager, Class<T> clazz) {
- this.manager = manager;
- this.clazz = clazz;
- this.builder = this.manager.getCriteriaBuilder();
- this.query = this.builder.createQuery(this.clazz);
- this.root = this.query.from(this.clazz);
- }
-
- /**
- * Get the criteria query build with this class.
- *
- * @return The query.
- */
- public CriteriaQuery<T> getQuery() {
- if (this.filter == null) {
- this.query.where();
- return this.query;
- }
- this.query.where(this.filter);
- return this.query;
- }
-
- /**
- * Logical AND operation.
- *
- * @param id The database column name.
- * @param value The filter value
- * @return The builder itself.
- */
- public QueryBuilder<T> and(String id, Object value) {
- Predicate p = this.builder.equal(this.root.get(id), value);
- if (this.filter != null) {
- this.filter = this.builder.and(this.filter, p);
- }
- else {
- this.filter = this.builder.and(p);
- }
- return this;
- }
-
- /**
- * Logical AND with like operation.
- *
- * @param id The database column name.
- * @param value The filter value
- * @return The builder itself.
- */
- public QueryBuilder<T> andLike(String id, String value) {
- Path<String> path = this.root.get(id);
- Predicate p = this.builder.like(path, value);
- if (this.filter != null) {
- this.filter = this.builder.and(this.filter, p);
- }
- else {
- this.filter = this.builder.and(p);
- }
- return this;
- }
-
- /**
- * Logical OR operation.
- *
- * @param id The database column name
- * @param value The filter value.
- * @return The builder itself.
- */
- public QueryBuilder<T> or(String id, Object value) {
- Predicate p = this.builder.equal(this.root.get(id), value);
- if (this.filter != null) {
- this.filter = this.builder.or(this.filter, p);
- }
- else {
- this.filter = this.builder.or(p);
- }
- return this;
- }
-
- /**
- * Logical OR with like operation.
- *
- * @param column The database column name.
- * @param value The filter value
- * @return The builder itself.
- */
- public QueryBuilder<T> orLike(String id, String value) {
- Path<String> path = this.root.get(id);
- Predicate p = this.builder.like(path, value);
- if (this.filter != null) {
- this.filter = this.builder.or(this.filter, p);
- }
- else {
- this.filter = this.builder.or(p);
- }
- return this;
- }
-
- /**
- * Logical AND operation.
- * All elements in <i>values</i> will be concatenated with AND operator.
- *
- * @param id The database column name.
- * @param values List of values.
- * @return The builder itself.
- */
- public QueryBuilder<T> and(String id, List<String> values) {
- for(String v: values) {
- this.and(id, v);
- }
- return this;
- }
-
- /**
- * Logical OR operation.
- * All elements in <i>values</i> will be concatenated with OR operator.
- *
- * @param id The database column name.
- * @param values List of values.
- * @return The builder itself.
- */
- public QueryBuilder<T> or(String id, List<String> values) {
- for (String v: values) {
- this.or(id, v);
- }
- return this;
- }
-
- /**
- * Logical AND operation.
- * The actually defined query will be concatenated with the query defined
- * in the builder <i>b</i>.
- *
- * @param b A builder.
- * @return The builder itself.
- */
- public QueryBuilder<T> and(QueryBuilder<T> b) {
- if (b == null || b.filter == null) {
- return this;
- }
- if (this.filter != null) {
- this.filter = this.builder.and(this.filter, b.filter);
- }
- else {
- this.filter = this.builder.and(b.filter);
- }
- return this;
- }
-
- /**
- * Logical OR operation.
- * The actually defined query will be concatenated with the query defined
- * in the builder <i>b</i>.
- *
- * @param b A builder.
- * @return The builder itself.
- */
- public QueryBuilder<T> or(QueryBuilder<T> b) {
- if (b == null || b.filter == null) {
- return this;
- }
- if (this.filter != null) {
- this.filter = this.builder.or(this.filter, b.filter);
- }
- else {
- this.filter = this.builder.or(b.filter);
- }
- return this;
- }
-
- /**
- * Use 'distinct' in the query.
- */
- public void distinct() {
- this.query.distinct(true);
- }
-
- /**
- * Order result by the specified column name
- *
- * @param id The column name.
- * @param asc Ascending(true), Descending(false).
- */
- public void orderBy(String id, boolean asc) {
- if (asc) {
- this.query.orderBy(this.builder.asc(this.root.get(id)));
- }
- else {
- this.query.orderBy(this.builder.desc(this.root.get(id)));
- }
- }
-
- /**
- * Get an empty instance of this builder to create subfilters.
- *
- * @return An empty instance of this builder.
- */
- public QueryBuilder<T> getEmptyBuilder(){
- QueryBuilder<T> copy = new QueryBuilder<T>(manager, clazz);
- copy.builder = this.builder;
- copy.root = this.root;
- return copy;
- }
-}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/ReadOnlyRepository.java
--- a/src/main/java/de/intevation/lada/util/ReadOnlyRepository.java Fri Feb 06 15:58:28 2015 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU GPL (v>=3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out
- * the documentation coming with IMIS-Labordaten-Application for details.
- */
-package de.intevation.lada.util;
-
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.criteria.CriteriaQuery;
-
-import de.intevation.lada.util.rest.Response;
-
-/**
- * @author rrenkert
- */
-public class ReadOnlyRepository extends AbstractRepository {
-
- public ReadOnlyRepository() {
- }
-
- @Override
- public Response create(Object object) {
- return null;
- }
-
- @Override
- public Response update(Object object) {
- return null;
- }
-
- @Override
- public Response delete(Object object) {
- return null;
- }
-
- @Override
- public <T> Response filter(CriteriaQuery<T> filter) {
- List<T> result =
- emp.entityManager(dataSource).createQuery(filter).getResultList();
- return new Response(true, 200, result);
- }
-
- @Override
- public <T> Response filter(CriteriaQuery<T> filter, int size, int start) {
- List<T> result =
- emp.entityManager(dataSource).createQuery(filter).getResultList();
- if (size > 0 && start > -1) {
- List<T> newList = result.subList(start, size + start);
- return new Response(true, 200, newList, result.size());
- }
- return new Response(true, 200, result);
- }
-
- public <T> Response getAll(Class<T> clazz) {
- EntityManager manager = emp.entityManager(dataSource);
- QueryBuilder<T> builder =
- new QueryBuilder<T>(manager, clazz);
- List<T> result =
- manager.createQuery(builder.getQuery()).getResultList();
- return new Response(true, 200, result);
- }
-
- @Override
- public <T> Response getById(Class<T> clazz, String id) {
- T item = emp.entityManager(dataSource).find(clazz, id);
- if (item == null) {
- return new Response(false, 600, null);
- }
- return new Response(true, 200, item);
- }
-}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/Repository.java
--- a/src/main/java/de/intevation/lada/util/Repository.java Fri Feb 06 15:58:28 2015 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU GPL (v>=3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out
- * the documentation coming with IMIS-Labordaten-Application for details.
- */
-package de.intevation.lada.util;
-
-import javax.persistence.Query;
-import javax.persistence.criteria.CriteriaQuery;
-
-import de.intevation.lada.util.rest.Response;
-
-/**
- * This generic Container is an interface to request and select Data
- * obejcts from the connected database.
- *
- * @author <a href="mailto:rrenkert at intevation.de">Raimund Renkert</a>
- */
-public interface Repository {
-
- public Response create(Object object);
-
- public Response update(Object object);
-
- public Response delete(Object object);
-
- public <T> Response filter(CriteriaQuery<T> filter);
-
- public <T> Response filter(CriteriaQuery<T> filter, int size, int start);
-
- public <T> Response getAll(Class<T> clazz);
-
- public <T> Response getById(Class<T> clazz, String id);
-
- public Query queryFromString(String sql);
-
- public void setDataSource(String dataSource);
-
- public String getDataSource();
-
- public void setEntityManagerProducer(EntityManagerProducer emp);
-}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/RepositoryType.java
--- a/src/main/java/de/intevation/lada/util/RepositoryType.java Fri Feb 06 15:58:28 2015 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU GPL (v>=3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out
- * the documentation coming with IMIS-Labordaten-Application for details.
- */
-package de.intevation.lada.util;
-
-
-public enum RepositoryType {
- RO, RW
-}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/annotation/RepositoryConfig.java
--- a/src/main/java/de/intevation/lada/util/annotation/RepositoryConfig.java Fri Feb 06 15:58:28 2015 +0100
+++ b/src/main/java/de/intevation/lada/util/annotation/RepositoryConfig.java Fri Feb 06 17:55:54 2015 +0100
@@ -10,7 +10,7 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import de.intevation.lada.util.RepositoryType;
+import de.intevation.lada.util.data.RepositoryType;
@Retention(RetentionPolicy.RUNTIME)
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/data/AbstractRepository.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/intevation/lada/util/data/AbstractRepository.java Fri Feb 06 17:55:54 2015 +0100
@@ -0,0 +1,89 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+package de.intevation.lada.util.data;
+
+import javax.ejb.EJBTransactionRolledbackException;
+import javax.ejb.Stateless;
+import javax.ejb.TransactionAttribute;
+import javax.ejb.TransactionAttributeType;
+import javax.persistence.EntityExistsException;
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import javax.persistence.TransactionRequiredException;
+
+
+ at Stateless
+public abstract class AbstractRepository
+implements Repository
+{
+ protected EntityManagerProducer emp;
+
+ protected String dataSource;
+
+ protected String jndiPath;
+
+ /**
+ * Create or update an object in the database.
+ * This operation can not be undone.
+ *
+ * @param object The object to create or update
+ *
+ * @throws EntityExistsException
+ * @throws IllegalArgumentException
+ * @throws EJBTransactionRolledbackException
+ * @throws TransactionRequiredException
+ */
+ @TransactionAttribute(TransactionAttributeType.REQUIRED)
+ protected void persistInDatabase(Object object)
+ throws EntityExistsException,
+ IllegalArgumentException,
+ EJBTransactionRolledbackException,
+ TransactionRequiredException
+ {
+ emp.entityManager(dataSource).merge(object);
+ }
+
+ /**
+ * Remove an object from the datebase.
+ * This operation can not be undone.
+ *
+ * @param object The object to remove
+ *
+ * @throws IllegalArgumentException
+ * @throws TransactionRequiredException
+ */
+ @TransactionAttribute(TransactionAttributeType.REQUIRED)
+ protected void removeFromDatabase(Object object)
+ throws IllegalArgumentException,
+ TransactionRequiredException
+ {
+ EntityManager em = emp.entityManager(dataSource);
+ em.remove(
+ em.contains(object) ?
+ object : em.merge(object));
+ }
+
+ public Query queryFromString(String sql) {
+ EntityManager em = emp.entityManager(dataSource);
+ return em.createNativeQuery(sql);
+ }
+
+ @Override
+ public void setDataSource(String dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ @Override
+ public String getDataSource() {
+ return this.dataSource;
+ }
+
+ public void setEntityManagerProducer(EntityManagerProducer emp) {
+ this.emp = emp;
+ }
+}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/data/DefaultRepository.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/intevation/lada/util/data/DefaultRepository.java Fri Feb 06 17:55:54 2015 +0100
@@ -0,0 +1,81 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+package de.intevation.lada.util.data;
+
+import javax.ejb.EJBTransactionRolledbackException;
+import javax.persistence.EntityExistsException;
+import javax.persistence.TransactionRequiredException;
+
+import de.intevation.lada.util.rest.Response;
+
+
+/**
+ * @author rrenkert
+ */
+public class DefaultRepository extends ReadOnlyRepository {
+
+ public DefaultRepository() {
+ }
+
+ @Override
+ public Response create(Object object) {
+ Response response = new Response(true, 200, object);
+ try {
+ this.persistInDatabase(object);
+ }
+ catch (EntityExistsException eee) {
+ return new Response(false, 601, object);
+ }
+ catch (IllegalArgumentException iae) {
+ return new Response(false, 602, object);
+ }
+ catch (TransactionRequiredException tre) {
+ return new Response(false, 603, object);
+ }
+ catch (EJBTransactionRolledbackException ete) {
+ return new Response(false, 604, object);
+ }
+ return response;
+ }
+
+ @Override
+ public Response update(Object object) {
+ Response response = new Response(true, 200, object);
+ try {
+ this.persistInDatabase(object);
+ }
+ catch (EntityExistsException eee) {
+ return new Response(false, 601, object);
+ }
+ catch (IllegalArgumentException iae) {
+ return new Response(false, 602, object);
+ }
+ catch (TransactionRequiredException tre) {
+ return new Response(false, 603, object);
+ }
+ catch (EJBTransactionRolledbackException ete) {
+ return new Response(false, 604, object);
+ }
+ return response;
+ }
+
+ @Override
+ public Response delete(Object object) {
+ Response response = new Response(true, 200, null);
+ try {
+ this.removeFromDatabase(object);
+ }
+ catch (IllegalArgumentException iae) {
+ return new Response(false, 602, object);
+ }
+ catch (TransactionRequiredException tre) {
+ return new Response(false, 603, object);
+ }
+ return response;
+ }
+}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/data/EntityManagerProducer.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/intevation/lada/util/data/EntityManagerProducer.java Fri Feb 06 17:55:54 2015 +0100
@@ -0,0 +1,64 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+package de.intevation.lada.util.data;
+
+import javax.annotation.Resource;
+import javax.ejb.LocalBean;
+import javax.ejb.SessionContext;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.validation.UnexpectedTypeException;
+
+
+ at Stateless
+ at LocalBean
+public class EntityManagerProducer {
+
+ @Resource
+ private SessionContext ctx;
+
+ private String jndiPath = "java:app/entitymanager/";
+
+ /**
+ * Constructor for multi-tenancy entity manager delegate.
+ * Default jndi search path is 'java:app/entitymanager'.
+ */
+ public EntityManagerProducer() {
+ }
+
+ /**
+ * Constructor for multi-tenancy entity manager delegate.
+ *
+ * @param jndiEnv The jndi path to search for datasources.
+ * Defaults to 'java:app/entitymanager'.
+ */
+ public EntityManagerProducer(String jndiPath) {
+ this.jndiPath = jndiPath;
+ }
+
+ /**
+ * Create an entity manager for a datasource.
+ *
+ * @throws UnexpectedTypeException
+ * @param dataSourceName The jndi name of the datasource.
+ * @return The entity manager for the datasource.
+ */
+ public EntityManager entityManager(String dataSourceName) {
+
+ EntityManager entityManager =
+ (EntityManager) this.ctx.lookup(this.jndiPath + dataSourceName);
+
+ if (entityManager == null) {
+ throw new UnexpectedTypeException("Unknown data source name '" +
+ dataSourceName + "'.");
+ }
+
+ return entityManager;
+
+ }
+}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/data/QueryBuilder.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/intevation/lada/util/data/QueryBuilder.java Fri Feb 06 17:55:54 2015 +0100
@@ -0,0 +1,238 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+package de.intevation.lada.util.data;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Path;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+/**
+ * @author <a href="mailto:rrenkert at intevation.de">Raimund Renkert</a>
+ */
+public class QueryBuilder<T> {
+
+ private EntityManager manager;
+ private CriteriaBuilder builder;
+ private CriteriaQuery<T> query;
+ private Root<T> root;
+ private Class<T> clazz;
+ private Predicate filter;
+
+ /**
+ * Create a new QueryBuilder for the specified class.
+ *
+ * @param manager
+ * @param clazz
+ */
+ public QueryBuilder(EntityManager manager, Class<T> clazz) {
+ this.manager = manager;
+ this.clazz = clazz;
+ this.builder = this.manager.getCriteriaBuilder();
+ this.query = this.builder.createQuery(this.clazz);
+ this.root = this.query.from(this.clazz);
+ }
+
+ /**
+ * Get the criteria query build with this class.
+ *
+ * @return The query.
+ */
+ public CriteriaQuery<T> getQuery() {
+ if (this.filter == null) {
+ this.query.where();
+ return this.query;
+ }
+ this.query.where(this.filter);
+ return this.query;
+ }
+
+ /**
+ * Logical AND operation.
+ *
+ * @param id The database column name.
+ * @param value The filter value
+ * @return The builder itself.
+ */
+ public QueryBuilder<T> and(String id, Object value) {
+ Predicate p = this.builder.equal(this.root.get(id), value);
+ if (this.filter != null) {
+ this.filter = this.builder.and(this.filter, p);
+ }
+ else {
+ this.filter = this.builder.and(p);
+ }
+ return this;
+ }
+
+ /**
+ * Logical AND with like operation.
+ *
+ * @param id The database column name.
+ * @param value The filter value
+ * @return The builder itself.
+ */
+ public QueryBuilder<T> andLike(String id, String value) {
+ Path<String> path = this.root.get(id);
+ Predicate p = this.builder.like(path, value);
+ if (this.filter != null) {
+ this.filter = this.builder.and(this.filter, p);
+ }
+ else {
+ this.filter = this.builder.and(p);
+ }
+ return this;
+ }
+
+ /**
+ * Logical OR operation.
+ *
+ * @param id The database column name
+ * @param value The filter value.
+ * @return The builder itself.
+ */
+ public QueryBuilder<T> or(String id, Object value) {
+ Predicate p = this.builder.equal(this.root.get(id), value);
+ if (this.filter != null) {
+ this.filter = this.builder.or(this.filter, p);
+ }
+ else {
+ this.filter = this.builder.or(p);
+ }
+ return this;
+ }
+
+ /**
+ * Logical OR with like operation.
+ *
+ * @param column The database column name.
+ * @param value The filter value
+ * @return The builder itself.
+ */
+ public QueryBuilder<T> orLike(String id, String value) {
+ Path<String> path = this.root.get(id);
+ Predicate p = this.builder.like(path, value);
+ if (this.filter != null) {
+ this.filter = this.builder.or(this.filter, p);
+ }
+ else {
+ this.filter = this.builder.or(p);
+ }
+ return this;
+ }
+
+ /**
+ * Logical AND operation.
+ * All elements in <i>values</i> will be concatenated with AND operator.
+ *
+ * @param id The database column name.
+ * @param values List of values.
+ * @return The builder itself.
+ */
+ public QueryBuilder<T> and(String id, List<String> values) {
+ for(String v: values) {
+ this.and(id, v);
+ }
+ return this;
+ }
+
+ /**
+ * Logical OR operation.
+ * All elements in <i>values</i> will be concatenated with OR operator.
+ *
+ * @param id The database column name.
+ * @param values List of values.
+ * @return The builder itself.
+ */
+ public QueryBuilder<T> or(String id, List<String> values) {
+ for (String v: values) {
+ this.or(id, v);
+ }
+ return this;
+ }
+
+ /**
+ * Logical AND operation.
+ * The actually defined query will be concatenated with the query defined
+ * in the builder <i>b</i>.
+ *
+ * @param b A builder.
+ * @return The builder itself.
+ */
+ public QueryBuilder<T> and(QueryBuilder<T> b) {
+ if (b == null || b.filter == null) {
+ return this;
+ }
+ if (this.filter != null) {
+ this.filter = this.builder.and(this.filter, b.filter);
+ }
+ else {
+ this.filter = this.builder.and(b.filter);
+ }
+ return this;
+ }
+
+ /**
+ * Logical OR operation.
+ * The actually defined query will be concatenated with the query defined
+ * in the builder <i>b</i>.
+ *
+ * @param b A builder.
+ * @return The builder itself.
+ */
+ public QueryBuilder<T> or(QueryBuilder<T> b) {
+ if (b == null || b.filter == null) {
+ return this;
+ }
+ if (this.filter != null) {
+ this.filter = this.builder.or(this.filter, b.filter);
+ }
+ else {
+ this.filter = this.builder.or(b.filter);
+ }
+ return this;
+ }
+
+ /**
+ * Use 'distinct' in the query.
+ */
+ public void distinct() {
+ this.query.distinct(true);
+ }
+
+ /**
+ * Order result by the specified column name
+ *
+ * @param id The column name.
+ * @param asc Ascending(true), Descending(false).
+ */
+ public void orderBy(String id, boolean asc) {
+ if (asc) {
+ this.query.orderBy(this.builder.asc(this.root.get(id)));
+ }
+ else {
+ this.query.orderBy(this.builder.desc(this.root.get(id)));
+ }
+ }
+
+ /**
+ * Get an empty instance of this builder to create subfilters.
+ *
+ * @return An empty instance of this builder.
+ */
+ public QueryBuilder<T> getEmptyBuilder(){
+ QueryBuilder<T> copy = new QueryBuilder<T>(manager, clazz);
+ copy.builder = this.builder;
+ copy.root = this.root;
+ return copy;
+ }
+}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/data/ReadOnlyRepository.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/intevation/lada/util/data/ReadOnlyRepository.java Fri Feb 06 17:55:54 2015 +0100
@@ -0,0 +1,75 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+package de.intevation.lada.util.data;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaQuery;
+
+import de.intevation.lada.util.rest.Response;
+
+/**
+ * @author rrenkert
+ */
+public class ReadOnlyRepository extends AbstractRepository {
+
+ public ReadOnlyRepository() {
+ }
+
+ @Override
+ public Response create(Object object) {
+ return null;
+ }
+
+ @Override
+ public Response update(Object object) {
+ return null;
+ }
+
+ @Override
+ public Response delete(Object object) {
+ return null;
+ }
+
+ @Override
+ public <T> Response filter(CriteriaQuery<T> filter) {
+ List<T> result =
+ emp.entityManager(dataSource).createQuery(filter).getResultList();
+ return new Response(true, 200, result);
+ }
+
+ @Override
+ public <T> Response filter(CriteriaQuery<T> filter, int size, int start) {
+ List<T> result =
+ emp.entityManager(dataSource).createQuery(filter).getResultList();
+ if (size > 0 && start > -1) {
+ List<T> newList = result.subList(start, size + start);
+ return new Response(true, 200, newList, result.size());
+ }
+ return new Response(true, 200, result);
+ }
+
+ public <T> Response getAll(Class<T> clazz) {
+ EntityManager manager = emp.entityManager(dataSource);
+ QueryBuilder<T> builder =
+ new QueryBuilder<T>(manager, clazz);
+ List<T> result =
+ manager.createQuery(builder.getQuery()).getResultList();
+ return new Response(true, 200, result);
+ }
+
+ @Override
+ public <T> Response getById(Class<T> clazz, Object id) {
+ T item = emp.entityManager(dataSource).find(clazz, id);
+ if (item == null) {
+ return new Response(false, 600, null);
+ }
+ return new Response(true, 200, item);
+ }
+}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/data/Repository.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/intevation/lada/util/data/Repository.java Fri Feb 06 17:55:54 2015 +0100
@@ -0,0 +1,44 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+package de.intevation.lada.util.data;
+
+import javax.persistence.Query;
+import javax.persistence.criteria.CriteriaQuery;
+
+import de.intevation.lada.util.rest.Response;
+
+/**
+ * This generic Container is an interface to request and select Data
+ * obejcts from the connected database.
+ *
+ * @author <a href="mailto:rrenkert at intevation.de">Raimund Renkert</a>
+ */
+public interface Repository {
+
+ public Response create(Object object);
+
+ public Response update(Object object);
+
+ public Response delete(Object object);
+
+ public <T> Response filter(CriteriaQuery<T> filter);
+
+ public <T> Response filter(CriteriaQuery<T> filter, int size, int start);
+
+ public <T> Response getAll(Class<T> clazz);
+
+ public <T> Response getById(Class<T> clazz, Object id);
+
+ public Query queryFromString(String sql);
+
+ public void setDataSource(String dataSource);
+
+ public String getDataSource();
+
+ public void setEntityManagerProducer(EntityManagerProducer emp);
+}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/data/RepositoryType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/intevation/lada/util/data/RepositoryType.java Fri Feb 06 17:55:54 2015 +0100
@@ -0,0 +1,13 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+package de.intevation.lada.util.data;
+
+
+public enum RepositoryType {
+ RO, RW
+}
diff -r 5011173fd340 -r f0ad10e0e1b1 src/main/java/de/intevation/lada/util/factory/RepositoryFactory.java
--- a/src/main/java/de/intevation/lada/util/factory/RepositoryFactory.java Fri Feb 06 15:58:28 2015 +0100
+++ b/src/main/java/de/intevation/lada/util/factory/RepositoryFactory.java Fri Feb 06 17:55:54 2015 +0100
@@ -13,12 +13,12 @@
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;
-import de.intevation.lada.util.DefaultRepository;
-import de.intevation.lada.util.EntityManagerProducer;
-import de.intevation.lada.util.ReadOnlyRepository;
-import de.intevation.lada.util.Repository;
-import de.intevation.lada.util.RepositoryType;
import de.intevation.lada.util.annotation.RepositoryConfig;
+import de.intevation.lada.util.data.DefaultRepository;
+import de.intevation.lada.util.data.EntityManagerProducer;
+import de.intevation.lada.util.data.ReadOnlyRepository;
+import de.intevation.lada.util.data.Repository;
+import de.intevation.lada.util.data.RepositoryType;
@ApplicationScoped
More information about the Lada-commits
mailing list