From e31a126a9fa31ec7a4ad871f4236586a8d1a97c0 Mon Sep 17 00:00:00 2001 From: etj Date: Thu, 19 Dec 2019 16:48:13 -0700 Subject: [PATCH] #128: jdk11: major changes in persistence - WIP # Conflicts: # src/services/core/persistence/pom.xml # src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GFUserDAOImpl.java # src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSInstanceDAOImpl.java # src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSUserDAOImpl.java # src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/LayerDetailsDAOImpl.java # src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/UserGroupDAOImpl.java # src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/RuleDAOTest.java # src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java # src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java # src/services/core/webtest/pom.xml # src/services/modules/ldap/pom.xml # src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/utils/MultiPolygonUtils.java # src/services/modules/rest/test/pom.xml # src/services/pom.xml --- src/services/core/model-external/pom.xml | 7 + src/services/core/model/pom.xml | 5 + .../geofence/core/model/LayerDetails.java | 13 +- .../geofence/core/model/RuleLimits.java | 4 +- src/services/core/persistence/pom.xml | 78 ++++--- .../core/dao/RestrictedGenericDAO.java | 13 +- .../core/dao/impl/AdminRuleDAOImpl.java | 23 +- .../geofence/core/dao/impl/BaseDAO.java | 168 ++++++++++---- .../geofence/core/dao/impl/GFUserDAOImpl.java | 16 +- .../core/dao/impl/GSInstanceDAOImpl.java | 13 +- .../geofence/core/dao/impl/GSUserDAOImpl.java | 20 +- .../core/dao/impl/LayerDetailsDAOImpl.java | 16 +- .../core/dao/impl/PrioritizableDAOImpl.java | 35 +-- .../geofence/core/dao/impl/RuleDAOImpl.java | 19 +- .../core/dao/impl/RuleLimitsDAOImpl.java | 22 +- .../core/dao/impl/UserGroupDAOImpl.java | 13 +- .../geofence/core/dao/search/Filter.java | 31 +++ .../geofence/core/dao/search/Search.java | 216 ++++++++++++++++++ .../geofence/core/dao/search/SearchUtil.java | 63 +++++ .../geofence/core/dao/util/SearchUtil.java | 41 ---- .../applicationContext-geofenceDatasource.xml | 28 ++- .../src/main/resources/applicationContext.xml | 26 ++- .../src/main/resources/geofence-ehcache.xml | 10 +- .../geofence/core/dao/BaseDAOTest.java | 16 +- .../geofence/core/dao/RuleDAOTest.java | 19 +- src/services/core/services-impl/pom.xml | 10 +- .../services/AdminRuleAdminServiceImpl.java | 19 +- .../services/AuthorizationServiceImpl.java | 9 +- .../services/GFUserAdminServiceImpl.java | 11 +- .../services/InstanceAdminServiceImpl.java | 10 +- .../services/RuleAdminServiceImpl.java | 10 +- .../services/RuleReaderServiceImpl.java | 31 ++- .../services/UserAdminServiceImpl.java | 12 +- .../services/UserGroupAdminServiceImpl.java | 12 +- .../geofence/services/util/FilterUtils.java | 5 +- src/services/modules/ldap/pom.xml | 8 +- src/services/modules/rest/impl/pom.xml | 20 +- src/services/pom.xml | 147 +++++++----- 38 files changed, 864 insertions(+), 355 deletions(-) create mode 100644 src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Filter.java create mode 100644 src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Search.java create mode 100644 src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/SearchUtil.java delete mode 100644 src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/util/SearchUtil.java diff --git a/src/services/core/model-external/pom.xml b/src/services/core/model-external/pom.xml index c10ee66a..3b32589d 100644 --- a/src/services/core/model-external/pom.xml +++ b/src/services/core/model-external/pom.xml @@ -125,6 +125,13 @@ + + + + + + + diff --git a/src/services/core/model/pom.xml b/src/services/core/model/pom.xml index 4144ca02..005353c8 100644 --- a/src/services/core/model/pom.xml +++ b/src/services/core/model/pom.xml @@ -29,6 +29,11 @@ javax.annotation javax.annotation-api + javax.xml.bind jaxb-api diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/LayerDetails.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/LayerDetails.java index b04683d9..e1412993 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/LayerDetails.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/LayerDetails.java @@ -14,6 +14,7 @@ import java.util.HashSet; import java.util.Set; import javax.persistence.Column; +import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; @@ -49,7 +50,7 @@ @Table(name = "gf_layer_details") @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "LayerDetails") @XmlRootElement(name = "LayerDetails") -public class LayerDetails implements Serializable { +public class LayerDetails implements Identifiable, Serializable { private static final long serialVersionUID = -4150963895550551513L; @@ -72,7 +73,7 @@ public class LayerDetails implements Serializable { @Column(length=4000) private String cqlFilterWrite; - @Type(type = "org.hibernatespatial.GeometryUserType") +// @Type(type = "org.hibernate.spatial.JTSGeometryType") @Column(name = "area") private MultiPolygon area; @@ -90,23 +91,23 @@ public class LayerDetails implements Serializable { private Rule rule; /** Styles allowed for this layer */ - @org.hibernate.annotations.CollectionOfElements(fetch=FetchType.EAGER) + @ElementCollection(fetch=FetchType.EAGER) @JoinTable( name = "gf_layer_styles", joinColumns = @JoinColumn(name = "details_id")) @ForeignKey(name="fk_styles_layer") @Column(name="styleName") - private Set allowedStyles = new HashSet(); + private Set allowedStyles = new HashSet<>(); /** Feature Attributes associated to the Layer *

