summaryrefslogtreecommitdiffstats
path: root/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/nu/xss/jpa/dao/GenericJpaDao.java')
-rw-r--r--src/main/java/nu/xss/jpa/dao/GenericJpaDao.java156
1 files changed, 88 insertions, 68 deletions
diff --git a/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java b/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java
index 399763a..0c06505 100644
--- a/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java
+++ b/src/main/java/nu/xss/jpa/dao/GenericJpaDao.java
@@ -3,8 +3,9 @@ package nu.xss.jpa.dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.util.HashSet;
import java.util.List;
-
+import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
@@ -13,9 +14,13 @@ import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import nu.xss.jpa.entity.TypedEntity;
+import nu.xss.jpa.query.Pagination;
+import nu.xss.jpa.query.Sort;
+import nu.xss.jpa.query.filter.Filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,20 +51,20 @@ public abstract class GenericJpaDao<E extends TypedEntity<K>, K> implements
}
public void save(E entity) {
- logger.info("Persist Entity: {}.", entity.toString());
entityManager.persist(entity);
logger.info("Saved entity: {}.", entity.toString());
}
public void merge(E entity) {
- logger.info("Merge Entity: {}.", entity.toString());
entityManager.merge(entity);
- logger.info("Saved entity: {}.", entity.toString());
+ logger.info("Updated unmanaged entity: {}.", entity.toString());
}
public void delete(E entity) {
- E persistentEntity = findById(entity.getId());
- entityManager.remove(persistentEntity);
+ final E persistentEntity = findById(entity.getId());
+ if (persistentEntity != null) {
+ entityManager.remove(persistentEntity);
+ }
logger.info("Deleted entity: {}.", entity.toString());
}
@@ -67,86 +72,71 @@ public abstract class GenericJpaDao<E extends TypedEntity<K>, K> implements
return entityManager.find(entity, id);
}
- public List<E> findAll() {
- return find(null);
+ @Override
+ public int count() {
+ // TODO Auto-generated method stub
+ return 0;
}
- public List<E> findAll(int count) {
- return find(null, count);
+ @Override
+ public int count(Filter... filter) {
+ // TODO Auto-generated method stub
+ return 0;
}
- public List<E> findAll(int count, int offset) {
- return find(null, count, offset);
+ @Override
+ public List<E> findAll() {
+ return find(null, null, null);
}
- public List<E> findAll(String sortColumn) {
- return find(null, sortColumn);
+ @Override
+ public List<E> findAll(Sort sort) {
+ return find(null, sort, null);
}
- public List<E> findAll(int count, String sortColumn) {
- return find(null, count, sortColumn);
+ @Override
+ public List<E> findAll(Pagination pagination) {
+ return find(null, null, pagination);
}
- public List<E> findAll(int count, int offset, String sortColumn) {
- return find(null, count, offset, sortColumn);
+ @Override
+ public List<E> findAll(Sort sort, Pagination pagination) {
+ return find(null, sort, pagination);
}
- public List<E> findAll(String sortColumn, boolean isAscending) {
- return find(null, sortColumn, isAscending);
+ @Override
+ public List<E> findAll(Filter... filter) {
+ return find(null, null, null, filter);
}
- public List<E> findAll(int count, String sortColumn, boolean isAscending) {
- return find(null, count, sortColumn, isAscending);
+ @Override
+ public List<E> findAll(Sort sort, Filter... filter) {
+ return find(null, sort, null, filter);
}
- public List<E> findAll(int count, int offset, String sortColumn, boolean isAscending) {
- return find(null, count, offset, sortColumn, isAscending);
- }
-
- protected CriteriaBuilder getCriteriaBuilder() {
- return entityManager.getCriteriaBuilder();
+ @Override
+ public List<E> findAll(Pagination pagination, Filter... filter) {
+ return find(null, null, pagination, filter);
}
- protected CriteriaQuery<E> createQuery() {
- CriteriaQuery<E> c = getCriteriaBuilder().createQuery(this.entity);
- return c;
+ @Override
+ public List<E> findAll(Sort sort, Pagination pagination, Filter... filter) {
+ return find(null, sort, pagination, filter);
}
-
protected List<E> find(CriteriaQuery<E> query) {
- return find(query, 0, 0, null, true);
- }
-
- protected List<E> find(CriteriaQuery<E> query, int count) {
- return find(query, count, 0, null, true);
- }
-
- protected List<E> find(CriteriaQuery<E> query, int count, int offset) {
- return find(query, count, offset, null, true);
+ return find(query, null, null);
}
- protected List<E> find(CriteriaQuery<E> query, String sortColumn) {
- return find(query, sortColumn, true);
+ protected List<E> find(CriteriaQuery<E> query, Pagination pagination) {
+ return find(query, null, pagination);
}
- protected List<E> find(CriteriaQuery<E> query, int count, String sortColumn) {
- return find(query, count, sortColumn, true);
- }
-
- protected List<E> find(CriteriaQuery<E> query, int count, int offset, String sortColumn) {
- return find(query, count, offset, sortColumn, true);
- }
-
-
- protected List<E> find(CriteriaQuery<E> query, String sortColumn, boolean isAscending) {
- return find(query, 0, 0, sortColumn, isAscending);
+ protected List<E> find(CriteriaQuery<E> query, Sort sort) {
+ return find(query, sort, null);
}
- protected List<E> find(CriteriaQuery<E> query, int count, String sortColumn, boolean isAscending) {
- return find(query, count, 0, sortColumn, isAscending);
- }
-
- protected List<E> find(CriteriaQuery<E> query, int count, int offset, String sortColumn, boolean isAscending) {
+ protected List<E> find(CriteriaQuery<E> query, Sort sort, Pagination pagination, Filter... filter) {
Root<E> root;
// check if we have a 'simple' query
@@ -157,20 +147,39 @@ public abstract class GenericJpaDao<E extends TypedEntity<K>, K> implements
root = query.from(this.entity);
query.select(root);
- if (sortColumn != null) {
- if (isAscending) {
- query.orderBy(getCriteriaBuilder().asc(root.get(sortColumn)));
+ if (filter != null) {
+ Set<Predicate> predicates = new HashSet<Predicate>();
+ for (final Filter f: filter) {
+ f.buildFilters(getCriteriaBuilder(), root);
+ for (Predicate p : f.getPredicates()) {
+ predicates.add(p);
+ }
+ }
+ if (predicates.size() > 0) {
+ query.where((Predicate[]) predicates.toArray());
+ }
+ }
+
+
+ // Result Sorting
+ // TODO: Multcolum sort
+ if (sort != null) {
+ if (sort.isAsc()) {
+ query.orderBy(getCriteriaBuilder().asc(root.get(sort.getColumn())));
} else {
- query.orderBy(getCriteriaBuilder().desc(root.get(sortColumn)));
+ query.orderBy(getCriteriaBuilder().desc(root.get(sort.getColumn())));
}
}
+ // Result pagination
TypedQuery<E> q = entityManager.createQuery(query);
- if ( count > 0 ) {
- q.setFirstResult(offset);
- }
- if (offset > 0) {
- q.setMaxResults(count);
+ if (pagination != null) {
+ if ( pagination.getCount() > 0 ) {
+ q.setFirstResult(pagination.getCount());
+ }
+ if ( pagination.getOffset() > 0) {
+ q.setMaxResults(pagination.getOffset());
+ }
}
return q.getResultList();
@@ -201,4 +210,15 @@ public abstract class GenericJpaDao<E extends TypedEntity<K>, K> implements
return find(query).get(0);
}
}
+
+
+ protected CriteriaBuilder getCriteriaBuilder() {
+ return entityManager.getCriteriaBuilder();
+ }
+
+ protected CriteriaQuery<E> createQuery() {
+ CriteriaQuery<E> c = getCriteriaBuilder().createQuery(this.entity);
+ return c;
+ }
+
}