We'll use the pair (details_id, name) as PK for the associated table. * To do so, we have to perform some trick on the {@link LayerAttribute#access} field. */ - @org.hibernate.annotations.CollectionOfElements(fetch=FetchType.EAGER) + @ElementCollection(fetch=FetchType.EAGER) @JoinTable( name = "gf_layer_attributes", joinColumns = @JoinColumn(name = "details_id"), uniqueConstraints = @UniqueConstraint(columnNames={"details_id", "name"})) // override is used to set the pk as {"details_id", "name"} // @AttributeOverride( name="access", column=@Column(name="access", nullable=false) ) @ForeignKey(name="fk_attribute_layer") @Fetch(FetchMode.SELECT) // without this, hibernate will duplicate results(!) - private Set attributes = new HashSet(); + private Set attributes = new HashSet<>(); @XmlJavaTypeAdapter(MultiPolygonAdapter.class) public MultiPolygon getArea() { diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/RuleLimits.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/RuleLimits.java index 53cbe550..83a61600 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/RuleLimits.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/RuleLimits.java @@ -41,7 +41,7 @@ @Table(name = "gf_rule_limits", uniqueConstraints = @UniqueConstraint(columnNames = "rule_id")) @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "RuleLimits") @XmlRootElement(name = "RuleLimits") -public class RuleLimits implements Serializable { +public class RuleLimits implements Identifiable, Serializable { private static final long serialVersionUID = 2829839552804345725L; @@ -56,7 +56,7 @@ public class RuleLimits implements Serializable { @ForeignKey(name = "fk_limits_rule") private Rule rule; - @Type(type = "org.hibernatespatial.GeometryUserType") + //@Type(type = "org.hibernate.spatial.JTSGeometryType") @Column(name = "area") private MultiPolygon allowedArea; diff --git a/src/services/core/persistence/pom.xml b/src/services/core/persistence/pom.xml index 3593050e..2e312910 100644 --- a/src/services/core/persistence/pom.xml +++ b/src/services/core/persistence/pom.xml @@ -98,36 +98,36 @@ spring-jdbc - - - + + + - - + + + JPA1 dependency will excluded by exclusions in depenendency management com.googlecode.genericdao search-jpa-hibernate - + --> - + commons-dbcp commons-dbcp - + - org.hibernatespatial + org.hibernate hibernate-spatial @@ -152,23 +152,30 @@ - - com.h2database - h2 - + + com.h2database + h2 + - - - + + + - - org.hibernate - hibernate-ehcache - + + org.hibernate + hibernate-jcache + + + + org.ehcache + ehcache + 3.8.1 + + org.hibernate - hibernate-entitymanager + hibernate-core asm @@ -185,14 +192,14 @@ - + cglib cglib-nodep - - + @@ -205,13 +212,21 @@ aspectjweaver - + junit junit test + + org.slf4j + slf4j-simple + 1.7.26 + test + + + @@ -276,6 +291,15 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + false + + + diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RestrictedGenericDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RestrictedGenericDAO.java index ed6a7ced..cb1b731e 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RestrictedGenericDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RestrictedGenericDAO.java @@ -5,9 +5,9 @@ package org.geoserver.geofence.core.dao; +import org.geoserver.geofence.core.dao.search.Search; import java.util.List; - -import com.googlecode.genericdao.search.ISearch; +import org.geoserver.geofence.core.model.Identifiable; /** * Public interface to define a restricted set of operation wrt to ones @@ -20,12 +20,15 @@ public interface RestrictedGenericDAO /* extends GenericDAO */{ + public Search createSearch(); + public Search createCountSearch(); + public List findAll(); public ENTITY find(Long id); public void persist(ENTITY... entities); public ENTITY merge(ENTITY entity); - public boolean remove(ENTITY entity); + public void remove(ENTITY entity); public boolean removeById(Long id); - public List search(ISearch search); - public int count(ISearch search); + public List search(Search search); + public long count(Search search); } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/AdminRuleDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/AdminRuleDAOImpl.java index 38165ba8..c00a2c12 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/AdminRuleDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/AdminRuleDAOImpl.java @@ -7,14 +7,12 @@ import java.util.List; -import com.googlecode.genericdao.search.ISearch; -import com.googlecode.genericdao.search.Search; - -import static org.geoserver.geofence.core.dao.util.SearchUtil.*; +import static org.geoserver.geofence.core.dao.search.SearchUtil.*; import org.geoserver.geofence.core.model.enums.InsertPosition; import org.geoserver.geofence.core.dao.AdminRuleDAO; import org.geoserver.geofence.core.dao.DuplicateKeyException; +import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.core.model.AdminRule; import org.apache.logging.log4j.LogManager; @@ -28,10 +26,17 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ @Transactional(value = "geofenceTransactionManager") -public class AdminRuleDAOImpl extends PrioritizableDAOImpl implements AdminRuleDAO { +public class AdminRuleDAOImpl + extends PrioritizableDAOImpl + implements AdminRuleDAO { +// public class RuleDAOImpl extends PrioritizableDAOImpl implements RuleDAO { private static final Logger LOGGER = LogManager.getLogger(AdminRuleDAOImpl.class); + public AdminRuleDAOImpl() { + super(AdminRule.class); + } + @Override public void persist(AdminRule... entities) { @@ -77,7 +82,7 @@ public void persistInternal(AdminRule entity) { } protected Search getDupSearch(AdminRule rule) { - Search search = new Search(AdminRule.class); + Search search = createSearch(); addSearchField(search, "username", rule.getUsername()); addSearchField(search, "rolename", rule.getRolename()); addSearchField(search, "instance", rule.getInstance()); @@ -94,7 +99,7 @@ public List findAll() { } @Override - public List search(ISearch search) { + public List search(Search search) { return super.search(search); } @@ -123,8 +128,8 @@ public AdminRule merge(AdminRule entity) { } @Override - public boolean remove(AdminRule entity) { - return super.remove(entity); + public void remove(AdminRule entity) { + super.remove(entity); } @Override diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/BaseDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/BaseDAO.java index 928346d0..3bb08c3c 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/BaseDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/BaseDAO.java @@ -1,70 +1,144 @@ -/* (c) 2014 Open Source Geospatial Foundation - all rights reserved +/* (c) 2014 - 2020 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ - package org.geoserver.geofence.core.dao.impl; -import com.googlecode.genericdao.dao.jpa.GenericDAOImpl; -import com.googlecode.genericdao.search.jpa.JPASearchProcessor; +import org.geoserver.geofence.core.dao.search.Search; import java.io.Serializable; +import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; - -//import com.trg.dao.jpa.GenericDAOImpl; -//import com.trg.search.jpa.JPASearchProcessor; - +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; +import org.geoserver.geofence.core.model.Identifiable; +import org.hibernate.Session; import org.springframework.stereotype.Repository; - /** * * The base DAO furnish a set of methods usually used * - * @author Tobia Di Pisa (tobia.dipisa@geo-solutions.it) */ @Repository(value = "geofence") -public class BaseDAO extends GenericDAOImpl +public class BaseDAO // extends GenericDAOImpl { + protected final Class ENTITY; + + protected BaseDAO(Class entity) { + this.ENTITY = entity; + } @PersistenceContext(unitName = "geofenceEntityManagerFactory") - private EntityManager entityManager; - - /** - * EntityManager setting - * - * @param entityManager - * the entity manager to set - */ - @Override - public void setEntityManager(EntityManager entityManager) - { - this.entityManager = entityManager; - super.setEntityManager(this.entityManager); - } - - /** - * JPASearchProcessor setting - * - * @param searchProcessor - * the search processor to set - */ - @Override - public void setSearchProcessor(JPASearchProcessor searchProcessor) - { - super.setSearchProcessor(searchProcessor); - } - - /* - * (non-Javadoc) - * - * @see com.trg.dao.jpa.JPABaseDAO#em() - */ - @Override - public EntityManager em() - { - return this.entityManager; + private EntityManager em; + + + public void setEntityManager(EntityManager em) { + this.em = em; + } + + public EntityManager em() { + return this.em; + } + + public Session session() { + return em.unwrap(Session.class); + } + + public class DSearch extends Search { + + public DSearch(EntityManager em, Class resultType ) { + super(em, resultType); + } + + public DSearch(EntityManager em, Class resultType, Class baseClass) { + super(em, resultType, baseClass); + } + } + + public Search createSearch(Class resultType) { + return new DSearch(em, resultType); + } + + public Search createSearch() { + return createSearch(ENTITY); + } + + public Search createCountSearch() { + return new DSearch(em, Long.class, ENTITY); + } + + public List findAll() { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery q = cb.createQuery(ENTITY); + Root c = q.from(ENTITY); + q.select(c); + + return em.createQuery(q).getResultList(); } + + public E find(ID id) { + return em().find(ENTITY, id); + } + + public void persist(E... entities) { + for (E entity : entities) { + em.persist(entity); + } + } + + public E merge(E entity) { + return em.merge(entity); + } + + public void merge(E... entities) { + for (E entity : entities) { + em.merge(entity); + } + } + + public void remove(E entity) { + removeById(entity.getId()); + } + + public boolean removeById(Long id) { + E e = em.find(ENTITY, id); + if (e == null) { + return false; + } + em.remove(e); + return true; + } + + public List _search(Search search) { + return search(search); + } + + public List search(Search search) { + return search.getQuery().getResultList(); + } + + protected Object searchUnique(Search search) { + List found = search(search); + switch (found.size()) { + case 0: + return null; + case 1: + return found.get(0); + default: + throw new IllegalStateException("Result is not unique"); + } + } + + public long count(Search search) { + if(search == null) { + search = createSearch(); + } + + return (Long)search.getCountQuery().getSingleResult(); + } + } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GFUserDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GFUserDAOImpl.java index 93b979b9..8366d1ce 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GFUserDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GFUserDAOImpl.java @@ -8,13 +8,13 @@ import org.geoserver.geofence.core.dao.GFUserDAO; import org.geoserver.geofence.core.model.GFUser; +import org.geoserver.geofence.core.dao.search.Search; import java.util.Date; import java.util.List; import org.springframework.transaction.annotation.Transactional; -import com.googlecode.genericdao.search.ISearch; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -25,11 +25,17 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ @Transactional(value = "geofenceTransactionManager") -public class GFUserDAOImpl extends BaseDAO implements GFUserDAO +public class GFUserDAOImpl // + extends BaseDAO // + implements GFUserDAO { private static final Logger LOGGER = LogManager.getLogger(GFUserDAOImpl.class); + public GFUserDAOImpl() { + super(GFUser.class); + } + @Override public void persist(GFUser... entities) { @@ -48,7 +54,7 @@ public List findAll() } @Override - public List search(ISearch search) + public List search(Search search) { return super.search(search); } @@ -60,9 +66,9 @@ public GFUser merge(GFUser entity) } @Override - public boolean remove(GFUser entity) + public void remove(GFUser entity) { - return super.remove(entity); + super.remove(entity); } @Override diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSInstanceDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSInstanceDAOImpl.java index 148b3f49..fe21032b 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSInstanceDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSInstanceDAOImpl.java @@ -7,13 +7,14 @@ import java.util.List; -import com.googlecode.genericdao.search.ISearch; import org.geoserver.geofence.core.dao.GSInstanceDAO; +import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.core.model.GSInstance; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; + import org.springframework.transaction.annotation.Transactional; @@ -28,6 +29,10 @@ public class GSInstanceDAOImpl extends BaseDAO implements GSIn private static final Logger LOGGER = LogManager.getLogger(GSInstanceDAOImpl.class); + public GSInstanceDAOImpl() { + super(GSInstance.class); + } + @Override public void persist(GSInstance... entities) { @@ -41,7 +46,7 @@ public List findAll() } @Override - public List search(ISearch search) + public List search(Search search) { return super.search(search); } @@ -53,9 +58,9 @@ public GSInstance merge(GSInstance entity) } @Override - public boolean remove(GSInstance entity) + public void remove(GSInstance entity) { - return super.remove(entity); + super.remove(entity); } @Override diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSUserDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSUserDAOImpl.java index 28400667..c5588d2a 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSUserDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSUserDAOImpl.java @@ -7,17 +7,12 @@ import org.geoserver.geofence.core.dao.GSUserDAO; import org.geoserver.geofence.core.model.GSUser; -import org.geoserver.geofence.core.model.UserGroup; +import org.geoserver.geofence.core.dao.search.Search; import java.util.Date; import java.util.List; -import java.util.Set; - -import org.hibernate.Hibernate; import org.springframework.transaction.annotation.Transactional; -import com.googlecode.genericdao.search.ISearch; -import com.googlecode.genericdao.search.Search; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -30,9 +25,12 @@ @Transactional(value = "geofenceTransactionManager") public class GSUserDAOImpl extends BaseDAO implements GSUserDAO { - private static final Logger LOGGER = LogManager.getLogger(GSUserDAOImpl.class); + public GSUserDAOImpl() { + super(GSUser.class); + } + @Override public void persist(GSUser... entities) { @@ -51,14 +49,14 @@ public List findAll() } @Override - public List search(ISearch search) + public List search(Search search) { return super.search(search); } @Override public GSUser getFull(String name) { - Search search = new Search(GSUser.class); + Search search = createSearch(); search.addFilterEqual("name", name); return searchFull(search); } @@ -111,9 +109,9 @@ public GSUser merge(GSUser entity) } @Override - public boolean remove(GSUser entity) + public void remove(GSUser entity) { - return super.remove(entity); + super.remove(entity); } @Override diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/LayerDetailsDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/LayerDetailsDAOImpl.java index 10c0df1f..1d66fa8f 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/LayerDetailsDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/LayerDetailsDAOImpl.java @@ -8,13 +8,13 @@ import java.util.List; import java.util.Set; -import com.googlecode.genericdao.search.ISearch; import org.geoserver.geofence.core.dao.LayerDetailsDAO; import org.geoserver.geofence.core.model.LayerAttribute; import org.geoserver.geofence.core.model.LayerDetails; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.geoserver.geofence.core.dao.search.Search; import org.hibernate.Hibernate; import org.springframework.transaction.annotation.Transactional; @@ -25,10 +25,16 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ @Transactional(value = "geofenceTransactionManager") -public class LayerDetailsDAOImpl extends BaseDAO implements LayerDetailsDAO { +public class LayerDetailsDAOImpl + extends BaseDAO + implements LayerDetailsDAO { private static final Logger LOGGER = LogManager.getLogger(LayerDetailsDAOImpl.class); + public LayerDetailsDAOImpl() { + super(LayerDetails.class); + } + @Override public void persist(LayerDetails... entities) { for (LayerDetails details : entities) { @@ -56,7 +62,7 @@ public List findAll() { } @Override - public List search(ISearch search) { + public List search(Search search) { return super.search(search); } @@ -66,8 +72,8 @@ public LayerDetails merge(LayerDetails entity) { } @Override - public boolean remove(LayerDetails entity) { - return super.remove(entity); + public void remove(LayerDetails entity) { + super.remove(entity); } @Override diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/PrioritizableDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/PrioritizableDAOImpl.java index 05ced7d2..4d3dd355 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/PrioritizableDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/PrioritizableDAOImpl.java @@ -5,20 +5,19 @@ package org.geoserver.geofence.core.dao.impl; -import java.util.List; -import javax.persistence.Query; - -import org.geoserver.geofence.core.dao.PrioritizableDAO; import org.geoserver.geofence.core.model.enums.InsertPosition; import org.geoserver.geofence.core.model.Prioritizable; - -import com.googlecode.genericdao.search.Field; -import com.googlecode.genericdao.search.ISearch; -import com.googlecode.genericdao.search.Search; +import org.geoserver.geofence.core.dao.PrioritizableDAO; +import org.geoserver.geofence.core.dao.search.Search; +import org.geoserver.geofence.core.dao.search.Search.Field; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.List; +import javax.persistence.Query; +import org.geoserver.geofence.core.model.Identifiable; + import org.springframework.transaction.annotation.Transactional; /** @@ -27,11 +26,15 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ @Transactional(value = "geofenceTransactionManager") -public abstract class PrioritizableDAOImpl +public abstract class PrioritizableDAOImpl extends BaseDAO implements PrioritizableDAO { private static final Logger LOGGER = LogManager.getLogger(PrioritizableDAOImpl.class); + + protected PrioritizableDAOImpl(Class e) { + super(e); + } protected long persist(Class clazz, T entity, InsertPosition position) { switch(position) { @@ -39,13 +42,13 @@ protected long persist(Class clazz, T entity, InsertPosition position) { // priority is already set break; case FROM_START: - Search search = new Search(clazz); + Search search = createSearch(clazz); search.setFirstResult((int)entity.getPriority()); search.setMaxResults(1); search.addSortAsc("priority"); List list = super._search(search); if(list.isEmpty()) { // no rule found at given position: let's find out why - int count = count(new Search(clazz)); + long count = count(createSearch(clazz)); if(LOGGER.isDebugEnabled()) LOGGER.debug("No rule found at position " + entity.getPriority() + " -- rules count:"+count); @@ -54,7 +57,7 @@ protected long persist(Class clazz, T entity, InsertPosition position) { LOGGER.debug("Inserting first rule"); entity.setPriority(1); // this is the only rule so far, let's put in an arbitrary value } else { // some rules in, the requested postion is at bottom - Search s1 = new Search(clazz); + Search s1 = createSearch(clazz); s1.addField("priority", Field.OP_MAX); long maxPri = (Long)searchUnique(s1); entity.setPriority(maxPri+1); @@ -77,7 +80,7 @@ protected long persist(Class clazz, T entity, InsertPosition position) { case FROM_END: // 0 based: if set to 0, this rule will go in last position long posFromEnd = entity.getPriority(); - int count = count(new Search(clazz)); + long count = count(createSearch(clazz)); if(count == 0) { if(LOGGER.isDebugEnabled()) LOGGER.debug("Inserting first rule"); @@ -96,7 +99,7 @@ protected long persist(Class clazz, T entity, InsertPosition position) { } - Search searchEnd = new Search(clazz); + Search searchEnd = createSearch(clazz); searchEnd.setFirstResult((int)posFromStart); searchEnd.setMaxResults(1); searchEnd.addSortAsc("priority"); @@ -144,7 +147,7 @@ protected int shift(Classclazz, long priorityStart, long offset) { throw new IllegalArgumentException("Positive offset required"); } - Search search = new Search(clazz); + Search search = createSearch(clazz); search.addFilterGreaterOrEqual("priority", priorityStart); search.addFilterLessThan("priority", priorityStart + offset); if ( super.count(search) == 0 ) { @@ -176,7 +179,7 @@ public void swap(long id1, long id2) { } @Override - public List search(ISearch search) { + public List search(Search search) { return super.search(search); } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/RuleDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/RuleDAOImpl.java index e07adf3c..a8fd7f7a 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/RuleDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/RuleDAOImpl.java @@ -7,12 +7,8 @@ import java.util.List; - -import com.googlecode.genericdao.search.ISearch; -import com.googlecode.genericdao.search.Search; - import org.geoserver.geofence.core.dao.RuleDAO; -import static org.geoserver.geofence.core.dao.util.SearchUtil.*; +import static org.geoserver.geofence.core.dao.search.SearchUtil.*; import org.geoserver.geofence.core.model.Rule; import org.geoserver.geofence.core.model.enums.GrantType; @@ -20,6 +16,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.geoserver.geofence.core.dao.DuplicateKeyException; +import org.geoserver.geofence.core.dao.search.Search; import org.springframework.transaction.annotation.Transactional; @@ -33,6 +30,10 @@ public class RuleDAOImpl extends PrioritizableDAOImpl implements RuleDAO { private static final Logger LOGGER = LogManager.getLogger(RuleDAOImpl.class); + public RuleDAOImpl() { + super(Rule.class); + } + @Override public void persist(Rule... entities) throws DuplicateKeyException { @@ -82,7 +83,7 @@ public void persistInternal(Rule entity) { protected Search getDupSearch(Rule rule) { - Search search = new Search(Rule.class); + Search search = createSearch(); addSearchField(search, "username", rule.getUsername()); addSearchField(search, "rolename", rule.getRolename()); addSearchField(search, "instance", rule.getInstance()); @@ -103,7 +104,7 @@ public List findAll() { } @Override - public List search(ISearch search) { + public List search(Search search) { return super.search(search); } @@ -132,8 +133,8 @@ public Rule merge(Rule entity) { } @Override - public boolean remove(Rule entity) { - return super.remove(entity); + public void remove(Rule entity) { + super.remove(entity); } @Override diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/RuleLimitsDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/RuleLimitsDAOImpl.java index 02790df8..ea08bcb1 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/RuleLimitsDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/RuleLimitsDAOImpl.java @@ -5,16 +5,15 @@ package org.geoserver.geofence.core.dao.impl; -import java.util.List; - -import com.googlecode.genericdao.search.ISearch; - import org.geoserver.geofence.core.dao.RuleLimitsDAO; +import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.core.model.RuleLimits; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.List; + import org.springframework.transaction.annotation.Transactional; @@ -24,11 +23,16 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ @Transactional(value = "geofenceTransactionManager") -public class RuleLimitsDAOImpl extends BaseDAO implements RuleLimitsDAO +public class RuleLimitsDAOImpl // + extends BaseDAO // + implements RuleLimitsDAO { - private static final Logger LOGGER = LogManager.getLogger(RuleLimitsDAOImpl.class); + public RuleLimitsDAOImpl() { + super(RuleLimits.class); + } + @Override public void persist(RuleLimits... entities) { @@ -42,7 +46,7 @@ public List findAll() } @Override - public List search(ISearch search) + public List search(Search search) { return super.search(search); } @@ -54,9 +58,9 @@ public RuleLimits merge(RuleLimits entity) } @Override - public boolean remove(RuleLimits entity) + public void remove(RuleLimits entity) { - return super.remove(entity); + super.remove(entity); } @Override diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/UserGroupDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/UserGroupDAOImpl.java index 9805aa26..169a11f9 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/UserGroupDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/UserGroupDAOImpl.java @@ -8,10 +8,9 @@ import java.util.Date; import java.util.List; -import com.googlecode.genericdao.search.ISearch; - import org.geoserver.geofence.core.dao.UserGroupDAO; import org.geoserver.geofence.core.model.UserGroup; +import org.geoserver.geofence.core.dao.search.Search; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -31,6 +30,10 @@ public class UserGroupDAOImpl extends BaseDAO { private static final Logger LOGGER = LogManager.getLogger(UserGroupDAOImpl.class); + public UserGroupDAOImpl() { + super(UserGroup.class); + } + @Override public void persist(UserGroup... entities) { @@ -50,7 +53,7 @@ public List findAll() } @Override - public List search(ISearch search) + public List search(Search search) { return super.search(search); } @@ -62,9 +65,9 @@ public UserGroup merge(UserGroup entity) } @Override - public boolean remove(UserGroup entity) + public void remove(UserGroup entity) { - return super.remove(entity); + super.remove(entity); } @Override diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Filter.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Filter.java new file mode 100644 index 00000000..5006b678 --- /dev/null +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Filter.java @@ -0,0 +1,31 @@ +/* + */ +package org.geoserver.geofence.core.dao.search; + +import org.hibernate.criterion.Criterion; +import org.hibernate.criterion.Restrictions; + +/** + * + * @author geosol + */ +public class Filter { + + private Criterion c; + + private Filter(Criterion c) { + this.c = c; + } + + public static Filter isNull(String o) { return new Filter(Restrictions.isNull(o));} + public static Filter equal(String field, Object v) { return new Filter(Restrictions.eq(field, v));} + + public static Filter greaterOrEqual(String field, Long v) { + return new Filter(Restrictions.ge(field, v)); + } + + Criterion getCriterion() { + return c; + } + +} diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Search.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Search.java new file mode 100644 index 00000000..aa715f54 --- /dev/null +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Search.java @@ -0,0 +1,216 @@ +/* + */ +package org.geoserver.geofence.core.dao.search; + +import java.util.ArrayList; +import java.util.List; +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Fetch; +import javax.persistence.criteria.Join; +import javax.persistence.criteria.JoinType; +import javax.persistence.criteria.Order; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; + +/** + * + * @author geosol + */ +public class Search { + + Class outType; + Class rootClass; + private final EntityManager em; + private final CriteriaBuilder cb; + private CriteriaQuery q; + private Root root; + private List whereClauses = new ArrayList<>() ; + private List orderBy = new ArrayList<>() ; + + + Integer firstResult = null; + Integer maxResults = null; + + protected Search(EntityManager em, Class resultType, Class rootClass) { + this.em = em; + this.outType = resultType; + this.rootClass = rootClass; + + cb = em.getCriteriaBuilder(); + q = cb.createQuery(resultType); + + root = q.from(rootClass); + } + + protected Search(EntityManager em, Class resultType) { + this(em, resultType, resultType); + } + + public void addField(String field, Field op) { + + if(op == Field.OP_MAX) { + q.select(cb.max(root.get(field))); + } else { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + } + + public static enum Field { + OP_MAX + } + + + + public void setFirstResult(int i) { + firstResult = i; + } + + public void setMaxResults(int i) { + maxResults = i; + } + +// public void setPage(Integer page) { +// } + + public void addSortAsc(String field) { + orderBy.add(cb.asc(root.get(field))); +// c.addOrder(Order.asc(field)); + } + + public void setDistinct(boolean b) { + q.distinct(b); + } + + public Join addJoin(String field) { + return root.join(field, JoinType.LEFT); + } + + public Fetch addFetch(String field) { + return root.fetch(field, JoinType.LEFT); + } + + public Fetch addFetch(String field, Class type) { +// Fetch p = c.fetch("capital"); + return root.fetch(field, JoinType.LEFT); +// c.setFetchMode(field, FetchMode.EAGER); + } + + public void addFilterNull(String field) { + whereClauses.add(cb.isNull(root.get(field))); // )Restrictions.isNull(field)); + } + + public void addFilterNull(Join j, String field) { + whereClauses.add(cb.isNull(j.get(field))); + } + + + public void addFilterEqual(Join j, String field, Object o) { + whereClauses.add(cb.equal(j.get(field), o)); +// c.add(Restrictions.eq(field, o)); + } + + public void addFilterEqual(String field, Object o) { + whereClauses.add(cb.equal(root.get(field), o)); +// c.add(Restrictions.eq(field, o)); + } + + public void addFilterGreaterOrEqual(String field, Long value) { + whereClauses.add(cb.ge(root.get(field), value)); + +// c.add(Restrictions.ge(field, value)); + } + + public void addFilterLessThan(String field, Long value) { + whereClauses.add(cb.lt(root.get(field), value)); +// c.add(Restrictions.lt(field, value)); + } + + public void addFilterILike(String name, String like) { + whereClauses.add( + cb.like( + cb.lower(root.get(name)), + cb.lower(cb.literal("%" + like + "%") + ))); +// c.add(Restrictions.ilike(name, like)); + } + + public Predicate isNull(String field) { + return cb.isNull(root.get(field)); + } + + public Predicate isEqual(String field, Object val) { + return cb.equal(root.get(field), val); + } + + public Predicate isGE(String field, Number val) { + return cb.ge(root.get(field), val); + } + + + public void addFilterOr(Predicate f1, Predicate f2) { + whereClauses.add(cb.or(f1, f2)); +// c.add(Restrictions.or(f1.getCriterion(),f2.getCriterion())); + } + +// public void addFilter(Predicate f) { +// c.add(f.getCriterion()); +// } + + + + private void applyWhere(CriteriaQuery q) { + + switch(whereClauses.size()) { + case 0: + break; + case 1: + q.where(whereClauses.get(0)); + break; + default: + q.where(whereClauses.toArray(new Predicate[whereClauses.size()])); + + } + } + + public TypedQuery getQuery() { + applyWhere(q); + + if(! orderBy.isEmpty()) { + q.orderBy(orderBy); + } + + if(q.getSelection() == null) { + q.select(root); + } + + TypedQuery query = em.createQuery(q); + + if(firstResult != null) { + query.setFirstResult(firstResult); + } + if(maxResults != null) { + query.setMaxResults(maxResults); + } + + return query; + } + +// public TypedQuery _getCountQuery() { +// CriteriaQuery cq = cb.createQuery(Long.class); +// cq.select(cb.count(cq.from(outType))); +//// applyWhere(cq); +// return em.createQuery(cq); +// } + + public TypedQuery getCountQuery() { + applyWhere(q); +// CriteriaQuery cq = cb.createQuery(Long.class); + q.select(cb.count(root)); + return em.createQuery(q); + } + + +} \ No newline at end of file diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/SearchUtil.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/SearchUtil.java new file mode 100644 index 00000000..399897b4 --- /dev/null +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/SearchUtil.java @@ -0,0 +1,63 @@ +/* (c) 2014 Open Source Geospatial Foundation - all rights reserved + * This code is licensed under the GPL 2.0 license, available at the root + * application directory. + */ + +package org.geoserver.geofence.core.dao.search; + +import javax.persistence.criteria.Join; +import org.geoserver.geofence.core.model.IPAddressRange; + +/** + * + * @author ETj (etj at geo-solutions.it) + */ +public class SearchUtil { + + /** + * Adds a search field for finding the precise addressrange instance. + * Does NOT search for an address in a range. + */ + public static void addAddressRangeSearch(Search search, IPAddressRange addressRange) { + +// search.addFetch("addressRange", IPAddressRange.class); + Join ar = search.addJoin("addressRange"); + + if(addressRange != null ) { + // it's embedded + addSearchField(search, ar, "low", addressRange.getLow()); + addSearchField(search, ar, "high", addressRange.getHigh()); + addSearchField(search, ar, "size", addressRange.getSize()); + } else { + addSearchField(search, ar, "low", null); + addSearchField(search, ar, "high", null); + addSearchField(search, ar, "size", null); + } +// if(addressRange != null ) { +// // it's embedded +// addSearchField(search, "addressRange.low", addressRange.getLow()); +// addSearchField(search, "addressRange.high", addressRange.getHigh()); +// addSearchField(search, "addressRange.size", addressRange.getSize()); +// } else { +// addSearchField(search, "addressRange.low", null); +// addSearchField(search, "addressRange.high", null); +// addSearchField(search, "addressRange.size", null); +// } + } + + public static void addSearchField(Search search, String field, Object o) { + if ( o == null ) { + search.addFilterNull(field); + } else { + search.addFilterEqual(field, o); + } + } + + public static void addSearchField(Search search, Join j, String field, Object o) { + if ( o == null ) { + search.addFilterNull(j, field); + } else { + search.addFilterEqual(j, field, o); + } + } +} diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/util/SearchUtil.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/util/SearchUtil.java deleted file mode 100644 index 4476b8d5..00000000 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/util/SearchUtil.java +++ /dev/null @@ -1,41 +0,0 @@ -/* (c) 2014 Open Source Geospatial Foundation - all rights reserved - * This code is licensed under the GPL 2.0 license, available at the root - * application directory. - */ - -package org.geoserver.geofence.core.dao.util; - -import com.googlecode.genericdao.search.Search; -import org.geoserver.geofence.core.model.IPAddressRange; - -/** - * - * @author ETj (etj at geo-solutions.it) - */ -public class SearchUtil { - - /** - * Adds a search field for finding the precise addressrange instance. - * Does NOT search for an address in a range. - */ - public static void addAddressRangeSearch(Search search, IPAddressRange addressRange) { - if(addressRange != null ) { - // it's embedded - addSearchField(search, "addressRange.low", addressRange.getLow()); - addSearchField(search, "addressRange.high", addressRange.getHigh()); - addSearchField(search, "addressRange.size", addressRange.getSize()); - } else { - addSearchField(search, "addressRange.low", null); - addSearchField(search, "addressRange.high", null); - addSearchField(search, "addressRange.size", null); - } - } - - public static void addSearchField(Search search, String field, Object o) { - if ( o == null ) { - search.addFilterNull(field); - } else { - search.addFilterEqual(field, o); - } - } -} diff --git a/src/services/core/persistence/src/main/resources/applicationContext-geofenceDatasource.xml b/src/services/core/persistence/src/main/resources/applicationContext-geofenceDatasource.xml index 992f26ec..5bc8744f 100644 --- a/src/services/core/persistence/src/main/resources/applicationContext-geofenceDatasource.xml +++ b/src/services/core/persistence/src/main/resources/applicationContext-geofenceDatasource.xml @@ -81,26 +81,28 @@ - + + + - + - + - + @@ -109,6 +111,24 @@ + + + + + diff --git a/src/services/core/persistence/src/main/resources/applicationContext.xml b/src/services/core/persistence/src/main/resources/applicationContext.xml index 5571472b..d521eaec 100644 --- a/src/services/core/persistence/src/main/resources/applicationContext.xml +++ b/src/services/core/persistence/src/main/resources/applicationContext.xml @@ -31,49 +31,51 @@ (i.e. EntityManagerFactory). We're wiring these to the Generic DAOs using an autowire annotation in BaseDAO. --> - + - - + --> + + - + - + - + - + - + - + - + - + diff --git a/src/services/core/persistence/src/main/resources/geofence-ehcache.xml b/src/services/core/persistence/src/main/resources/geofence-ehcache.xml index 89da4aff..6a2ad13f 100644 --- a/src/services/core/persistence/src/main/resources/geofence-ehcache.xml +++ b/src/services/core/persistence/src/main/resources/geofence-ehcache.xml @@ -17,7 +17,15 @@ diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /> - + + diff --git a/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/BaseDAOTest.java b/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/BaseDAOTest.java index 83ea4a7c..9005c732 100644 --- a/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/BaseDAOTest.java +++ b/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/BaseDAOTest.java @@ -95,8 +95,8 @@ protected void removeAllUsers() { List list = userDAO.findAll(); for (GSUser item : list) { LOGGER.info("Removing " + item); - boolean ret = userDAO.remove(item); - assertTrue("User not removed", ret); + userDAO.remove(item); + assertNull("User not removed", userDAO.find(item.getId())); } assertEquals("Users have not been properly deleted", 0, userDAO.count(null)); @@ -106,8 +106,8 @@ protected void removeAllGRUsers() { List list = gfUserDAO.findAll(); for (GFUser item : list) { LOGGER.info("Removing " + item); - boolean ret = gfUserDAO.remove(item); - assertTrue("User not removed", ret); + gfUserDAO.remove(item); + assertNull("User not removed", gfUserDAO.find(item.getId())); } assertEquals("GRUsers have not been properly deleted", 0, gfUserDAO.count(null)); @@ -117,8 +117,8 @@ protected void removeAllRules() { List list = ruleDAO.findAll(); for (Rule item : list) { LOGGER.info("Removing " + item); - boolean ret = ruleDAO.remove(item); - assertTrue("Rule not removed", ret); + ruleDAO.remove(item); + assertNull("Rule not removed", ruleDAO.find(item.getId())); } assertEquals("Rules have not been properly deleted", 0, ruleDAO.count(null)); @@ -128,8 +128,8 @@ protected void removeAllUserGroups() { List list = userGroupDAO.findAll(); for (UserGroup item : list) { LOGGER.info("Removing " + item); - boolean ret = userGroupDAO.remove(item); - assertTrue("UserGroup not removed", ret); + userGroupDAO.remove(item); + assertNull("UserGroup not removed", userGroupDAO.find(item.getId())); } assertEquals("UserGroups have not been properly deleted", 0, userGroupDAO.count(null)); diff --git a/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/RuleDAOTest.java b/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/RuleDAOTest.java index a52a4213..c1d85bc1 100644 --- a/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/RuleDAOTest.java +++ b/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/RuleDAOTest.java @@ -5,8 +5,13 @@ package org.geoserver.geofence.core.dao; -import com.googlecode.genericdao.search.Search; import org.geoserver.geofence.core.model.Rule; +import org.geoserver.geofence.core.dao.search.Search; +import org.locationtech.jts.geom.MultiPolygon; +import static org.geoserver.geofence.core.dao.BaseDAOTest.ruleDAO; +import org.geoserver.geofence.core.dao.search.SearchUtil; +import org.geoserver.geofence.core.model.GSUser; +import org.geoserver.geofence.core.model.IPAddressRange; import org.geoserver.geofence.core.model.LayerAttribute; import org.geoserver.geofence.core.model.LayerDetails; import org.geoserver.geofence.core.model.IPAddressRange; @@ -496,7 +501,7 @@ public void testDupRule3Test() throws Exception { @Test public void testShift() { - assertEquals(0, ruleDAO.count(new Search(Rule.class))); + assertEquals(0, ruleDAO.count(ruleDAO.createSearch())); Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.ALLOW); Rule r2 = new Rule(20, null, null, null, null, "s2", "r2", "w2", "l2", GrantType.ALLOW); @@ -511,7 +516,7 @@ public void testShift() { int n = ruleDAO.shift(20, 5); assertEquals(3, n); - Search s = new Search(Rule.class); + Search s = ruleDAO.createSearch(); s.addFilterEqual("service", "s3"); List loaded = ruleDAO.search(s); assertEquals(1, loaded.size()); @@ -524,7 +529,7 @@ public void testShift() { @Test public void testSwap() { - assertEquals(0, ruleDAO.count(new Search(Rule.class))); + assertEquals(0, ruleDAO.count(ruleDAO.createSearch())); Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.ALLOW); Rule r2 = new Rule(20, null, null, null, null, "s2", "r2", "w2", "l2", GrantType.ALLOW); @@ -546,7 +551,7 @@ public void testPersistRulePosition() throws Exception { long id1; { - assertEquals(0, ruleDAO.count(new Search(Rule.class))); + assertEquals(0, ruleDAO.count(ruleDAO.createCountSearch())); Rule rule1 = new Rule(1000, null, null, null, null, "s", null, null, null, GrantType.ALLOW); ruleDAO.persist(rule1, InsertPosition.FROM_START); id1 = rule1.getId(); @@ -563,7 +568,7 @@ public void testPersistRulePosition() throws Exception { ruleDAO.persist(new Rule(20, null, null, null, null, "s20", null, null, null, GrantType.ALLOW)); { - assertEquals(3, ruleDAO.count(new Search(Rule.class))); + assertEquals(3, ruleDAO.count(ruleDAO.createCountSearch())); Rule rule1 = new Rule(1000, null, null, null, null, "sZ", null, null, null, GrantType.ALLOW); long pri = ruleDAO.persist(rule1, InsertPosition.FROM_START); assertEquals(21, pri); @@ -623,7 +628,7 @@ public void testIPRangeTest() throws Exception { //test search { - Search s = new Search(Rule.class); + Search s = ruleDAO.createSearch(); SearchUtil.addAddressRangeSearch(s, new IPAddressRange("10.11.0.0/16")); diff --git a/src/services/core/services-impl/pom.xml b/src/services/core/services-impl/pom.xml index f1d4f938..07b6a442 100644 --- a/src/services/core/services-impl/pom.xml +++ b/src/services/core/services-impl/pom.xml @@ -83,7 +83,6 @@ com.sun.xml.ws jaxws-ri - 2.3.2 pom @@ -140,10 +139,11 @@ --> - org.hibernatespatial - hibernate-spatial-h2-geodb + org.hibernate + hibernate-spatial test + org.opengeo geodb @@ -152,7 +152,7 @@ - + - + 4.0.0 @@ -18,6 +20,7 @@ org.geoserver.geofence geofence-rest-impl jar + GeoFence - Modules - REST services implementation @@ -50,7 +53,7 @@ com.sun.xml.ws jaxws-ri - 2.3.2 + pom @@ -63,14 +66,14 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 3.3.2 + org.apache.cxf cxf-rt-rs-extension-providers - 3.3.2 + @@ -115,10 +118,10 @@ 1.1 --> - + org.geoserver.geofence @@ -154,10 +157,11 @@ - org.hibernatespatial - hibernate-spatial-h2-geodb + org.hibernate + hibernate-spatial test + org.opengeo geodb diff --git a/src/services/pom.xml b/src/services/pom.xml index bccff5bf..6dae43ab 100644 --- a/src/services/pom.xml +++ b/src/services/pom.xml @@ -28,12 +28,13 @@ + 3.7-SNAPSHOT geofence 30-SNAPSHOT 3.3.2 - 5.3.0.4-fuse + 5.1.1.RELEASE 5.1.5.RELEASE @@ -43,7 +44,7 @@ - 1.6.1.2-fuse + @@ -61,19 +62,17 @@ 1.2.2 1.4 - - - - - - + 5.4.3.Final + + 42.1.1 + 1.3.3 1.1 4.0 1.6.1 - 2.3 + 3.1.0.2-fuse @@ -90,7 +89,6 @@ 3.8.0.GA 1.3.3-SNAPSHOT - @@ -258,9 +256,9 @@ ${log4j-version} - - - + + + dom4j @@ -271,12 +269,13 @@ org.jdom jdom - 1.1 + 1.1.3 - - - + + + + commons-lang commons-lang @@ -319,9 +318,9 @@ ${commons-logging-version} - - - + + + javax.xml.ws jaxws-api @@ -395,12 +394,18 @@ cxf-rt-rs-client ${cxf-version} + + org.apache.cxf + cxf-rt-rs-extension-providers + ${cxf-version} + - + + @@ -437,13 +442,19 @@ com.sun.xml.ws jaxws-rt - 2.3.1 + 2.3.2 + pom + + + com.sun.xml.ws + jaxws-ri + 2.3.2 pom com.sun.xml.ws rt - 2.3.1 + 2.3.2 @@ -476,6 +487,17 @@ pom import + + + org.springframework.ldap + spring-ldap-core + 2.3.2.RELEASE + + + org.springframework.ldap + spring-ldap-test + 2.3.2.RELEASE + @@ -506,9 +528,10 @@ 3.2.12 - - - + + + + org.codehaus.jettison jettison @@ -532,7 +555,7 @@ junit junit - 4.11 + 4.12 test @@ -540,13 +563,13 @@ - + - + exclude JPA1 dependency + JPA2 is needed and imported by hibernate3. javax.persistence persistence-api @@ -557,25 +580,21 @@ com.googlecode.genericdao search-jpa-hibernate ${hibernate-generic-dao-version} - + --> - - - - - org.hibernate - hibernate-entitymanager - ${hibernate-version} - + + + org.hibernate hibernate-core ${hibernate-version} + org.hibernate - hibernate-ehcache + hibernate-jcache ${hibernate-version} @@ -584,12 +603,18 @@ + org.hibernate + hibernate-spatial + ${hibernate-version} + + + - + - - - + + + org.postgis postgis-jdbc @@ -645,10 +670,10 @@ ${jts.version} - - - - + + + + @@ -684,6 +709,11 @@ gt-main ${gt-version} + + org.geotools + gt-api + ${gt-version} + org.geotools gt-referencing @@ -746,6 +776,19 @@ + + + org.apache.maven.plugins + maven-compiler-plugin + + 3.8.1 + + 11 + true + UTF-8 + + + org.apache.maven.plugins maven-resources-plugin