From 584b20f36f18539077f3eb7df1114ebe201b1887 Mon Sep 17 00:00:00 2001 From: etj Date: Tue, 23 Jul 2019 11:44:43 +0200 Subject: [PATCH 01/11] #127: changes to build w/o tests --- src/services/core/model-external/pom.xml | 21 ++- src/services/core/model/pom.xml | 20 ++- src/services/core/services-impl/pom.xml | 7 + src/services/modules/generic-api/pom.xml | 6 + src/services/modules/rest/impl/pom.xml | 17 +- src/services/pom.xml | 220 +++++++++-------------- 6 files changed, 147 insertions(+), 144 deletions(-) diff --git a/src/services/core/model-external/pom.xml b/src/services/core/model-external/pom.xml index 48a68a7e..c10ee66a 100644 --- a/src/services/core/model-external/pom.xml +++ b/src/services/core/model-external/pom.xml @@ -25,6 +25,19 @@ + + javax.annotation + javax.annotation-api + + + javax.xml.bind + jaxb-api + + + org.glassfish.jaxb + jaxb-runtime + + org.locationtech.jts jts-core @@ -51,7 +64,7 @@ org.apache.maven.plugins maven-dependency-plugin - 2.10 + 3.1.1 @@ -84,7 +97,7 @@ maven-antrun-plugin - 1.7 + 1.8 @@ -133,7 +146,7 @@ org.codehaus.mojo build-helper-maven-plugin - 1.9 + 3.0.0 @@ -155,7 +168,7 @@ true org.apache.maven.plugins maven-source-plugin - 2.3 + 3.1.0 true diff --git a/src/services/core/model/pom.xml b/src/services/core/model/pom.xml index d2bbd053..4144ca02 100644 --- a/src/services/core/model/pom.xml +++ b/src/services/core/model/pom.xml @@ -24,7 +24,20 @@ Model with JPA annotation used internally - + + + javax.annotation + javax.annotation-api + + + javax.xml.bind + jaxb-api + + + org.glassfish.jaxb + jaxb-runtime + + org.hibernate hibernate-core @@ -87,7 +100,7 @@ org.apache.maven.plugins maven-source-plugin - 3.0.0 + 3.1.0 attach-sources @@ -97,6 +110,9 @@ + diff --git a/src/services/core/services-impl/pom.xml b/src/services/core/services-impl/pom.xml index b45dd89b..f1d4f938 100644 --- a/src/services/core/services-impl/pom.xml +++ b/src/services/core/services-impl/pom.xml @@ -80,6 +80,13 @@ + + com.sun.xml.ws + jaxws-ri + 2.3.2 + pom + + dom4j dom4j diff --git a/src/services/modules/generic-api/pom.xml b/src/services/modules/generic-api/pom.xml index f7f33a4a..d6d6218a 100644 --- a/src/services/modules/generic-api/pom.xml +++ b/src/services/modules/generic-api/pom.xml @@ -32,6 +32,12 @@ + + com.sun.xml.ws + jaxws-ri + 2.3.2 + pom + javassist javassist diff --git a/src/services/modules/rest/impl/pom.xml b/src/services/modules/rest/impl/pom.xml index 31fd202e..dccb3aea 100644 --- a/src/services/modules/rest/impl/pom.xml +++ b/src/services/modules/rest/impl/pom.xml @@ -47,6 +47,13 @@ + + com.sun.xml.ws + jaxws-ri + 2.3.2 + pom + + jakarta.xml.ws @@ -56,14 +63,14 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 3.1.5 + 3.3.2 org.apache.cxf cxf-rt-rs-extension-providers - 3.1.5 + 3.3.2 @@ -99,7 +106,6 @@ net.sf.json-lib json-lib 2.4 - jar jdk15 compile @@ -108,6 +114,11 @@ xom 1.1 --> + + + com.googlecode.jaitools + jt-utils + org.geoserver.geofence diff --git a/src/services/pom.xml b/src/services/pom.xml index ecea92ae..bccff5bf 100644 --- a/src/services/pom.xml +++ b/src/services/pom.xml @@ -32,16 +32,21 @@ 30-SNAPSHOT - 3.1.5 + 3.3.2 5.3.0.4-fuse - 4.2.5.RELEASE - 4.0.4.RELEASE + 5.1.1.RELEASE + 5.1.5.RELEASE + + + + + 1.6.1.2-fuse - 1.6.2 - 1.4 + + 2.7.0 2.8.1 1.3.03 @@ -56,6 +61,13 @@ 1.2.2 1.4 + + + + + + + 1.1 4.0 @@ -68,8 +80,9 @@ 2.0.8 1.0.1 1.5.4 + 2.0 9.2.13.v20150730 - 1.2 + 2.2.3 2.2 @@ -185,24 +198,24 @@ ${geofence-version} - + org.geoserver.geofence geofence-ldap ${geofence-version} - - - - - it.geosolutions - geoserver-manager - ${gsmanager-version} - + + + + + it.geosolutions + geoserver-manager + ${gsmanager-version} + - - - + + + quartz quartz @@ -272,7 +285,7 @@ commons-io commons-io - 1.4 + 2.6 commons-httpclient @@ -309,6 +322,17 @@ + + javax.xml.ws + jaxws-api + ${jaxws-version} + + + javax.jws + jsr181-api + + + org.apache.cxf @@ -379,18 +403,20 @@ org.apache.velocity velocity - ${velocity-version} + 1.7 javax.mail mail - ${javax-mail-version} + 1.4.7 + + jakarta.xml.bind jakarta.xml.bind-api @@ -407,120 +433,53 @@ 2.3.3 - - - - - org.springframework - spring-core - ${spring-version} - - - org.springframework - spring-jmx - ${spring-support} - - - - org.springframework - spring-beans - ${spring-version} - - + - org.springframework - spring-context - ${spring-version} - + com.sun.xml.ws + jaxws-rt + 2.3.1 + pom - org.springframework - spring-tx - ${spring-version} - - - org.springframework - spring-context-support - ${spring-version} - - - org.springframework - spring-jdbc - ${spring-version} - + com.sun.xml.ws + rt + 2.3.1 - org.springframework - spring-orm - ${spring-version} - - - - org.springframework - spring-aop - ${spring-version} - - - - org.springframework - spring-web - ${spring-version} - - - - org.springframework - spring-remoting - ${spring-version} + javax.annotation + javax.annotation-api + 1.3.2 + + + + org.springframework - spring-webmvc + spring-framework-bom ${spring-version} + pom + import - - - - - org.springframework.security - spring-security-core - ${spring-security-version} - - - org.springframework - spring-expression - - - - - org.springframework.security - spring-security-taglibs - ${spring-security-version} - - - org.springframework - spring-expression - - - + + + + org.springframework.security - spring-security-acl + spring-security-bom ${spring-security-version} - - - org.springframework - spring-expression - - + pom + import - - - + + + javax.servlet servlet-api @@ -534,17 +493,17 @@ asm asm - ${asm-version} + 3.3.1 cglib cglib - ${cglib-version} + 3.2.12 cglib cglib-nodep - ${cglib-version} + 3.2.12 @@ -553,7 +512,7 @@ org.codehaus.jettison jettison - ${jettison-version} + 1.4.0 @@ -619,7 +578,6 @@ hibernate-ehcache ${hibernate-version} - @@ -649,12 +607,6 @@ ${hibernate-spatial-version} - - org.javassist - javassist - 3.23.1-GA - - @@ -667,7 +619,7 @@ org.postgis postgis-stubs - + org.postgresql @@ -794,12 +746,10 @@ - - org.apache.maven.plugins maven-resources-plugin - 2.6 + 3.1.0 UTF-8 @@ -808,7 +758,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.17 + 2.22.2 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 From ef14bf0d251e83600f8a262abbfde7e60a835e82 Mon Sep 17 00:00:00 2001 From: etj Date: Thu, 19 Dec 2019 17:30:29 -0700 Subject: [PATCH 03/11] #128: jdk11: first set of fixes in services - WIP # Conflicts: # src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java --- .../core/dao/RestrictedGenericDAO.java | 2 +- .../core/dao/impl/AdminRuleDAOImpl.java | 4 +- .../geofence/core/dao/impl/BaseDAO.java | 4 +- .../geofence/core/dao/impl/GFUserDAOImpl.java | 4 +- .../core/dao/impl/GSInstanceDAOImpl.java | 4 +- .../geofence/core/dao/impl/GSUserDAOImpl.java | 4 +- .../core/dao/impl/LayerDetailsDAOImpl.java | 4 +- .../geofence/core/dao/impl/RuleDAOImpl.java | 4 +- .../core/dao/impl/RuleLimitsDAOImpl.java | 4 +- .../core/dao/impl/UserGroupDAOImpl.java | 4 +- .../geofence/core/dao/search/Search.java | 20 +++++-- .../services/AdminRuleAdminServiceImpl.java | 21 ++++---- .../services/AuthorizationServiceImpl.java | 2 +- .../services/GFUserAdminServiceImpl.java | 6 +-- .../services/InstanceAdminServiceImpl.java | 6 +-- .../services/RuleAdminServiceImpl.java | 24 ++++----- .../services/RuleReaderServiceImpl.java | 16 +++--- .../services/UserAdminServiceImpl.java | 6 +-- .../services/UserGroupAdminServiceImpl.java | 4 +- .../geofence/services/util/FilterUtils.java | 52 ++++++++----------- 20 files changed, 101 insertions(+), 94 deletions(-) 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 cb1b731e..2dc720bd 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 @@ -27,7 +27,7 @@ public interface RestrictedGenericDAO /* extends GenericDAO 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 c00a2c12..7cc81fd5 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 @@ -128,8 +128,8 @@ public AdminRule merge(AdminRule entity) { } @Override - public void remove(AdminRule entity) { - super.remove(entity); + public boolean remove(AdminRule entity) { + return 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 3bb08c3c..a1b586f7 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 @@ -100,8 +100,8 @@ public void merge(E... entities) { } } - public void remove(E entity) { - removeById(entity.getId()); + public boolean remove(E entity) { + return removeById(entity.getId()); } public boolean removeById(Long id) { 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 8366d1ce..ed857f78 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 @@ -66,9 +66,9 @@ public GFUser merge(GFUser entity) } @Override - public void remove(GFUser entity) + public boolean remove(GFUser entity) { - super.remove(entity); + return 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 fe21032b..8885509b 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 @@ -58,9 +58,9 @@ public GSInstance merge(GSInstance entity) } @Override - public void remove(GSInstance entity) + public boolean remove(GSInstance entity) { - super.remove(entity); + return 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 c5588d2a..cb284b1c 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 @@ -109,9 +109,9 @@ public GSUser merge(GSUser entity) } @Override - public void remove(GSUser entity) + public boolean remove(GSUser entity) { - super.remove(entity); + return 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 1d66fa8f..607e7a22 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 @@ -72,8 +72,8 @@ public LayerDetails merge(LayerDetails entity) { } @Override - public void remove(LayerDetails entity) { - super.remove(entity); + public boolean remove(LayerDetails entity) { + return super.remove(entity); } @Override 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 a8fd7f7a..853353a0 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 @@ -133,8 +133,8 @@ public Rule merge(Rule entity) { } @Override - public void remove(Rule entity) { - super.remove(entity); + public boolean remove(Rule entity) { + return 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 ea08bcb1..b225b6a7 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 @@ -58,9 +58,9 @@ public RuleLimits merge(RuleLimits entity) } @Override - public void remove(RuleLimits entity) + public boolean remove(RuleLimits entity) { - super.remove(entity); + return 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 169a11f9..216b5201 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 @@ -65,9 +65,9 @@ public UserGroup merge(UserGroup entity) } @Override - public void remove(UserGroup entity) + public boolean remove(UserGroup entity) { - super.remove(entity); + return super.remove(entity); } @Override 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 index aa715f54..ca762c9e 100644 --- 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 @@ -33,6 +33,7 @@ public class Search { Integer firstResult = null; Integer maxResults = null; + Integer page = null; protected Search(EntityManager em, Class resultType, Class rootClass) { this.em = em; @@ -72,8 +73,9 @@ public void setMaxResults(int i) { maxResults = i; } -// public void setPage(Integer page) { -// } + public void setPage(int page) { + this.page = page; + } public void addSortAsc(String field) { orderBy.add(cb.asc(root.get(field))); @@ -188,14 +190,24 @@ public TypedQuery getQuery() { TypedQuery query = em.createQuery(q); + applyPagination(query); + + return query; + } + + private void applyPagination(TypedQuery query) throws IllegalStateException { if(firstResult != null) { query.setFirstResult(firstResult); } if(maxResults != null) { query.setMaxResults(maxResults); } - - return query; + if(page != null) { + if(maxResults == null) { + throw new IllegalStateException("Page set without maxresults"); + } + query.setFirstResult((page-1) * maxResults); + } } // public TypedQuery _getCountQuery() { diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java index 472aa4eb..7c6291ed 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java @@ -126,7 +126,7 @@ public void deleteRulesByUser(String username) throws NotFoundServiceEx { @Override public void deleteRulesByRole(String rolename) throws NotFoundServiceEx { Search searchCriteria = ruleDAO.createSearch(); - searchCriteria.addFilter(Filter.equal("rolename", rolename)); + searchCriteria.addFilterEqual("rolename", rolename); List list = ruleDAO.search(searchCriteria); for (AdminRule rule : list) { @@ -139,7 +139,7 @@ public void deleteRulesByRole(String rolename) throws NotFoundServiceEx { @Override public void deleteRulesByInstance(long instanceId) throws NotFoundServiceEx { Search searchCriteria = ruleDAO.createSearch(); - searchCriteria.addFilter(Filter.equal("instance.id", instanceId)); + searchCriteria.addFilterEqual("instance.id", instanceId); List list = ruleDAO.search(searchCriteria); for (AdminRule rule : list) { @@ -181,7 +181,7 @@ public ShortAdminRule getRule(RuleFilter filter) throws BadRequestServiceEx { @Override public List getRulesByPriority(long priority, Integer page, Integer entries) { Search searchCriteria = ruleDAO.createSearch(); - searchCriteria.addFilter(Filter.greaterOrEqual("priority", priority)); + searchCriteria.addFilterGreaterOrEqual("priority", priority); searchCriteria.addSortAsc("priority"); addPagingConstraints(searchCriteria, page, entries); List found = ruleDAO.search(searchCriteria); @@ -191,7 +191,7 @@ public List getRulesByPriority(long priority, Integer page, Inte @Override public ShortAdminRule getRuleByPriority(long priority) throws BadRequestServiceEx { Search searchCriteria = ruleDAO.createSearch(); - searchCriteria.addFilter(Filter.equal("priority", priority)); + searchCriteria.addFilterEqual("priority", priority); List found = ruleDAO.search(searchCriteria); if(found.isEmpty()) return null; @@ -211,7 +211,8 @@ public List getListFull(RuleFilter filter, Integer page, Integer entr } protected Search buildSearch(Integer page, Integer entries, RuleFilter filter) throws BadRequestServiceEx { - Search searchCriteria = buildRuleSearch(filter); + Search searchCriteria = ruleDAO.createSearch(); + searchCriteria = buildRuleSearch(searchCriteria, filter); addPagingConstraints(searchCriteria, page, entries); searchCriteria.addSortAsc("priority"); return searchCriteria; @@ -226,8 +227,8 @@ public long getCountAll() { public long count(RuleFilter filter) { // if(LOGGER.isDebugEnabled()) // LOGGER.debug("Counting rules: " + filter); - - Search searchCriteria = buildRuleSearch(filter); + Search searchCriteria = ruleDAO.createCountSearch(); + searchCriteria = buildRuleSearch(searchCriteria, filter); // if(LOGGER.isDebugEnabled()) // LOGGER.debug("Counting rules: " + searchCriteria); return ruleDAO.count(searchCriteria); @@ -236,8 +237,8 @@ public long count(RuleFilter filter) { // ========================================================================= // Search stuff - private Search buildRuleSearch(RuleFilter filter) { - Search searchCriteria = new Search(AdminRule.class); + private Search buildRuleSearch(Search searchCriteria, RuleFilter filter) { + if(filter != null) { addStringCriteria(searchCriteria, "username", filter.getUser()); @@ -255,7 +256,7 @@ private Search buildRuleSearch(RuleFilter filter) { //========================================================================= private Search buildFixedRuleSearch(RuleFilter filter) { - Search searchCriteria = new Search(AdminRule.class); + Search searchCriteria = ruleDAO.createSearch(); if(filter != null) { addFixedStringCriteria(searchCriteria, "username", filter.getUser()); diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java index 474a26df..390e3381 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java @@ -41,7 +41,7 @@ public AuthUser authorize(String username, String password) { } private GSUser getUserByName(String userName) { - Search search = new Search(GSUser.class); + Search search = userDAO.createSearch(); search.addFilterEqual("name", userName); List users = userDAO.search(search); if(users.size() > 1) diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/GFUserAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/GFUserAdminServiceImpl.java index 04946a91..4f217461 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/GFUserAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/GFUserAdminServiceImpl.java @@ -59,7 +59,7 @@ public GFUser get(long id) throws NotFoundServiceEx { @Override public GFUser get(String name) { - Search search = new Search(GFUser.class); + Search search = gfUserDAO.createSearch(); search.addFilterEqual("name", name); List users = gfUserDAO.search(search); @@ -86,7 +86,7 @@ public List getFullList(String nameLike, Integer page, Integer entries) throw new BadRequestServiceEx("Page and entries params should be declared together."); } - Search searchCriteria = new Search(GFUser.class); + Search searchCriteria = gfUserDAO.createSearch(); if(page != null) { searchCriteria.setMaxResults(entries); @@ -110,7 +110,7 @@ public List getList(String nameLike, Integer page, Integer entries) { @Override public long getCount(String nameLike) { - Search searchCriteria = new Search(GFUser.class); + Search searchCriteria = gfUserDAO.createCountSearch(); if (nameLike != null) { searchCriteria.addFilterILike("name", nameLike); diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/InstanceAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/InstanceAdminServiceImpl.java index 9e7323b9..e6eb9b98 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/InstanceAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/InstanceAdminServiceImpl.java @@ -60,7 +60,7 @@ public GSInstance get(long id) throws NotFoundServiceEx { @Override public GSInstance get(String name) { - Search search = new Search(GSInstance.class); + Search search = instanceDAO.createSearch(); search.addFilterEqual("name", name); List groups = instanceDAO.search(search); @@ -97,7 +97,7 @@ public List getFullList(String nameLike, Integer page, Integer entri throw new BadRequestServiceEx("Page and entries params should be declared together."); } - Search searchCriteria = new Search(GSInstance.class); + Search searchCriteria = instanceDAO.createSearch(); if(page != null) { searchCriteria.setMaxResults(entries); @@ -128,7 +128,7 @@ private List convertToShortList(List list) { @Override public long getCount(String nameLike) { - Search searchCriteria = new Search(GSInstance.class); + Search searchCriteria = instanceDAO.createCountSearch(); if (nameLike != null) { searchCriteria.addFilterILike("name", nameLike); diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java index f813e431..f9771ee7 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java @@ -144,8 +144,8 @@ public boolean delete(long id) throws NotFoundServiceEx { @Override public void deleteRulesByUser(String username) throws NotFoundServiceEx { - Search searchCriteria = new Search(Rule.class); - searchCriteria.addFilter(Filter.equal("username", username)); + Search searchCriteria = ruleDAO.createSearch(); + searchCriteria.addFilterEqual("username", username); List list = ruleDAO.search(searchCriteria); if(LOGGER.isInfoEnabled()) @@ -159,8 +159,8 @@ public void deleteRulesByUser(String username) throws NotFoundServiceEx { @Override public void deleteRulesByRole(String rolename) throws NotFoundServiceEx { - Search searchCriteria = new Search(Rule.class); - searchCriteria.addFilter(Filter.equal("rolename", rolename)); + Search searchCriteria = ruleDAO.createSearch(); + searchCriteria.addFilterEqual("rolename", rolename); List list = ruleDAO.search(searchCriteria); for (Rule rule : list) { @@ -172,8 +172,8 @@ public void deleteRulesByRole(String rolename) throws NotFoundServiceEx { @Override public void deleteRulesByInstance(long instanceId) throws NotFoundServiceEx { - Search searchCriteria = new Search(Rule.class); - searchCriteria.addFilter(Filter.equal("instance.id", instanceId)); + Search searchCriteria = ruleDAO.createSearch(); + searchCriteria.addFilterEqual("instance.id", instanceId); List list = ruleDAO.search(searchCriteria); for (Rule rule : list) { @@ -256,8 +256,8 @@ public ShortRule getRule(RuleFilter filter) throws BadRequestServiceEx { @Override public List getRulesByPriority(long priority, Integer page, Integer entries) { - Search searchCriteria = new Search(Rule.class); - searchCriteria.addFilter(Filter.greaterOrEqual("priority", priority)); + Search searchCriteria = ruleDAO.createSearch(); + searchCriteria.addFilterGreaterOrEqual("priority", priority); searchCriteria.addSortAsc("priority"); addPagingConstraints(searchCriteria, page, entries); List found = ruleDAO.search(searchCriteria); @@ -266,8 +266,8 @@ public List getRulesByPriority(long priority, Integer page, Integer e @Override public ShortRule getRuleByPriority(long priority) throws BadRequestServiceEx { - Search searchCriteria = new Search(Rule.class); - searchCriteria.addFilter(Filter.equal("priority", priority)); + Search searchCriteria = ruleDAO.createSearch(); + searchCriteria.addFilterEqual("priority", priority); List found = ruleDAO.search(searchCriteria); if(found.isEmpty()) return null; @@ -314,7 +314,7 @@ public long count(RuleFilter filter) { // Search stuff private Search buildRuleSearch(RuleFilter filter) { - Search searchCriteria = new Search(Rule.class); + Search searchCriteria = ruleDAO.createSearch(); if(filter != null) { addStringCriteria(searchCriteria, "username", filter.getUser()); @@ -333,7 +333,7 @@ private Search buildRuleSearch(RuleFilter filter) { //========================================================================= private Search buildFixedRuleSearch(RuleFilter filter) { - Search searchCriteria = new Search(Rule.class); + Search searchCriteria = ruleDAO.createSearch(); if(filter != null) { addFixedStringCriteria(searchCriteria, "username", filter.getUser()); diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java index 79a74894..356553f4 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java @@ -653,7 +653,7 @@ protected Set validateUserRoles(RuleFilter filter) throws BadRequestServ } protected List getRuleAux(RuleFilter filter, TextFilter roleFilter) { - Search searchCriteria = new Search(Rule.class); + Search searchCriteria = ruleDAO.createSearch(); searchCriteria.addSortAsc("priority"); addStringCriteria(searchCriteria, "username", filter.getUser()); addStringCriteria(searchCriteria, "rolename", roleFilter); @@ -681,14 +681,14 @@ private void addCriteria(Search searchCriteria, String fieldName, IdNameFilter f case IDVALUE: searchCriteria.addFilterOr( - Filter.isNull(fieldName), - Filter.equal(fieldName + ".id", filter.getId())); + searchCriteria.isNull(fieldName), + searchCriteria.isEqual(fieldName + ".id", filter.getId())); break; case NAMEVALUE: searchCriteria.addFilterOr( - Filter.isNull(fieldName), - Filter.equal(fieldName + ".name", filter.getName())); + searchCriteria.isNull(fieldName), + searchCriteria.isEqual(fieldName + ".name", filter.getName())); break; default: @@ -707,8 +707,8 @@ private void addStringCriteria(Search searchCriteria, String fieldName, TextFilt case NAMEVALUE: searchCriteria.addFilterOr( - Filter.isNull(fieldName), - Filter.equal(fieldName, filter.getText())); + searchCriteria.isNull(fieldName), + searchCriteria.isEqual(fieldName, filter.getText())); break; case IDVALUE: @@ -792,7 +792,7 @@ private boolean getAdminAuth(RuleFilter filter) { } protected AdminRule getAdminAuthAux(RuleFilter filter, TextFilter roleFilter) { - Search searchCriteria = new Search(AdminRule.class); + Search searchCriteria = adminRuleDAO.createSearch(); searchCriteria.addSortAsc("priority"); addStringCriteria(searchCriteria, "username", filter.getUser()); addStringCriteria(searchCriteria, "rolename", roleFilter); diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java index ce398e8e..2654d4e6 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java @@ -62,7 +62,7 @@ public GSUser get(long id) throws NotFoundServiceEx { @Override public GSUser get(String name) { - Search search = new Search(GSUser.class); + Search search = userDAO.createSearch(); search.addFilterEqual("name", name); List users = userDAO.search(search); @@ -102,7 +102,7 @@ public List getFullList(String nameLike, Integer page, Integer entries, throw new BadRequestServiceEx("Page and entries params should be declared together."); } - Search searchCriteria = new Search(GSUser.class); + Search searchCriteria = userDAO.createSearch(); if(page != null) { searchCriteria.setMaxResults(entries); @@ -130,7 +130,7 @@ public List getList(String nameLike, Integer page, Integer entries) { @Override public long getCount(String nameLike) { - Search searchCriteria = new Search(GSUser.class); + Search searchCriteria = userDAO.createCountSearch(); if (nameLike != null) { searchCriteria.addFilterILike("name", nameLike); diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java index d8fa027e..39c62b06 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java @@ -75,7 +75,7 @@ public UserGroup get(long id) throws NotFoundServiceEx { @Override public UserGroup get(String name) { - Search search = new Search(UserGroup.class); + Search search = userGroupDAO.createSearch(); search.addFilterEqual("name", name); List groups = userGroupDAO.search(search); @@ -117,7 +117,7 @@ protected Search buildCriteria(Integer page, Integer entries, String nameLike) t if ( (page != null && entries == null) || (page == null && entries != null) ) { throw new BadRequestServiceEx("Page and entries params should be declared together."); } - Search searchCriteria = new Search(UserGroup.class); + Search searchCriteria = userGroupDAO.createSearch(); if ( page != null ) { searchCriteria.setMaxResults(entries); searchCriteria.setPage(page); diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java index b236deee..ed87e0cf 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java @@ -11,8 +11,8 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.geoserver.geofence.core.dao.search.Filter; import org.geoserver.geofence.core.dao.search.Search; +import org.geoserver.geofence.core.dao.search.Filter; import org.geoserver.geofence.core.model.IPRangeProvider; import org.geoserver.geofence.services.dto.RuleFilter; import org.geoserver.geofence.services.exception.BadRequestServiceEx; @@ -110,22 +110,20 @@ public static void addCriteria(Search searchCriteria, String fieldName, RuleFilt case IDVALUE: if(filter.isIncludeDefault()) { searchCriteria.addFilterOr( - Filter.isNull(fieldName), - Filter.equal(fieldName + ".id", filter.getId())); + searchCriteria.isNull(fieldName), + searchCriteria.isEqual(fieldName + ".id", filter.getId())); } else { - searchCriteria.addFilter( - Filter.equal(fieldName + ".id", filter.getId())); + searchCriteria.addFilterEqual(fieldName + ".id", filter.getId()); } break; case NAMEVALUE: if(filter.isIncludeDefault()) { searchCriteria.addFilterOr( - Filter.isNull(fieldName), - Filter.equal(fieldName + ".name", filter.getName())); + searchCriteria.isNull(fieldName), + searchCriteria.isEqual(fieldName + ".name", filter.getName())); } else { - searchCriteria.addFilter( - Filter.equal(fieldName + ".name", filter.getName())); + searchCriteria.addFilterEqual(fieldName + ".name", filter.getName()); } break; @@ -134,7 +132,7 @@ public static void addCriteria(Search searchCriteria, String fieldName, RuleFilt } } - public static void addPagingConstraints(Search searchCriteria, Integer page, Integer entries) { + public static void addPagingConstraints(Search search, Integer page, Integer entries) { if( (page != null && entries == null) || (page ==null && entries != null)) { throw new BadRequestServiceEx("Page and entries params should be declared together."); } @@ -144,28 +142,27 @@ public static void addPagingConstraints(Search searchCriteria, Integer page, Int } if(entries != null) { - searchCriteria.setMaxResults(entries); - searchCriteria.setPage(page); + search.setMaxResults(entries); + search.setPage(page); } } - public static void addStringCriteria(Search searchCriteria, String fieldName, RuleFilter.TextFilter filter) { + public static void addStringCriteria(Search search, String fieldName, RuleFilter.TextFilter filter) { switch (filter.getType()) { case ANY: break; // no filtering case DEFAULT: - searchCriteria.addFilterNull(fieldName); + search.addFilterNull(fieldName); break; case NAMEVALUE: if(filter.isIncludeDefault()) { - searchCriteria.addFilterOr( - Filter.isNull(fieldName), - Filter.equal(fieldName, filter.getText())); + search.addFilterOr( + search.isNull(fieldName), + search.isEqual(fieldName, filter.getText())); } else { - searchCriteria.addFilter( - Filter.equal(fieldName, filter.getText())); + search.addFilterEqual(fieldName, filter.getText()); } break; @@ -184,21 +181,20 @@ public static void addStringCriteria(Search searchCriteria, String fieldName, Ru * * We're dealing with IDs here, so we'll suppose that the related object id field is called "id". */ - public static void addFixedCriteria(Search searchCriteria, String fieldName, RuleFilter.IdNameFilter filter) { + public static void addFixedCriteria(Search search, String fieldName, RuleFilter.IdNameFilter filter) { switch (filter.getType()) { case ANY: throw new BadRequestServiceEx(fieldName + " should be a fixed search and can't be ANY"); case DEFAULT: - searchCriteria.addFilterNull(fieldName); + search.addFilterNull(fieldName); break; case IDVALUE: if(filter.isIncludeDefault()) { throw new BadRequestServiceEx(fieldName + " should be a fixed search"); } else { - searchCriteria.addFilter( - Filter.equal(fieldName + ".id", filter.getId())); + search.addFilterEqual(fieldName + ".id", filter.getId()); } break; @@ -207,8 +203,7 @@ public static void addFixedCriteria(Search searchCriteria, String fieldName, Rul throw new BadRequestServiceEx(fieldName + " should be a fixed search"); } else { - searchCriteria.addFilter( - Filter.equal(fieldName + ".name", filter.getName())); + search.addFilterEqual(fieldName + ".name", filter.getName()); } break; @@ -220,21 +215,20 @@ public static void addFixedCriteria(Search searchCriteria, String fieldName, Rul - public static void addFixedStringCriteria(Search searchCriteria, String fieldName, RuleFilter.TextFilter filter) { + public static void addFixedStringCriteria(Search search, String fieldName, RuleFilter.TextFilter filter) { switch (filter.getType()) { case ANY: throw new BadRequestServiceEx(fieldName + " should be a fixed search and can't be ANY"); case DEFAULT: - searchCriteria.addFilterNull(fieldName); + search.addFilterNull(fieldName); break; case NAMEVALUE: if(filter.isIncludeDefault()) { throw new BadRequestServiceEx(fieldName + " should be a fixed search"); } else { - searchCriteria.addFilter( - Filter.equal(fieldName, filter.getText())); + search.addFilterEqual(fieldName, filter.getText()); } break; From dbb626d9c3433adb0448714877faddce63798a05 Mon Sep 17 00:00:00 2001 From: etj Date: Fri, 20 Dec 2019 13:01:53 -0700 Subject: [PATCH 04/11] #128: jdk11: services-impl modules builds - WIP # Conflicts: # src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java # src/services/pom.xml --- .../geofence/core/dao/search/Filter.java | 31 ---------- .../geofence/core/dao/search/Search.java | 43 +++++++++----- .../geofence/core/dao/search/SearchUtil.java | 6 +- src/services/core/services-impl/pom.xml | 30 +++++++--- .../services/AdminRuleAdminServiceImpl.java | 11 ++-- .../services/RuleAdminServiceImpl.java | 1 - .../services/RuleReaderServiceImpl.java | 56 +++++++++---------- .../geofence/services/util/FilterUtils.java | 20 +++---- src/services/pom.xml | 2 +- 9 files changed, 98 insertions(+), 102 deletions(-) delete mode 100644 src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Filter.java 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 deleted file mode 100644 index 5006b678..00000000 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/search/Filter.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - */ -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 index ca762c9e..2c6984d5 100644 --- 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 @@ -21,8 +21,8 @@ */ public class Search { - Class outType; - Class rootClass; + private final Class outType; + private final Class rootClass; private final EntityManager em; private final CriteriaBuilder cb; private CriteriaQuery q; @@ -30,10 +30,24 @@ public class Search { private List whereClauses = new ArrayList<>() ; private List orderBy = new ArrayList<>() ; + private Integer firstResult = null; + private Integer maxResults = null; + private Integer page = null; - Integer firstResult = null; - Integer maxResults = null; - Integer page = null; + public static class JoinInfo{ + Join join; + String field; + + public JoinInfo(Join join, String field) { + this.join = join; + this.field = field; + } + + public String getField() { + return field; + } + + } protected Search(EntityManager em, Class resultType, Class rootClass) { this.em = em; @@ -86,8 +100,8 @@ public void setDistinct(boolean b) { q.distinct(b); } - public Join addJoin(String field) { - return root.join(field, JoinType.LEFT); + public JoinInfo addJoin(String field) { + return new JoinInfo(root.join(field, JoinType.LEFT), field); } public Fetch addFetch(String field) { @@ -104,13 +118,12 @@ 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 addFilterNull(JoinInfo j, String field) { + whereClauses.add(cb.isNull(j.join.get(field))); } - - public void addFilterEqual(Join j, String field, Object o) { - whereClauses.add(cb.equal(j.get(field), o)); + public void addFilterEqual(JoinInfo j, String field, Object o) { + whereClauses.add(cb.equal(j.join.get(field), o)); // c.add(Restrictions.eq(field, o)); } @@ -146,6 +159,10 @@ public Predicate isNull(String field) { public Predicate isEqual(String field, Object val) { return cb.equal(root.get(field), val); } + + public Predicate isEqual(JoinInfo j, String field, Object val) { + return cb.equal(j.join.get(field), val); + } public Predicate isGE(String field, Number val) { return cb.ge(root.get(field), val); @@ -206,7 +223,7 @@ private void applyPagination(TypedQuery query) throws IllegalStateException { if(maxResults == null) { throw new IllegalStateException("Page set without maxresults"); } - query.setFirstResult((page-1) * maxResults); + query.setFirstResult(page * maxResults); } } 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 index 399897b4..f62c436a 100644 --- 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 @@ -5,7 +5,7 @@ package org.geoserver.geofence.core.dao.search; -import javax.persistence.criteria.Join; +import org.geoserver.geofence.core.dao.search.Search.JoinInfo; import org.geoserver.geofence.core.model.IPAddressRange; /** @@ -21,7 +21,7 @@ public class SearchUtil { public static void addAddressRangeSearch(Search search, IPAddressRange addressRange) { // search.addFetch("addressRange", IPAddressRange.class); - Join ar = search.addJoin("addressRange"); + JoinInfo ar = search.addJoin("addressRange"); if(addressRange != null ) { // it's embedded @@ -53,7 +53,7 @@ public static void addSearchField(Search search, String field, Object o) { } } - public static void addSearchField(Search search, Join j, String field, Object o) { + public static void addSearchField(Search search, JoinInfo j, String field, Object o) { if ( o == null ) { search.addFilterNull(j, field); } else { diff --git a/src/services/core/services-impl/pom.xml b/src/services/core/services-impl/pom.xml index 07b6a442..2b82957d 100644 --- a/src/services/core/services-impl/pom.xml +++ b/src/services/core/services-impl/pom.xml @@ -122,12 +122,12 @@ org.locationtech.jts jts-core - + @@ -152,7 +152,7 @@ - - - + + false + + + + diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java index 7c6291ed..f3135e3e 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java @@ -11,7 +11,6 @@ import org.geoserver.geofence.core.model.AdminRule; import org.geoserver.geofence.core.model.enums.InsertPosition; import org.geoserver.geofence.core.dao.AdminRuleDAO; -import org.geoserver.geofence.core.dao.search.Filter; import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.services.dto.RuleFilter; import org.geoserver.geofence.services.dto.ShortAdminRule; @@ -180,11 +179,11 @@ public ShortAdminRule getRule(RuleFilter filter) throws BadRequestServiceEx { @Override public List getRulesByPriority(long priority, Integer page, Integer entries) { - Search searchCriteria = ruleDAO.createSearch(); - searchCriteria.addFilterGreaterOrEqual("priority", priority); - searchCriteria.addSortAsc("priority"); - addPagingConstraints(searchCriteria, page, entries); - List found = ruleDAO.search(searchCriteria); + Search search = ruleDAO.createSearch(); + search.addFilterGreaterOrEqual("priority", priority); + search.addSortAsc("priority"); + addPagingConstraints(search, page, entries); + List found = ruleDAO.search(search); return convertToShortList(found); } diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java index f9771ee7..d767e064 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java @@ -14,7 +14,6 @@ import org.geoserver.geofence.core.model.RuleLimits; import org.geoserver.geofence.core.model.enums.GrantType; import org.geoserver.geofence.core.model.enums.InsertPosition; -import org.geoserver.geofence.core.dao.search.Filter; import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.services.dto.RuleFilter; import org.geoserver.geofence.services.dto.ShortRule; diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java index 356553f4..46e0e0c3 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleReaderServiceImpl.java @@ -20,8 +20,9 @@ import org.geoserver.geofence.core.dao.AdminRuleDAO; import org.geoserver.geofence.core.dao.LayerDetailsDAO; import org.geoserver.geofence.core.dao.RuleDAO; -import org.geoserver.geofence.core.dao.search.Filter; import org.geoserver.geofence.core.dao.search.Search; +import org.geoserver.geofence.core.dao.search.Search.JoinInfo; +import static org.geoserver.geofence.services.util.FilterUtils.filterByAddress; import org.geoserver.geofence.core.model.*; import org.geoserver.geofence.core.model.enums.AccessType; import org.geoserver.geofence.core.model.enums.AdminGrantType; @@ -46,7 +47,6 @@ import java.util.*; import java.util.Map.Entry; -import static org.geoserver.geofence.services.util.FilterUtils.filterByAddress; /** * @@ -653,42 +653,42 @@ protected Set validateUserRoles(RuleFilter filter) throws BadRequestServ } protected List getRuleAux(RuleFilter filter, TextFilter roleFilter) { - Search searchCriteria = ruleDAO.createSearch(); - searchCriteria.addSortAsc("priority"); - addStringCriteria(searchCriteria, "username", filter.getUser()); - addStringCriteria(searchCriteria, "rolename", roleFilter); - addCriteria(searchCriteria, "instance", filter.getInstance()); - addStringCriteria(searchCriteria, "service", filter.getService()); // see class' javadoc - addStringCriteria(searchCriteria, "request", filter.getRequest()); // see class' javadoc - addStringCriteria(searchCriteria, "subfield", filter.getSubfield()); - addStringCriteria(searchCriteria, "workspace", filter.getWorkspace()); - addStringCriteria(searchCriteria, "layer", filter.getLayer()); - - List found = ruleDAO.search(searchCriteria); + Search search = ruleDAO.createSearch(); + search.addSortAsc("priority"); + addStringCriteria(search, "username", filter.getUser()); + addStringCriteria(search, "rolename", roleFilter); + addCriteria(search, search.addJoin("instance"), filter.getInstance()); + addStringCriteria(search, "service", filter.getService()); // see class' javadoc + addStringCriteria(search, "request", filter.getRequest()); // see class' javadoc + addStringCriteria(search, "subfield", filter.getSubfield()); + addStringCriteria(search, "workspace", filter.getWorkspace()); + addStringCriteria(search, "layer", filter.getLayer()); + + List found = ruleDAO.search(search); found = filterByAddress(filter, found); return found; } - private void addCriteria(Search searchCriteria, String fieldName, IdNameFilter filter) { + private void addCriteria(Search searchCriteria, JoinInfo join, IdNameFilter filter) { switch (filter.getType()) { case ANY: break; // no filtering case DEFAULT: - searchCriteria.addFilterNull(fieldName); + searchCriteria.addFilterNull(join.getField()); break; case IDVALUE: searchCriteria.addFilterOr( - searchCriteria.isNull(fieldName), - searchCriteria.isEqual(fieldName + ".id", filter.getId())); + searchCriteria.isNull(join.getField()), + searchCriteria.isEqual(join, "id", filter.getId())); break; case NAMEVALUE: searchCriteria.addFilterOr( - searchCriteria.isNull(fieldName), - searchCriteria.isEqual(fieldName + ".name", filter.getName())); + searchCriteria.isNull(join.getField()), + searchCriteria.isEqual(join, "name", filter.getName())); break; default: @@ -792,17 +792,17 @@ private boolean getAdminAuth(RuleFilter filter) { } protected AdminRule getAdminAuthAux(RuleFilter filter, TextFilter roleFilter) { - Search searchCriteria = adminRuleDAO.createSearch(); - searchCriteria.addSortAsc("priority"); - addStringCriteria(searchCriteria, "username", filter.getUser()); - addStringCriteria(searchCriteria, "rolename", roleFilter); - addCriteria(searchCriteria, "instance", filter.getInstance()); - addStringCriteria(searchCriteria, "workspace", filter.getWorkspace()); + Search search = adminRuleDAO.createSearch(); + search.addSortAsc("priority"); + addStringCriteria(search, "username", filter.getUser()); + addStringCriteria(search, "rolename", roleFilter); + addCriteria(search, search.addJoin("instance"), filter.getInstance()); + addStringCriteria(search, "workspace", filter.getWorkspace()); // we only need the first match, no need to aggregate (no LIMIT rules here) - searchCriteria.setMaxResults(1); + search.setMaxResults(1); - List found = adminRuleDAO.search(searchCriteria); + List found = adminRuleDAO.search(search); found = filterByAddress(filter, found); switch(found.size()) { diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java index ed87e0cf..d8f3f3a0 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java @@ -98,32 +98,32 @@ List filterByAddress(RuleFilter filter, List rules) * * We're dealing with IDs here, so we'll suppose that the related object id field is called "id". */ - public static void addCriteria(Search searchCriteria, String fieldName, RuleFilter.IdNameFilter filter) { + public static void addCriteria(Search search, String fieldName, RuleFilter.IdNameFilter filter) { switch (filter.getType()) { case ANY: break; // no filtering case DEFAULT: - searchCriteria.addFilterNull(fieldName); + search.addFilterNull(fieldName); break; case IDVALUE: if(filter.isIncludeDefault()) { - searchCriteria.addFilterOr( - searchCriteria.isNull(fieldName), - searchCriteria.isEqual(fieldName + ".id", filter.getId())); + search.addFilterOr( + search.isNull(fieldName), + search.isEqual(fieldName + ".id", filter.getId())); } else { - searchCriteria.addFilterEqual(fieldName + ".id", filter.getId()); + search.addFilterEqual(fieldName + ".id", filter.getId()); } break; case NAMEVALUE: if(filter.isIncludeDefault()) { - searchCriteria.addFilterOr( - searchCriteria.isNull(fieldName), - searchCriteria.isEqual(fieldName + ".name", filter.getName())); + search.addFilterOr( + search.isNull(fieldName), + search.isEqual(fieldName + ".name", filter.getName())); } else { - searchCriteria.addFilterEqual(fieldName + ".name", filter.getName()); + search.addFilterEqual(fieldName + ".name", filter.getName()); } break; diff --git a/src/services/pom.xml b/src/services/pom.xml index 6dae43ab..ee194478 100644 --- a/src/services/pom.xml +++ b/src/services/pom.xml @@ -657,7 +657,7 @@ com.h2database h2 - 1.3.176 + 1.4.200 From 92069ba85ea94b8ce26e00b79897b81f234bd2f2 Mon Sep 17 00:00:00 2001 From: etj Date: Fri, 17 Jan 2020 16:17:30 +0100 Subject: [PATCH 05/11] #128: jdk11: ldap refactoring # Conflicts: # src/services/modules/ldap/pom.xml # src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/utils/LdapUtils.java --- src/services/core/persistence/pom.xml | 2 +- .../geofence/core/dao/AdminRuleDAO.java | 3 +- .../geofence/core/dao/GFUserDAO.java | 3 +- .../geofence/core/dao/GSInstanceDAO.java | 3 +- .../geofence/core/dao/GSUserDAO.java | 4 + .../core/dao/RestrictedGenericDAO.java | 6 - .../geoserver/geofence/core/dao/RuleDAO.java | 3 +- .../geofence/core/dao/SearchableDAO.java | 20 ++++ .../geofence/core/dao/UserGroupDAO.java | 9 +- .../geofence/core/dao/impl/GSUserDAOImpl.java | 67 +++++++---- .../core/dao/impl/UserGroupDAOImpl.java | 78 +++++++++---- .../geofence/core/dao/BaseDAOTest.java | 4 +- .../geofence/services/UserAdminService.java | 1 - .../services/AuthorizationServiceImpl.java | 14 +-- .../services/UserAdminServiceImpl.java | 44 +------ .../services/UserGroupAdminServiceImpl.java | 40 ++----- src/services/modules/ldap/pom.xml | 55 +++++---- .../ldap/dao/impl/GSUserDAOLdapImpl.java | 86 ++++++++++---- .../geofence/ldap/dao/impl/LDAPBaseDAO.java | 79 +++++-------- .../ldap/dao/impl/UserGroupDAOLdapImpl.java | 70 +++++++++++- .../geofence/ldap/utils/LdapUtils.java | 28 +---- .../geofence/ldap/dao/impl/BaseDAOTest.java | 107 +++++++++--------- .../ldap/dao/impl/GSUserDAOLdapImplTest.java | 27 ++--- .../dao/impl/UserGroupDAOLdapImplTest.java | 30 ++--- .../rest/impl/BaseRESTServiceImpl.java | 2 +- .../rest/impl/RESTUserServiceImpl.java | 8 +- src/services/pom.xml | 5 +- 27 files changed, 431 insertions(+), 367 deletions(-) create mode 100644 src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/SearchableDAO.java diff --git a/src/services/core/persistence/pom.xml b/src/services/core/persistence/pom.xml index 2e312910..0f6a4665 100644 --- a/src/services/core/persistence/pom.xml +++ b/src/services/core/persistence/pom.xml @@ -222,7 +222,7 @@ org.slf4j slf4j-simple - 1.7.26 + 1.7.30 test diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/AdminRuleDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/AdminRuleDAO.java index c1234a0c..3db1d224 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/AdminRuleDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/AdminRuleDAO.java @@ -14,7 +14,8 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface AdminRuleDAO extends PrioritizableDAO { +public interface AdminRuleDAO // + extends PrioritizableDAO, SearchableDAO { long persist(AdminRule entity, InsertPosition position); } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GFUserDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GFUserDAO.java index e40ee617..0ae1587c 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GFUserDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GFUserDAO.java @@ -13,5 +13,6 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface GFUserDAO extends RestrictedGenericDAO { +public interface GFUserDAO // + extends RestrictedGenericDAO, SearchableDAO { } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSInstanceDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSInstanceDAO.java index 6c5e4af0..25f5f9e8 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSInstanceDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSInstanceDAO.java @@ -13,5 +13,6 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface GSInstanceDAO extends RestrictedGenericDAO { +public interface GSInstanceDAO // + extends RestrictedGenericDAO, SearchableDAO { } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSUserDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSUserDAO.java index c2fee6f2..4ab65801 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSUserDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSUserDAO.java @@ -5,6 +5,7 @@ package org.geoserver.geofence.core.dao; +import java.util.List; import org.geoserver.geofence.core.model.GSUser; /** @@ -17,4 +18,7 @@ public interface GSUserDAO extends RestrictedGenericDAO, RegistrableDAO /** Fetch a GSUser with all of its related groups */ GSUser getFull(String name); + + List search(String nameLike, Integer page, Integer entries, boolean fetchGroups) throws IllegalArgumentException; + long countByNameLike(String nameLike); } 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 2dc720bd..a25806b3 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 @@ -19,16 +19,10 @@ */ 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 boolean removeById(Long id); - 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/RuleDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RuleDAO.java index 9cf52548..da48226b 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RuleDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RuleDAO.java @@ -14,7 +14,8 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface RuleDAO extends PrioritizableDAO { +public interface RuleDAO // + extends PrioritizableDAO, SearchableDAO { long persist(Rule entity, InsertPosition position); } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/SearchableDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/SearchableDAO.java new file mode 100644 index 00000000..8adf52c8 --- /dev/null +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/SearchableDAO.java @@ -0,0 +1,20 @@ +/* (c) 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; + +import java.util.List; +import org.geoserver.geofence.core.dao.search.Search; + +/** + * @author Emanuele Tajariol (etj at geo-solutions.it) + */ +public interface SearchableDAO { + + public Search createSearch(); + public Search createCountSearch(); + + 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/UserGroupDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/UserGroupDAO.java index 8f8149eb..528a7236 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/UserGroupDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/UserGroupDAO.java @@ -5,6 +5,7 @@ package org.geoserver.geofence.core.dao; +import java.util.List; import org.geoserver.geofence.core.model.UserGroup; /** @@ -13,5 +14,11 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface UserGroupDAO extends RestrictedGenericDAO, RegistrableDAO { +public interface UserGroupDAO // + extends RestrictedGenericDAO, RegistrableDAO { + + UserGroup get(String name); + + List search(String nameLike, Integer page, Integer entries) throws IllegalArgumentException; + long countByNameLike(String nameLike); } 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 cb284b1c..159af503 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 @@ -66,38 +66,17 @@ public GSUser getFull(String name) { */ protected GSUser searchFull(Search search) { search.addFetch("userGroups"); + // When fetching users with multiple groups, the gsusers list id multiplied for the number of groups found search.setDistinct(true); List users = super.search(search); - - // When fetching users with multiple groups, the gsusers list id multiplied for the number of groups found. - // Next there is a workaround to this problem; maybe this: - // search.setDistinct(true); - // Dunno if some annotations in the GSUser definition are wrong, some deeper checks have to be performed. - + switch(users.size()) { case 0: return null; case 1: return users.get(0); default: -// if(users.size() == users.get(0).getGroups().size()) { // normal hibernate behaviour -// if(LOGGER.isDebugEnabled()) { // perform some more consistency tests only when debugging -// for (GSUser user : users) { -// if(user.getId() != users.get(0).getId() || -// user.getGroups().size() != users.get(0).getGroups().size()) { -// LOGGER.error("Inconsistent userlist " + user); -// } -// } -// } -// -// return users.get(0); -// } else { -// LOGGER.error("Too many users in unique search " + search); -// for (GSUser user : users) { -// LOGGER.error(" " + user + " grp:"+user.getGroups().size()); -// } - throw new IllegalStateException("Found more than one user (search:"+search+")"); -// } + throw new IllegalStateException("Found more than one user (search:"+search+")"); } } @@ -120,4 +99,44 @@ public boolean removeById(Long id) return super.removeById(id); } + @Override + public List search(String nameLike, Integer page, Integer entries, boolean fetchGroups) throws IllegalArgumentException { + + if( (page != null && entries == null) || (page ==null && entries != null)) { + throw new IllegalArgumentException("Page and entries params should be declared together."); + } + + Search search = createSearch(); + + if(page != null) { + search.setMaxResults(entries); + search.setPage(page); + } + + if(fetchGroups) { + search.addFetch("userGroups"); + search.setDistinct(true); + } + + search.addSortAsc("name"); + + if (nameLike != null) { + search.addFilterILike("name", nameLike); + } + + return search(search); + } + + + @Override + public long countByNameLike(String nameLike) { + Search searchCriteria = createCountSearch(); + + if (nameLike != null) { + searchCriteria.addFilterILike("name", nameLike); + } + + return count(searchCriteria); + } + } 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 216b5201..92856891 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 @@ -2,7 +2,6 @@ * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ - package org.geoserver.geofence.core.dao.impl; import java.util.Date; @@ -11,13 +10,13 @@ import org.geoserver.geofence.core.dao.UserGroupDAO; import org.geoserver.geofence.core.model.UserGroup; import org.geoserver.geofence.core.dao.search.Search; +import org.geoserver.geofence.core.model.GSUser; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.transaction.annotation.Transactional; - /** * Public implementation of the UserGroupDAO interface * @@ -25,21 +24,19 @@ */ @Transactional(value = "geofenceTransactionManager") public class UserGroupDAOImpl extends BaseDAO - // extends GenericDAOImpl - implements UserGroupDAO -{ + // extends GenericDAOImpl + implements UserGroupDAO { + private static final Logger LOGGER = LogManager.getLogger(UserGroupDAOImpl.class); public UserGroupDAOImpl() { super(UserGroup.class); } - + @Override - public void persist(UserGroup... entities) - { + public void persist(UserGroup... entities) { Date now = new Date(); - for (UserGroup e : entities) - { + for (UserGroup e : entities) { e.setDateCreation(now); } @@ -47,35 +44,66 @@ public void persist(UserGroup... entities) } @Override - public List findAll() - { + public List findAll() { return super.findAll(); } @Override - public List search(Search search) - { - return super.search(search); - } - - @Override - public UserGroup merge(UserGroup entity) - { + public UserGroup merge(UserGroup entity) { return super.merge(entity); } @Override - public boolean remove(UserGroup entity) - { + public boolean remove(UserGroup entity) { return super.remove(entity); } @Override - public boolean removeById(Long id) - { + public boolean removeById(Long id) { return super.removeById(id); } - // ========================================================================== + @Override + public UserGroup get(String name) { + Search search = createSearch(); + search.addFilterEqual("name", name); + return (UserGroup)searchUnique(search); + } + + @Override + public List search(String nameLike, Integer page, Integer entries) throws IllegalArgumentException { + + if( (page != null && entries == null) || (page ==null && entries != null)) { + throw new IllegalArgumentException("Page and entries params should be declared together."); + } + + Search search = createSearch(); + + if(page != null) { + search.setMaxResults(entries); + search.setPage(page); + } + + search.addSortAsc("name"); + + if (nameLike != null) { + search.addFilterILike("name", nameLike); + } + + return search(search); + } + + + @Override + public long countByNameLike(String nameLike) { + Search searchCriteria = createCountSearch(); + + if (nameLike != null) { + searchCriteria.addFilterILike("name", nameLike); + } + + return count(searchCriteria); + } + } 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 9005c732..363a2dfa 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 @@ -99,7 +99,7 @@ protected void removeAllUsers() { assertNull("User not removed", userDAO.find(item.getId())); } - assertEquals("Users have not been properly deleted", 0, userDAO.count(null)); + assertEquals("Users have not been properly deleted", 0, userDAO.countByNameLike(null)); } protected void removeAllGRUsers() { @@ -132,7 +132,7 @@ protected void removeAllUserGroups() { assertNull("UserGroup not removed", userGroupDAO.find(item.getId())); } - assertEquals("UserGroups have not been properly deleted", 0, userGroupDAO.count(null)); + assertEquals("UserGroups have not been properly deleted", 0, userGroupDAO.countByNameLike(null)); } protected GSUser createUser(String base, UserGroup userGroup) { diff --git a/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/UserAdminService.java b/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/UserAdminService.java index d30ca753..2e032867 100644 --- a/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/UserAdminService.java +++ b/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/UserAdminService.java @@ -40,7 +40,6 @@ public interface UserAdminService extends GetProviderService */ @Override GSUser get(long id) throws NotFoundServiceEx; - GSUser get(String name) throws NotFoundServiceEx; GSUser getFull(String name) throws NotFoundServiceEx; long getCount(String nameLike); diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java index 390e3381..8c684424 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java @@ -7,10 +7,8 @@ import org.geoserver.geofence.core.model.GSUser; import org.geoserver.geofence.core.dao.GSUserDAO; -import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.services.dto.AuthUser; -import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -27,7 +25,7 @@ public class AuthorizationServiceImpl implements AuthorizationService { @Override public AuthUser authorize(String username, String password) { - GSUser user = getUserByName(username); + GSUser user = userDAO.getFull(username); if(user == null) { LOGGER.debug("User not found " + username); return null; @@ -40,16 +38,6 @@ public AuthUser authorize(String username, String password) { return new AuthUser(username, user.isAdmin() ? AuthUser.Role.ADMIN : AuthUser.Role.USER); } - private GSUser getUserByName(String userName) { - Search search = userDAO.createSearch(); - search.addFilterEqual("name", userName); - List users = userDAO.search(search); - if(users.size() > 1) - throw new IllegalStateException("Found more than one user with name '"+userName+"'"); - - return users.isEmpty() ? null : users.get(0); - } - public void setGsUserDAO(GSUserDAO userDAO) { this.userDAO = userDAO; } diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java index 2654d4e6..3d042f8f 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java @@ -8,7 +8,6 @@ import org.geoserver.geofence.core.model.GSUser; import org.geoserver.geofence.core.dao.GSUserDAO; -import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.services.dto.ShortUser; @@ -60,21 +59,6 @@ public GSUser get(long id) throws NotFoundServiceEx { return user; } - @Override - public GSUser get(String name) { - Search search = userDAO.createSearch(); - search.addFilterEqual("name", name); - List users = userDAO.search(search); - - if(users.isEmpty()) - throw new NotFoundServiceEx("User not found '"+ name + "'"); - else if(users.size() > 1) - throw new IllegalStateException("Found more than one user with name '"+name+"'"); - else - return users.get(0); - } - - @Override public GSUser getFull(String name) throws NotFoundServiceEx { @@ -102,25 +86,7 @@ public List getFullList(String nameLike, Integer page, Integer entries, throw new BadRequestServiceEx("Page and entries params should be declared together."); } - Search searchCriteria = userDAO.createSearch(); - - if(page != null) { - searchCriteria.setMaxResults(entries); - searchCriteria.setPage(page); - } - - if(fetchGroups) { - searchCriteria.addFetch("userGroups"); - } - - searchCriteria.addSortAsc("name"); - - if (nameLike != null) { - searchCriteria.addFilterILike("name", nameLike); - } - - List found = userDAO.search(searchCriteria); - return found; + return userDAO.search(nameLike, page, entries, fetchGroups); } @Override @@ -130,13 +96,7 @@ public List getList(String nameLike, Integer page, Integer entries) { @Override public long getCount(String nameLike) { - Search searchCriteria = userDAO.createCountSearch(); - - if (nameLike != null) { - searchCriteria.addFilterILike("name", nameLike); - } - - return userDAO.count(searchCriteria); + return userDAO.countByNameLike(nameLike); } // ========================================================================== diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java index 39c62b06..e04b29e9 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java @@ -7,9 +7,7 @@ import org.geoserver.geofence.core.model.UserGroup; import org.geoserver.geofence.core.dao.UserGroupDAO; -import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.services.dto.ShortGroup; -import org.geoserver.geofence.services.exception.BadRequestServiceEx; import org.geoserver.geofence.services.exception.NotFoundServiceEx; import java.util.List; @@ -74,18 +72,14 @@ public UserGroup get(long id) throws NotFoundServiceEx { } @Override - public UserGroup get(String name) { - Search search = userGroupDAO.createSearch(); - search.addFilterEqual("name", name); - List groups = userGroupDAO.search(search); + public UserGroup get(String name) { + UserGroup group = userGroupDAO.get(name); - if ( groups.isEmpty() ) { + if ( group == null ) { throw new NotFoundServiceEx("UserGroup not found '" + name + "'"); - } else if ( groups.size() > 1 ) { - throw new IllegalStateException("Found more than one UserGroup with name '" + name + "'"); - } else { - return groups.get(0); - } + } + + return group; } @Override @@ -102,31 +96,13 @@ public boolean delete(long id) throws NotFoundServiceEx { @Override public List getList(String nameLike, Integer page, Integer entries) { - Search searchCriteria = buildCriteria(page, entries, nameLike); - List found = userGroupDAO.search(searchCriteria); + List found = userGroupDAO.search(nameLike, page, entries); return convertToShortList(found); } @Override public long getCount(String nameLike) { - Search searchCriteria = buildCriteria(null, null, nameLike); - return userGroupDAO.count(searchCriteria); - } - - protected Search buildCriteria(Integer page, Integer entries, String nameLike) throws BadRequestServiceEx { - if ( (page != null && entries == null) || (page == null && entries != null) ) { - throw new BadRequestServiceEx("Page and entries params should be declared together."); - } - Search searchCriteria = userGroupDAO.createSearch(); - if ( page != null ) { - searchCriteria.setMaxResults(entries); - searchCriteria.setPage(page); - } - searchCriteria.addSortAsc("name"); - if ( nameLike != null ) { - searchCriteria.addFilterILike("name", nameLike); - } - return searchCriteria; + return userGroupDAO.countByNameLike(nameLike); } // ========================================================================== diff --git a/src/services/modules/ldap/pom.xml b/src/services/modules/ldap/pom.xml index 32cde06f..04d3df63 100644 --- a/src/services/modules/ldap/pom.xml +++ b/src/services/modules/ldap/pom.xml @@ -20,6 +20,10 @@ jar GeoFence - Module - LDAP Support + + 2.0.0.AM25 + + @@ -53,16 +57,9 @@ com.google.guava guava - 28.0-jre + 28.1-jre - - - @@ -86,31 +83,25 @@ org.apache.directory.server apacheds-core - 1.5.5 - test - - - org.apache.directory.server - apacheds-core-entry - 1.5.5 + ${apacheldap-version} test org.apache.directory.server apacheds-protocol-shared - 1.5.5 + ${apacheldap-version} test org.apache.directory.server apacheds-protocol-ldap - 1.5.5 + ${apacheldap-version} test org.apache.directory.server apacheds-server-jndi - 1.5.5 + ${apacheldap-version} test + + false + + + - diff --git a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImpl.java b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImpl.java index 2e610303..c166e0ff 100644 --- a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImpl.java +++ b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImpl.java @@ -7,15 +7,15 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import org.apache.commons.lang.StringUtils; 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.ldap.utils.LdapUtils; -import com.googlecode.genericdao.search.Filter; -import com.googlecode.genericdao.search.Search; /** * GSUserDAO implementation, using an LDAP server as a primary source. @@ -23,7 +23,10 @@ * @author "Mauro Bartolomeoli - mauro.bartolomeoli@geo-solutions.it" * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public class GSUserDAOLdapImpl extends LDAPBaseDAO implements GSUserDAO { + +public class GSUserDAOLdapImpl // + extends LDAPBaseDAO // + implements GSUserDAO { private UserGroupDAOLdapImpl userGroupDAOLdapImpl; @@ -52,17 +55,15 @@ public GSUserDAOLdapImpl() { * @return */ private List getGroups(GSUser user) { - Filter filter = new Filter(); - String member; - List groups; - String filterStr = null; + final String filterStr; String dn = user.getExtId(); String userName = user.getName(); + if (memberFilter != null) { - filterStr = MessageFormat.format(memberFilter, new String[] { dn, userName }); + filterStr = MessageFormat.format(memberFilter, dn, userName); } else if (StringUtils.isNotBlank(dn)) { - filter = new Filter("member", dn); + filterStr = LdapUtils.createLDAPFilterEqual("member", dn, userGroupDAOLdapImpl.getAttributesMapper()); } else { LOGGER.info("User id is null, using username '" + userName + "'"); String nameAttr = getLDAPAttribute("username"); @@ -71,19 +72,17 @@ private List getGroups(GSUser user) { if (memberSearchFilterAttr != null) { // e.g String member = nameAttr + "=" + userName; String val = memberSearchFilterAttr.split("=")[0]; // e.g get uniqueMember part - member = memberSearchFilterAttr.split("=", 2)[1]; // e.g remove uniqueMember part + String member = memberSearchFilterAttr.split("=", 2)[1]; // e.g remove uniqueMember part member = member.replace("{0}", userName); filterStr = val + '=' + member; } else { String exp = nameAttr + "=" + userName; - filter = new Filter("member", exp); + filterStr = LdapUtils.createLDAPFilterEqual("member", exp, userGroupDAOLdapImpl.getAttributesMapper()); } } - if (filterStr == null) { - groups = userGroupDAOLdapImpl.search(filter); - } else { - groups = userGroupDAOLdapImpl.search(filterStr); - } + + List groups = userGroupDAOLdapImpl.search(filterStr); + if (enableHierarchicalGroups && nestedMemberFilter != null) { for (UserGroup group : groups) { groups = addParentGroups(groups, group, 0); @@ -96,8 +95,7 @@ private List addParentGroups(List groups, UserGroup group, if (level < maxLevelGroupsSearch) { List newGroups = new ArrayList(); newGroups.addAll(groups); - String filter = MessageFormat.format(nestedMemberFilter, - new String[] { group.getExtId(), group.getName() }); + String filter = MessageFormat.format(nestedMemberFilter, group.getExtId(), group.getName()); for(UserGroup parentGroup : (List)userGroupDAOLdapImpl.search(filter)) { if (!newGroups.contains(parentGroup)) { newGroups.add(parentGroup); @@ -131,9 +129,8 @@ private GSUser fillWithGroups(GSUser user) { public GSUser searchByName(String name) { - Search search = new Search(); - search.addFilter(new Filter("username", name)); - List users = search(search); + String filter = LdapUtils.createLDAPFilterEqual("username", name, getAttributesMapper()); + List users = search(filter); if (users.isEmpty()) return null; @@ -162,4 +159,51 @@ public void setNestedMemberFilter(String nestedMemberFilter) { public void setEnableHierarchicalGroups(boolean enableHierarchicalGroups) { this.enableHierarchicalGroups = enableHierarchicalGroups; } + + @Override + public List search(String nameLike, Integer page, Integer entries, boolean fetchGroups) throws IllegalArgumentException { + + if (StringUtils.isBlank(nameLike)) { + return paginate(findAll(), entries, page); + } + + // filtering needed -- we'll perform filtering by hand, and contectually + // pagination will be evalueated, in order to save memory and time + + int firstIndex = getFirstPaginationIndex(entries, page); + int lastIndex = getLastPaginationIndex(entries, page); + + List ret = new LinkedList<>(); + int index = 0; + for (GSUser user : findAll()) { + if(user.getName().contains(nameLike)) { + if(++index > firstIndex ) { + ret.add(user); + } + + if(index >= lastIndex) { + break; + } + } + } + + return ret; + } + + @Override + public long countByNameLike(String nameLike) { + + if (StringUtils.isBlank(nameLike)) { + return findAll().size(); + } + + int cnt = 0; + for (GSUser user : findAll()) { + if(user.getName().contains(nameLike)) { + ++cnt; + } + } + + return cnt; + } } diff --git a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/LDAPBaseDAO.java b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/LDAPBaseDAO.java index 8f085cb4..1ab149bd 100644 --- a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/LDAPBaseDAO.java +++ b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/LDAPBaseDAO.java @@ -23,15 +23,12 @@ import org.geoserver.geofence.core.dao.RestrictedGenericDAO; import org.geoserver.geofence.core.model.GSUser; import org.geoserver.geofence.core.model.UserGroup; -import org.geoserver.geofence.ldap.utils.LdapUtils; import org.springframework.ldap.core.AttributesMapper; import org.springframework.ldap.core.DirContextOperations; import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.core.support.AbstractContextMapper; -import com.googlecode.genericdao.search.Filter; -import com.googlecode.genericdao.search.ISearch; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -53,7 +50,7 @@ public abstract class LDAPBaseDAO, R> implements RestrictedGenericDAO, InitializingBean { - private static final class LDAPContextMapper extends AbstractContextMapper { + protected static final class LDAPContextMapper extends AbstractContextMapper { AttributesMapper mapper; public LDAPContextMapper(AttributesMapper mapper) { @@ -135,39 +132,32 @@ public R find(Long id) return null; } - @Override - public List search(ISearch search) - { - List objects = new ArrayList<>(); - if (search.getFilters().isEmpty()) { - // no filter - return paginate(findAll(), search); - } - for (Filter filter : search.getFilters()) { - if (filter != null) { - List filteredObjects = paginate(search(filter), search); - objects.addAll(filteredObjects); - } - } - return objects; - } - - protected List paginate(List list, ISearch search) { - if (search.getMaxResults() > 0 && search.getPage() >= 0) { - List result = new ArrayList(); - int start = search.getPage() * search.getMaxResults(); - for(int index = start ; index < start + search.getMaxResults() && index < list.size(); index++) { + protected List paginate(List list, Integer entries, Integer page) { + if (entries != null && page != null && entries > 0 && page >= 0) { + List result = new ArrayList<>(entries); + int start = page * entries; + for(int index = start ; index < start + entries && index < list.size(); index++) { result.add(list.get(index)); } return result; } return list; } - - @Override - public int count(ISearch search) - { - return search(search).size(); + + protected int getFirstPaginationIndex(Integer entries, Integer page) { + if (entries != null && page != null && entries > 0 && page >= 0) { + return page * entries; + } else { + return 0; + } + } + + protected int getLastPaginationIndex(Integer entries, Integer page) { + if (entries != null && page != null && entries > 0 && page >= 0) { + return page * entries + entries; + } else { + return Integer.MAX_VALUE; + } } @Override @@ -211,28 +201,13 @@ public R lookup(String dn) /** * Search using the given filter on the LDAP server. Uses default base, filter and mapper. * - * @param base - * @param filter - * @param mapper - * @return - */ - public List search(Filter filter) - { - return search(LdapUtils.createLDAPFilter(filter, attributesMapper)); - } - - /** - * Search using the given filter on the LDAP server. Uses default base, filter and mapper. - * - * @param base - * @param filter - * @param mapper + * @param ldapFilter * @return */ - public List search(String filter) + public List search(String ldapFilter) { if(LOGGER.isTraceEnabled()) - LOGGER.trace(getClass().getSimpleName() + ": searching base:'"+searchBase+"', filter: '"+filter+"'"); + LOGGER.trace(getClass().getSimpleName() + ": searching base:'"+searchBase+"', filter: '"+ldapFilter+"'"); if(LOGGER.isInfoEnabled()) { if(dumpCnt.incrementAndGet() % cachedumpmodulo == 0) { @@ -241,7 +216,7 @@ public List search(String filter) } try { - return ldapcache.get(filter); + return ldapcache.get(ldapFilter); //return search(ldapTemplate, searchBase, filter, attributesMapper); } catch (ExecutionException ex) { LOGGER.warn("Error while getting LDAP info: " + ex.getMessage(), ex); @@ -301,6 +276,10 @@ public void setAttributesMapper(AttributesMapper attributesMapper) this.attributesMapper = attributesMapper; } + protected AttributesMapper getAttributesMapper() { + return attributesMapper; + } + /** * Sets the LDAP communication object. * diff --git a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImpl.java b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImpl.java index 3fc9714e..df2cb2c9 100644 --- a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImpl.java +++ b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImpl.java @@ -4,8 +4,12 @@ */ package org.geoserver.geofence.ldap.dao.impl; +import java.util.LinkedList; +import java.util.List; +import org.apache.commons.lang.StringUtils; import org.geoserver.geofence.core.dao.UserGroupDAO; import org.geoserver.geofence.core.model.UserGroup; +import org.geoserver.geofence.ldap.utils.LdapUtils; /** * UserGroupDAO implementation, using an LDAP server as a primary source. @@ -13,7 +17,9 @@ * @author "Mauro Bartolomeoli - mauro.bartolomeoli@geo-solutions.it" * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public class UserGroupDAOLdapImpl extends LDAPBaseDAO implements UserGroupDAO +public class UserGroupDAOLdapImpl // + extends LDAPBaseDAO // + implements UserGroupDAO { public UserGroupDAOLdapImpl() @@ -23,4 +29,66 @@ public UserGroupDAOLdapImpl() setSearchBase("ou=Groups"); setSearchFilter("objectClass=posixGroup"); } + + @Override + public UserGroup get(String name) { + + String filter = LdapUtils.createLDAPFilterEqual("groupname", name, getAttributesMapper()); + List groups = search(filter); + + if (groups.isEmpty()) + return null; + else if (groups.size() > 1) + throw new IllegalArgumentException( + "Given filter (" + name + ") returns too many groups (" + groups.size() + ")"); + else + return groups.get(0); + } + + @Override + public List search(String nameLike, Integer page, Integer entries) throws IllegalArgumentException { + + if (StringUtils.isBlank(nameLike)) { + return paginate(findAll(), entries, page); + } + + // filtering needed -- we'll perform filtering by hand, and contectually + // pagination will be evalueated, in order to save memory and time + + int firstIndex = getFirstPaginationIndex(entries, page); + int lastIndex = getLastPaginationIndex(entries, page); + + List ret = new LinkedList<>(); + int index = 0; + for (UserGroup user : findAll()) { + if(user.getName().contains(nameLike)) { + if(++index > firstIndex ) { + ret.add(user); + } + + if(index >= lastIndex) { + break; + } + } + } + + return ret; + } + + @Override + public long countByNameLike(String nameLike) { + + if (StringUtils.isBlank(nameLike)) { + return findAll().size(); + } + + int cnt = 0; + for (UserGroup user : findAll()) { + if(user.getName().contains(nameLike)) { + ++cnt; + } + } + + return cnt; + } } diff --git a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/utils/LdapUtils.java b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/utils/LdapUtils.java index 2c941106..9dd66da9 100644 --- a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/utils/LdapUtils.java +++ b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/utils/LdapUtils.java @@ -8,8 +8,6 @@ import org.springframework.ldap.core.AttributesMapper; -import com.googlecode.genericdao.search.Filter; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -20,28 +18,12 @@ public class LdapUtils { private static Logger LOGGER = LogManager.getLogger(LdapUtils.class); - - /** - * Creates and LDAP filter from the DAO search filter. Currently only "property = value" filters are supported. - * - * @param filter - * @return - */ - public static String createLDAPFilter(Filter filter, AttributesMapper mapper) + public static String createLDAPFilterEqual(String propertyName, String value, AttributesMapper mapper) { - // TODO add other filter types - if (filter.getOperator() == Filter.OP_EQUAL) { - String propertyName = filter.getProperty(); - if (mapper instanceof LdapAttributesMapper) { - propertyName = ((LdapAttributesMapper) mapper) - .getLdapAttribute(propertyName); - } - return propertyName + "=" + filter.getValue().toString(); - } else { - LOGGER.error("MISSING IMPLEMENTATION FOR " + filter); + if (mapper instanceof LdapAttributesMapper) { + propertyName = ((LdapAttributesMapper) mapper) + .getLdapAttribute(propertyName); } - return null; + return propertyName + "=" + value; } - - } diff --git a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/BaseDAOTest.java b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/BaseDAOTest.java index 402e0133..8931786b 100644 --- a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/BaseDAOTest.java +++ b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/BaseDAOTest.java @@ -1,17 +1,27 @@ -/* (c) 2014 - 2017 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.ldap.dao.impl; +import org.apache.directory.api.ldap.model.entry.DefaultEntry; +import org.apache.directory.api.ldap.model.ldif.LdifEntry; +import org.apache.directory.api.ldap.model.ldif.LdifReader; +import org.apache.directory.api.ldap.model.schema.SchemaManager; +import org.apache.directory.server.annotations.CreateLdapServer; +import org.apache.directory.server.annotations.CreateTransport; +import org.apache.directory.server.core.annotations.CreateDS; +import org.apache.directory.server.core.annotations.CreatePartition; +import org.apache.directory.server.core.api.DirectoryService; +import org.apache.directory.server.core.factory.DSAnnotationProcessor; +import org.apache.directory.server.core.integ.FrameworkRunner; +import org.apache.directory.server.factory.ServerAnnotationProcessor; +import org.apache.directory.server.ldap.LdapServer; + import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; -import org.springframework.ldap.core.LdapTemplate; -import org.springframework.ldap.core.support.LdapContextSource; import org.springframework.ldap.test.LdapTestUtils; -import org.springframework.ldap.support.LdapUtils; import org.geoserver.geofence.core.dao.GSUserDAO; import org.geoserver.geofence.core.dao.UserGroupDAO; @@ -26,90 +36,83 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; +import org.junit.runner.RunWith; /** * * @author ETj (etj at geo-solutions.it) */ -public abstract class BaseDAOTest -{ - protected final Logger LOGGER; +@RunWith(FrameworkRunner.class) +public abstract class BaseDAOTest { + + protected static Logger LOGGER; protected static GSUserDAO userDAO; protected static UserGroupDAO userGroupDAO; protected static ClassPathXmlApplicationContext ctx = null; - @Rule - public TestName name = new TestName(); + @Rule + public TestName name = new TestName(); - public BaseDAOTest() - { + public BaseDAOTest() { LOGGER = LogManager.getLogger(getClass()); synchronized (BaseDAOTest.class) { if (ctx == null) { String[] paths = { - "classpath*:applicationContext.xml", -// "applicationContext.xml", -// "applicationContext-geofence-ldap.xml" -// ,"applicationContext-test.xml" - }; + "classpath*:applicationContext.xml",}; ctx = new ClassPathXmlApplicationContext(paths); userDAO = (GSUserDAO) ctx.getBean("gsUserDAO_LDAP"); userGroupDAO = (UserGroupDAO) ctx.getBean("userGroupDAO_LDAP"); } - } } @BeforeClass - public static void setUpClass() throws Exception - { - // Start an LDAP server and import test data -// LdapTestUtils.startEmbeddedServer(10389, "", "test"); -// LdapTestUtils.startEmbeddedServer(10389, "dc=example,dc=com", "test"); - LdapTestUtils.startEmbeddedServer(10389, "dc=com", "test"); - loadData(); + @CreateLdapServer(name = "DSAlias", // + transports = {@CreateTransport(protocol = "LDAP", port = 10389)}, // + allowAnonymousAccess = true) + @CreateDS(name = "test", // + partitions = @CreatePartition(name = "example_com", suffix = "dc=example,dc=com"), // + allowAnonAccess = true) + public static void setUpClass() throws Exception { + + Logger logger = LogManager.getLogger(BaseDAOTest.class); + + DirectoryService directoryService = DSAnnotationProcessor.getDirectoryService(); + final SchemaManager schemaManager = directoryService.getSchemaManager(); + LdapServer ldapServer = ServerAnnotationProcessor.getLdapServer(directoryService); + + logger.info("Creating test entries..."); + + ClassPathResource ldif = new ClassPathResource("data.ldif"); + int entries = 0; + for (LdifEntry ldifEntry : new LdifReader(ldif.getInputStream())) { + + DefaultEntry entry = new DefaultEntry(schemaManager, ldifEntry.getEntry()); + directoryService.getAdminSession().add(entry); + ++entries; + + } + logger.info("Created " +entries + " entries "); } @AfterClass - public static void tearDownClass() throws Exception - { + public static void tearDownClass() throws Exception { LdapTestUtils.shutdownEmbeddedServer(); } @Before - public void setUp() throws Exception - { - LOGGER.info("################ Setting up -- " + getClass().getSimpleName() + ":: " + name.getMethodName() ); + public void setUp() throws Exception { +// LOGGER.info("################ Setting up -- " + getClass().getSimpleName() + ":: " + name.getMethodName()); // loadData(); - LOGGER.info("##### Ending setup for " + getClass().getSimpleName() + " ###----------------------"); - } - - protected static void loadData() throws Exception - { - // Bind to the directory - LdapContextSource contextSource = new LdapContextSource(); - contextSource.setUrl("ldap://127.0.0.1:10389"); - contextSource.setUserDn("uid=admin,ou=system"); - contextSource.setPassword("secret"); - contextSource.setPooled(false); - //contextSource.setDirObjectFactory(null); - contextSource.afterPropertiesSet(); - - // Create the Sprint LDAP template - LdapTemplate template = new LdapTemplate(contextSource); - - // Clear out any old data - and load the test data - LdapTestUtils.clearSubContexts(contextSource, LdapUtils.newLdapName("dc=example,dc=com")); - LdapTestUtils.loadLdif(contextSource, new ClassPathResource("data.ldif")); +// LOGGER.info("##### Ending setup for " + getClass().getSimpleName() + " ###----------------------"); } @Test - public void testCheckDAOs() - { + public void testCheckDAOs() { assertNotNull(userDAO); assertTrue(userDAO instanceof GSUserDAOLdapImpl); } diff --git a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImplTest.java b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImplTest.java index 1e9bc371..392c0b11 100644 --- a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImplTest.java +++ b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImplTest.java @@ -11,8 +11,6 @@ import org.junit.Test; -import com.googlecode.genericdao.search.Filter; -import com.googlecode.genericdao.search.Search; import java.util.HashSet; import java.util.Set; import org.geoserver.geofence.core.model.UserGroup; @@ -53,15 +51,13 @@ public void testGetFullByName() @Test public void testCount() { - assertTrue(userDAO.count(new Search()) > 0); + assertTrue(userDAO.countByNameLike(null) > 0); } @Test public void testSearch_admin() { - Search search = new Search(); - search.addFilter(new Filter("username", "admin")); - List users = userDAO.search(search); + List users = userDAO.search("admin", null, null, true); assertTrue(users.size() > 0); GSUser user = users.get(0); assertTrue(user.getName().length() > 0); @@ -70,18 +66,13 @@ public void testSearch_admin() @Test public void testSearchPagination() { - Search search = new Search(); - List users = userDAO.search(search); + List users = userDAO.search(null, null, null, true); assertEquals(4, users.size()); - search.setPage(0); - search.setMaxResults(3); - users = userDAO.search(search); + users = userDAO.search(null, 0, 3, true); assertEquals(3, users.size()); - search.setPage(1); - search.setMaxResults(3); - users = userDAO.search(search); + users = userDAO.search(null, 1, 3, true); assertEquals(1, users.size()); } @@ -89,12 +80,10 @@ public void testSearchPagination() @Test public void testSearch_groups() { - Search search = new Search(); - search.addFilter(new Filter("username", "destination1")); - List users = userDAO.search(search); - assertTrue(users.size() == 1); + List users = userDAO.search("destination1", null, null, true); + assertEquals(1, users.size()); GSUser user = users.get(0); - assertTrue(user.getName().equals("destination1")); + assertEquals("destination1", user.getName()); } @Test diff --git a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImplTest.java b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImplTest.java index cdfc792c..6a365aef 100644 --- a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImplTest.java +++ b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImplTest.java @@ -11,9 +11,6 @@ import org.junit.Test; -import com.googlecode.genericdao.search.Filter; -import com.googlecode.genericdao.search.Search; - import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -53,41 +50,32 @@ public void testFind() @Test public void testSearch() { - Search search = new Search(); - search.addFilter(new Filter("groupname", "adminGroup")); + assertNotNull(userGroupDAO.get("adminGroup")); - List groups = userGroupDAO.search(search); - assertTrue(groups.size() == 1); - UserGroup group = groups.get(0); - assertEquals("adminGroup", group.getName()); + List groups = userGroupDAO.search("adminGroup", null, null); + assertEquals(1, groups.size()); + assertEquals("adminGroup", groups.get(0).getName()); } @Test public void testCount() { - assertEquals(5, userGroupDAO.count(new Search())); + assertEquals(5, userGroupDAO.countByNameLike(null)); } @Test public void testSearchPagination() { - Search search = new Search(); - List groups = userGroupDAO.search(search); + List groups = userGroupDAO.search(null, null, null); assertEquals(5, groups.size()); - search.setPage(0); - search.setMaxResults(2); - groups = userGroupDAO.search(search); + groups = userGroupDAO.search(null, 0,2); assertEquals(2, groups.size()); - search.setPage(1); - search.setMaxResults(2); - groups = userGroupDAO.search(search); + groups = userGroupDAO.search(null, 1, 2); assertEquals(2, groups.size()); - search.setPage(2); - search.setMaxResults(2); - groups = userGroupDAO.search(search); + groups = userGroupDAO.search(null, 2, 2); assertEquals(1, groups.size()); } } diff --git a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/BaseRESTServiceImpl.java b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/BaseRESTServiceImpl.java index bf1753d1..829c83b5 100644 --- a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/BaseRESTServiceImpl.java +++ b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/BaseRESTServiceImpl.java @@ -63,7 +63,7 @@ protected GSUser getUser(IdName userFilter) throws BadRequestRestEx, NotFoundRes if (userFilter.getId() != null) { throw new BadRequestRestEx("Users can only be referenced by name"); } else if (userFilter.getName() != null) { - return userAdminService.get(userFilter.getName()); + return userAdminService.getFull(userFilter.getName()); } else { throw new BadRequestRestEx("Bad GSUser filter " + userFilter); } diff --git a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTUserServiceImpl.java b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTUserServiceImpl.java index def3b8ba..17ec700d 100644 --- a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTUserServiceImpl.java +++ b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTUserServiceImpl.java @@ -63,7 +63,7 @@ public Response delete(String username, boolean cascade) throws ConflictRestEx, } } - GSUser user = userAdminService.get(username); // may throw NotFoundServiceEx + GSUser user = userAdminService.getFull(username); // may throw NotFoundServiceEx if ( ! userAdminService.delete(user.getId())) { LOGGER.warn("ILLEGAL STATE -- User not found: " + user); // this should not happen @@ -104,7 +104,7 @@ public Response insert(RESTInputUser user) throws BadRequestRestEx, NotFoundRest boolean exists; // check that no user with same name exists try { - userAdminService.get(user.getName()); + userAdminService.getFull(user.getName()); exists = true; } catch (NotFoundServiceEx ex) { // well, ok, user does not exist @@ -121,7 +121,7 @@ public Response insert(RESTInputUser user) throws BadRequestRestEx, NotFoundRest try { - Set groups = new HashSet(); + Set groups = new HashSet<>(); // resolve groups List inputGroups = user.getGroups(); if ( inputGroups == null || inputGroups.isEmpty() ) { @@ -169,7 +169,7 @@ public Response insert(RESTInputUser user) throws BadRequestRestEx, NotFoundRest @Override public void update(String name, RESTInputUser user) throws BadRequestRestEx, NotFoundRestEx, InternalErrorRestEx { try { - GSUser old = userAdminService.get(name); + GSUser old = userAdminService.getFull(name); update(old.getId(), user); } catch (NotFoundServiceEx ex) { LOGGER.warn("User not found: " + name); diff --git a/src/services/pom.xml b/src/services/pom.xml index ee194478..da943e09 100644 --- a/src/services/pom.xml +++ b/src/services/pom.xml @@ -555,7 +555,7 @@ junit junit - 4.12 + 4.13 test @@ -785,7 +785,8 @@ 11 true - UTF-8 + UTF-8 + true From fe5b075ccdf6b2abf8c29b0116d705fb4a81ed9d Mon Sep 17 00:00:00 2001 From: etj Date: Fri, 17 Jan 2020 18:36:09 +0100 Subject: [PATCH 06/11] #128: jdk11: various fixes (webtest, rest, ...) # Conflicts: # src/services/core/webtest/pom.xml # src/services/core/webtest/src/main/resources/log4j.xml # src/services/core/webtest/src/main/webapp/WEB-INF/web.xml # src/services/modules/rest/test/pom.xml --- .../services/AdminRuleAdminServiceImpl.java | 26 +- .../services/RuleAdminServiceImpl.java | 43 ++-- .../geofence/services/util/FilterUtils.java | 35 ++- src/services/core/webtest/pom.xml | 213 +++++++++++------ .../webtest/src/main/webapp/WEB-INF/web.xml | 4 +- src/services/modules/rest/test/pom.xml | 222 +++++++++--------- .../rest/test/src/main/webapp/WEB-INF/web.xml | 4 +- 7 files changed, 306 insertions(+), 241 deletions(-) diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java index f3135e3e..056e5dc5 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AdminRuleAdminServiceImpl.java @@ -236,36 +236,34 @@ public long count(RuleFilter filter) { // ========================================================================= // Search stuff - private Search buildRuleSearch(Search searchCriteria, RuleFilter filter) { + private Search buildRuleSearch(Search search, RuleFilter filter) { if(filter != null) { - addStringCriteria(searchCriteria, "username", filter.getUser()); - addStringCriteria(searchCriteria, "rolename", filter.getRole()); - addCriteria(searchCriteria, "instance", filter.getInstance()); + addStringCriteria(search, "username", filter.getUser()); + addStringCriteria(search, "rolename", filter.getRole()); + addCriteria(search, search.addJoin("instance"), filter.getInstance()); - addStringCriteria(searchCriteria, "workspace", filter.getWorkspace()); + addStringCriteria(search, "workspace", filter.getWorkspace()); } - return searchCriteria; + return search; } - - //========================================================================= private Search buildFixedRuleSearch(RuleFilter filter) { - Search searchCriteria = ruleDAO.createSearch(); + Search search = ruleDAO.createSearch(); if(filter != null) { - addFixedStringCriteria(searchCriteria, "username", filter.getUser()); - addFixedStringCriteria(searchCriteria, "rolename", filter.getRole()); - addFixedCriteria(searchCriteria, "instance", filter.getInstance()); + addFixedStringCriteria(search, "username", filter.getUser()); + addFixedStringCriteria(search, "rolename", filter.getRole()); + addFixedCriteria(search, search.addJoin("instance"), filter.getInstance()); - addFixedStringCriteria(searchCriteria, "workspace", filter.getWorkspace()); + addFixedStringCriteria(search, "workspace", filter.getWorkspace()); } - return searchCriteria; + return search; } // ========================================================================== diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java index d767e064..355e5c32 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/RuleAdminServiceImpl.java @@ -172,7 +172,8 @@ public void deleteRulesByRole(String rolename) throws NotFoundServiceEx { @Override public void deleteRulesByInstance(long instanceId) throws NotFoundServiceEx { Search searchCriteria = ruleDAO.createSearch(); - searchCriteria.addFilterEqual("instance.id", instanceId); + Search.JoinInfo instance = searchCriteria.addJoin("instance"); + searchCriteria.addFilterEqual(instance, "id", instanceId); List list = ruleDAO.search(searchCriteria); for (Rule rule : list) { @@ -313,39 +314,39 @@ public long count(RuleFilter filter) { // Search stuff private Search buildRuleSearch(RuleFilter filter) { - Search searchCriteria = ruleDAO.createSearch(); + Search search = ruleDAO.createSearch(); if(filter != null) { - addStringCriteria(searchCriteria, "username", filter.getUser()); - addStringCriteria(searchCriteria, "rolename", filter.getRole()); - addCriteria(searchCriteria, "instance", filter.getInstance()); - - addStringCriteria(searchCriteria, "service", filter.getService()); // see class' javadoc - addStringCriteria(searchCriteria, "request", filter.getRequest()); // see class' javadoc - addStringCriteria(searchCriteria, "workspace", filter.getWorkspace()); - addStringCriteria(searchCriteria, "layer", filter.getLayer()); + addStringCriteria(search, "username", filter.getUser()); + addStringCriteria(search, "rolename", filter.getRole()); + addCriteria(search, search.addJoin("instance"), filter.getInstance()); + + addStringCriteria(search, "service", filter.getService()); // see class' javadoc + addStringCriteria(search, "request", filter.getRequest()); // see class' javadoc + addStringCriteria(search, "workspace", filter.getWorkspace()); + addStringCriteria(search, "layer", filter.getLayer()); } - return searchCriteria; + return search; } //========================================================================= private Search buildFixedRuleSearch(RuleFilter filter) { - Search searchCriteria = ruleDAO.createSearch(); + Search search = ruleDAO.createSearch(); if(filter != null) { - addFixedStringCriteria(searchCriteria, "username", filter.getUser()); - addFixedStringCriteria(searchCriteria, "rolename", filter.getRole()); - addFixedCriteria(searchCriteria, "instance", filter.getInstance()); - - addFixedStringCriteria(searchCriteria, "service", filter.getService()); // see class' javadoc - addFixedStringCriteria(searchCriteria, "request", filter.getRequest()); // see class' javadoc - addFixedStringCriteria(searchCriteria, "workspace", filter.getWorkspace()); - addFixedStringCriteria(searchCriteria, "layer", filter.getLayer()); + addFixedStringCriteria(search, "username", filter.getUser()); + addFixedStringCriteria(search, "rolename", filter.getRole()); + addFixedCriteria(search, search.addJoin("instance"), filter.getInstance()); + + addFixedStringCriteria(search, "service", filter.getService()); // see class' javadoc + addFixedStringCriteria(search, "request", filter.getRequest()); // see class' javadoc + addFixedStringCriteria(search, "workspace", filter.getWorkspace()); + addFixedStringCriteria(search, "layer", filter.getLayer()); } - return searchCriteria; + return search; } diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java index d8f3f3a0..f03b55e0 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/util/FilterUtils.java @@ -98,32 +98,32 @@ List filterByAddress(RuleFilter filter, List rules) * * We're dealing with IDs here, so we'll suppose that the related object id field is called "id". */ - public static void addCriteria(Search search, String fieldName, RuleFilter.IdNameFilter filter) { + public static void addCriteria(Search search, Search.JoinInfo join, RuleFilter.IdNameFilter filter) { switch (filter.getType()) { case ANY: break; // no filtering case DEFAULT: - search.addFilterNull(fieldName); + search.addFilterNull(join.getField()); break; case IDVALUE: if(filter.isIncludeDefault()) { search.addFilterOr( - search.isNull(fieldName), - search.isEqual(fieldName + ".id", filter.getId())); + search.isNull(join.getField()), + search.isEqual(join, "id", filter.getId())); } else { - search.addFilterEqual(fieldName + ".id", filter.getId()); + search.addFilterEqual(join , "id", filter.getId()); } break; case NAMEVALUE: if(filter.isIncludeDefault()) { search.addFilterOr( - search.isNull(fieldName), - search.isEqual(fieldName + ".name", filter.getName())); + search.isNull(join.getField()), + search.isEqual(join, "name", filter.getName())); } else { - search.addFilterEqual(fieldName + ".name", filter.getName()); + search.addFilterEqual(join, "name", filter.getName()); } break; @@ -173,37 +173,34 @@ public static void addStringCriteria(Search search, String fieldName, RuleFilter } - - - /** * Add criteria for searching. * * We're dealing with IDs here, so we'll suppose that the related object id field is called "id". */ - public static void addFixedCriteria(Search search, String fieldName, RuleFilter.IdNameFilter filter) { + public static void addFixedCriteria(Search search, Search.JoinInfo join, RuleFilter.IdNameFilter filter) { switch (filter.getType()) { case ANY: - throw new BadRequestServiceEx(fieldName + " should be a fixed search and can't be ANY"); + throw new BadRequestServiceEx(join.getField() + " should be a fixed search and can't be ANY"); case DEFAULT: - search.addFilterNull(fieldName); + search.addFilterNull(join.getField()); break; case IDVALUE: if(filter.isIncludeDefault()) { - throw new BadRequestServiceEx(fieldName + " should be a fixed search"); + throw new BadRequestServiceEx(join.getField() + " should be a fixed search"); } else { - search.addFilterEqual(fieldName + ".id", filter.getId()); + search.addFilterEqual(join, "id", filter.getId()); } break; case NAMEVALUE: if(filter.isIncludeDefault()) { - throw new BadRequestServiceEx(fieldName + " should be a fixed search"); + throw new BadRequestServiceEx(join.getField() + " should be a fixed search"); } else { - search.addFilterEqual(fieldName + ".name", filter.getName()); + search.addFilterEqual(join, "name", filter.getName()); } break; @@ -213,8 +210,6 @@ public static void addFixedCriteria(Search search, String fieldName, RuleFilter. } - - public static void addFixedStringCriteria(Search search, String fieldName, RuleFilter.TextFilter filter) { switch (filter.getType()) { case ANY: diff --git a/src/services/core/webtest/pom.xml b/src/services/core/webtest/pom.xml index fe187a47..e90c034c 100644 --- a/src/services/core/webtest/pom.xml +++ b/src/services/core/webtest/pom.xml @@ -6,7 +6,7 @@ */ --> - 4.0.0 + 4.0.0 org.geoserver.geofence @@ -15,24 +15,24 @@ org.geoserver.geofence - geofence-webtest - war + geofence-webtest + war - GeoFence - Core - Web Test Module + GeoFence - Core - Web Test Module - - - Emanuele Tajariol - ETj - GeoSolutions - - + + + Emanuele Tajariol + ETj + GeoSolutions + + - - UTF-8 - + + UTF-8 + - + @@ -57,6 +57,14 @@ geofence-services-impl + + + + + org.hibernate + hibernate-spatial + + @@ -70,7 +78,7 @@ - + @@ -79,14 +87,19 @@ - - + + org.apache.logging.log4j log4j-core + + org.slf4j + slf4j-simple + + @@ -94,13 +107,21 @@ org.codehaus.jettison jettison - + + + + javax.servlet + javax.servlet-api + 3.1.0 provided - - + - @@ -132,7 +154,7 @@ org.apache.cxf cxf-rt-frontend-jaxrs - + org.apache.cxf @@ -153,6 +175,13 @@ + + org.springframework spring-beans @@ -165,34 +194,35 @@ org.springframework spring-core - - org.springframework - spring-aop - - - org.springframework - spring-tx - - - - org.springframework - spring-orm - - - org.springframework - spring-jdbc - - - org.springframework - spring-web - - - org.springframework - spring-webmvc - + + org.springframework + spring-aop + + + org.springframework + spring-tx + + + + org.springframework + spring-orm + + + org.springframework + spring-jdbc + + + org.springframework + spring-web + + + org.springframework + spring-webmvc + + @@ -203,14 +233,51 @@ test - + + + + + + + + + + + + junit + junit + test + + + postgis - org.hibernatespatial + org.hibernate hibernate-spatial-postgis @@ -222,7 +289,7 @@ - org.hibernatespatial + org.hibernate hibernate-spatial-h2-geodb @@ -242,30 +309,28 @@ org.apache.maven.plugins maven-war-plugin - 2.4 + 3.2.3 - - - org.mortbay.jetty - maven-jetty-plugin - 6.1.20 - - - - /geofence - - - - 9191 - 60000 - - - manual - - + + org.eclipse.jetty + jetty-maven-plugin + 9.4.25.v20191220 + + + + + /geofence + + + 9191 + 60000 + + + + diff --git a/src/services/core/webtest/src/main/webapp/WEB-INF/web.xml b/src/services/core/webtest/src/main/webapp/WEB-INF/web.xml index 2ad4a673..a25ce74e 100755 --- a/src/services/core/webtest/src/main/webapp/WEB-INF/web.xml +++ b/src/services/core/webtest/src/main/webapp/WEB-INF/web.xml @@ -15,9 +15,7 @@ contextConfigLocation - - classpath*:applicationContext.xml - + classpath*:applicationContext.xml diff --git a/src/services/modules/rest/test/pom.xml b/src/services/modules/rest/test/pom.xml index 4b909b2d..bf6e6a57 100644 --- a/src/services/modules/rest/test/pom.xml +++ b/src/services/modules/rest/test/pom.xml @@ -17,23 +17,23 @@ org.geoserver.geofence geofence-rest-test - war + war GeoFence - Modules - REST services test - - - Emanuele Tajariol - ETj - GeoSolutions - - + + + Emanuele Tajariol + ETj + GeoSolutions + + - - UTF-8 - + + UTF-8 + - + @@ -68,6 +68,13 @@ geofence-rest-impl + + + + org.hibernate + hibernate-spatial + + @@ -81,7 +88,7 @@ - + @@ -107,11 +114,11 @@ javax.servlet - servlet-api + javax.servlet-api provided - - + - - + + org.springframework spring-beans @@ -183,61 +195,60 @@ org.springframework spring-core - - org.springframework - spring-aop - - - org.springframework - spring-tx - - - - org.springframework - spring-orm - - - org.springframework - spring-jdbc - - - org.springframework - spring-web - - + + org.springframework + spring-aop + + + org.springframework + spring-tx + + + + org.springframework + spring-orm + + + org.springframework + spring-jdbc + + + org.springframework + spring-web + + - - + + - - junit - junit - 4.7 - test - + + junit + junit + test + @@ -246,7 +257,7 @@ postgis - org.hibernatespatial + org.hibernate hibernate-spatial-postgis @@ -258,7 +269,7 @@ - org.hibernatespatial + org.hibernate hibernate-spatial-h2-geodb @@ -269,46 +280,43 @@ - - - + - - org.apache.maven.plugins - maven-war-plugin - 2.4 - - - + - - - org.mortbay.jetty - maven-jetty-plugin - 6.1.26 - - - - /geofence - - - - 9191 - 60000 - - - manual + + org.apache.maven.plugins + maven-war-plugin + 2.4 + + + + + + org.eclipse.jetty + jetty-maven-plugin + 9.4.25.v20191220 + + + 9966 jetty-stop 10 + + + /geofence + + + 9191 + 60000 + + + + - - - - - + diff --git a/src/services/modules/rest/test/src/main/webapp/WEB-INF/web.xml b/src/services/modules/rest/test/src/main/webapp/WEB-INF/web.xml index bfbde363..60112607 100755 --- a/src/services/modules/rest/test/src/main/webapp/WEB-INF/web.xml +++ b/src/services/modules/rest/test/src/main/webapp/WEB-INF/web.xml @@ -27,9 +27,9 @@ --> - + org.springframework.web.context.ContextLoaderListener From 545f8390f13be1fd77a0dc7ec1d4e97b6b58869e Mon Sep 17 00:00:00 2001 From: etj Date: Tue, 12 Mar 2024 17:49:18 +0100 Subject: [PATCH 07/11] #128: jdk11: fixes to make modules build --- src/pom.xml | 1 - src/services/core/model-external/pom.xml | 38 +++--- src/services/core/model/pom.xml | 37 ++--- .../geofence/core/model/util/EWKTParser.java | 35 +++++ .../geofence/core/dao/RuleDAOTest.java | 7 +- .../geofence/services/dto/AccessInfo.java | 2 +- src/services/core/services-impl/pom.xml | 24 +--- .../services/RuleReaderServiceImpl.java | 5 +- .../geofence/services/util/FilterUtils.java | 1 - .../services/RuleAdminServiceImplTest.java | 66 ++++----- .../services/RuleReaderCatalogModeTest.java | 16 +-- .../services/RuleReaderServiceImplTest.java | 8 +- .../RuleReaderServiceImpl_GeomTest.java | 18 +-- src/services/core/webtest/pom.xml | 8 +- src/services/modules/ldap/pom.xml | 2 +- src/services/modules/rest/impl/pom.xml | 2 +- src/services/modules/rest/test/pom.xml | 4 +- src/services/pom.xml | 127 +++++++++++++----- src/services/webapp/pom.xml | 14 +- 19 files changed, 239 insertions(+), 176 deletions(-) create mode 100644 src/services/core/model/src/main/java/org/geoserver/geofence/core/model/util/EWKTParser.java diff --git a/src/pom.xml b/src/pom.xml index 0c30489d..8215a45c 100644 --- a/src/pom.xml +++ b/src/pom.xml @@ -21,7 +21,6 @@ 8 3.7-SNAPSHOT 3.6.9.Final - 1.1.0 1.1.3.2 42.2.18 1.3.3 diff --git a/src/services/core/model-external/pom.xml b/src/services/core/model-external/pom.xml index 3b32589d..6e85cd17 100644 --- a/src/services/core/model-external/pom.xml +++ b/src/services/core/model-external/pom.xml @@ -4,8 +4,6 @@ * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ - - --> @@ -29,29 +27,37 @@ javax.annotation javax.annotation-api + + + javax.xml.bind + jaxb-api + + + org.glassfish.jaxb + jaxb-runtime + + org.locationtech.jts jts-core - - jakarta.xml.bind - jakarta.xml.bind-api - - - org.glassfish.jaxb - jaxb-runtime - - junit junit @@ -97,7 +103,7 @@ maven-antrun-plugin - 1.8 + 3.1.0 @@ -153,7 +159,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + 3.5.0 diff --git a/src/services/core/model/pom.xml b/src/services/core/model/pom.xml index 005353c8..44392473 100644 --- a/src/services/core/model/pom.xml +++ b/src/services/core/model/pom.xml @@ -29,19 +29,28 @@ javax.annotation javax.annotation-api - - - javax.xml.bind - jaxb-api - + + + javax.xml.bind + jaxb-api + + + org.glassfish.jaxb + jaxb-runtime + + + org.hibernate @@ -61,14 +70,6 @@ - - jakarta.xml.bind - jakarta.xml.bind-api - - - org.glassfish.jaxb - jaxb-runtime - org.locationtech.jts jts-core diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/util/EWKTParser.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/util/EWKTParser.java new file mode 100644 index 00000000..1e9427d0 --- /dev/null +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/util/EWKTParser.java @@ -0,0 +1,35 @@ +/* (c) 2024 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.model.util; + +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.io.ParseException; +import org.locationtech.jts.io.WKTReader; + +/** + * + * @author etj + */ +public class EWKTParser { + + static public Geometry parse(String wkt) throws ParseException { + if (wkt == null) { + return null; + } + + WKTReader reader = new WKTReader(); + Geometry result; + if (wkt.startsWith("SRID=")) { + String[] areaAr = wkt.split(";"); + String srid = areaAr[0].split("=")[1]; + result = reader.read(areaAr[1]); + result.setSRID(Integer.valueOf(srid)); + } else { + result = reader.read(wkt); + result.setSRID(4326); + } + return result; + } +} 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 c1d85bc1..2866db1c 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 @@ -7,19 +7,14 @@ 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; import org.geoserver.geofence.core.model.GSUser; import org.geoserver.geofence.core.model.enums.SpatialFilterType; -import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.MultiPolygon; -import org.geoserver.geofence.core.dao.util.SearchUtil; +import org.geoserver.geofence.core.dao.search.SearchUtil; import org.geoserver.geofence.core.model.enums.AccessType; import org.geoserver.geofence.core.model.enums.GrantType; import org.geoserver.geofence.core.model.enums.InsertPosition; diff --git a/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/AccessInfo.java b/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/AccessInfo.java index 07e3d7c4..cb56d410 100644 --- a/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/AccessInfo.java +++ b/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/AccessInfo.java @@ -158,7 +158,7 @@ public String toString() { sb.append(" cqlW:").append(cqlFilterWrite); } if (areaWkt != null) { - sb.append(" areaWkt:defined"); + sb.append(" areaWkt:").append(areaWkt.substring(0, 8)).append("..."); } if (catalogMode != null) { sb.append(" cmode:").append(catalogMode); diff --git a/src/services/core/services-impl/pom.xml b/src/services/core/services-impl/pom.xml index 2b82957d..d562a912 100644 --- a/src/services/core/services-impl/pom.xml +++ b/src/services/core/services-impl/pom.xml @@ -151,28 +151,6 @@ test - - - - - javax.persistence - persistence-api - - - - - com.googlecode.genericdao - search-jpa-hibernate - --> - @@ -272,7 +272,7 @@ - + geofence-web-test diff --git a/src/services/modules/ldap/pom.xml b/src/services/modules/ldap/pom.xml index 04d3df63..22245c32 100644 --- a/src/services/modules/ldap/pom.xml +++ b/src/services/modules/ldap/pom.xml @@ -111,7 +111,7 @@ org.apache.directory.server apacheds-core-avl - 1.5.7 + ${apacheldap-version} test diff --git a/src/services/modules/rest/impl/pom.xml b/src/services/modules/rest/impl/pom.xml index 0dc53723..2e7224d4 100644 --- a/src/services/modules/rest/impl/pom.xml +++ b/src/services/modules/rest/impl/pom.xml @@ -152,7 +152,7 @@ javax.servlet - servlet-api + javax.servlet-api test diff --git a/src/services/modules/rest/test/pom.xml b/src/services/modules/rest/test/pom.xml index bf6e6a57..4249237d 100644 --- a/src/services/modules/rest/test/pom.xml +++ b/src/services/modules/rest/test/pom.xml @@ -252,7 +252,7 @@ - + diff --git a/src/services/pom.xml b/src/services/pom.xml index da943e09..d544a814 100644 --- a/src/services/pom.xml +++ b/src/services/pom.xml @@ -31,7 +31,7 @@ 3.7-SNAPSHOT geofence - 30-SNAPSHOT + 32-SNAPSHOT 3.3.2 @@ -62,7 +62,16 @@ 1.2.2 1.4 - 5.4.3.Final + + + + 5.6.15.Final + + 42.1.1 1.3.3 @@ -422,23 +431,68 @@ + + + + javax.xml.bind + jaxb-api + 2.4.0-b180830.0359 + + + org.glassfish.jaxb + jaxb-runtime + 2.4.0-b180830.0438 + + + jakarta.xml.ws jakarta.xml.ws-api 2.3.3 + + + + + com.sun.xml.ws jaxws-rt @@ -504,8 +558,8 @@ javax.servlet - servlet-api - 2.3 + javax.servlet-api + 3.1.0 provided @@ -559,29 +613,6 @@ test - - - - - - @@ -598,9 +629,9 @@ ${hibernate-version} - - - + + + org.hibernate @@ -793,7 +824,7 @@ org.apache.maven.plugins maven-resources-plugin - 3.1.0 + 3.3.1 UTF-8 @@ -812,13 +843,35 @@ - + + + diff --git a/src/services/webapp/pom.xml b/src/services/webapp/pom.xml index 8058d62d..db8a8209 100644 --- a/src/services/webapp/pom.xml +++ b/src/services/webapp/pom.xml @@ -113,7 +113,7 @@ javax.servlet - servlet-api + javax.servlet-api provided @@ -238,7 +238,7 @@ - + + copy-dependencies copy - + configure the plugin here org.hibernatespatial @@ -270,7 +270,7 @@ - + --> @@ -287,7 +287,7 @@ https://github.com/geoserver/geofence/issues/97 --> - + From 6eaca087f8458a52fc4788b712cb40774ebb65de Mon Sep 17 00:00:00 2001 From: Emanuele Tajariol Date: Mon, 20 Jan 2025 19:31:33 +0100 Subject: [PATCH 08/11] Version 3.8-SNAPSHOT --- src/pom.xml | 4 ++-- src/samples/csv2geofence/pom.xml | 2 +- src/services/core/model-external/pom.xml | 2 +- src/services/core/model/pom.xml | 2 +- src/services/core/persistence-pg-test/pom.xml | 2 +- src/services/core/persistence/pom.xml | 2 +- src/services/core/pom.xml | 2 +- src/services/core/services-api/pom.xml | 2 +- src/services/core/services-impl/pom.xml | 2 +- src/services/core/webtest/pom.xml | 2 +- src/services/modules/generic-api/pom.xml | 2 +- src/services/modules/ldap/pom.xml | 2 +- src/services/modules/login/api/pom.xml | 2 +- src/services/modules/login/impl/pom.xml | 2 +- src/services/modules/login/pom.xml | 2 +- src/services/modules/pom.xml | 2 +- src/services/modules/rest/api/pom.xml | 2 +- src/services/modules/rest/client/pom.xml | 2 +- src/services/modules/rest/impl/pom.xml | 6 ++---- src/services/modules/rest/pom.xml | 2 +- src/services/modules/rest/test/pom.xml | 2 +- src/services/pom.xml | 6 +++--- src/services/webapp/pom.xml | 4 ++-- 23 files changed, 28 insertions(+), 30 deletions(-) diff --git a/src/pom.xml b/src/pom.xml index 8215a45c..0e0db511 100644 --- a/src/pom.xml +++ b/src/pom.xml @@ -10,7 +10,7 @@ org.geoserver.geofence geofence - 3.7-SNAPSHOT + 3.8-SNAPSHOT pom @@ -19,7 +19,7 @@ used in GeoFence --> 8 8 - 3.7-SNAPSHOT + 3.8-SNAPSHOT 3.6.9.Final 1.1.3.2 42.2.18 diff --git a/src/samples/csv2geofence/pom.xml b/src/samples/csv2geofence/pom.xml index 82e21a6c..fced70ea 100644 --- a/src/samples/csv2geofence/pom.xml +++ b/src/samples/csv2geofence/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence.sample csv2geofence - 3.7-SNAPSHOT + 3.8-SNAPSHOT jar csv2geofence diff --git a/src/services/core/model-external/pom.xml b/src/services/core/model-external/pom.xml index 6e85cd17..33f6378a 100644 --- a/src/services/core/model-external/pom.xml +++ b/src/services/core/model-external/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence geofence-core - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/core/model/pom.xml b/src/services/core/model/pom.xml index 44392473..2d8c32d0 100644 --- a/src/services/core/model/pom.xml +++ b/src/services/core/model/pom.xml @@ -14,7 +14,7 @@ org.geoserver.geofence geofence-core - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/core/persistence-pg-test/pom.xml b/src/services/core/persistence-pg-test/pom.xml index b2282e5d..97d5fb34 100644 --- a/src/services/core/persistence-pg-test/pom.xml +++ b/src/services/core/persistence-pg-test/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence geofence-core - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/core/persistence/pom.xml b/src/services/core/persistence/pom.xml index 0f6a4665..42f8205f 100644 --- a/src/services/core/persistence/pom.xml +++ b/src/services/core/persistence/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence geofence-core - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/core/pom.xml b/src/services/core/pom.xml index 36c6c968..b577511b 100644 --- a/src/services/core/pom.xml +++ b/src/services/core/pom.xml @@ -14,7 +14,7 @@ org.geoserver.geofence geofence-root - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/core/services-api/pom.xml b/src/services/core/services-api/pom.xml index 68ec1ef7..162fbb28 100644 --- a/src/services/core/services-api/pom.xml +++ b/src/services/core/services-api/pom.xml @@ -14,7 +14,7 @@ org.geoserver.geofence geofence-core - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/core/services-impl/pom.xml b/src/services/core/services-impl/pom.xml index d562a912..f823ea2e 100644 --- a/src/services/core/services-impl/pom.xml +++ b/src/services/core/services-impl/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence geofence-core - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/core/webtest/pom.xml b/src/services/core/webtest/pom.xml index cfd3dffb..9dabd0ae 100644 --- a/src/services/core/webtest/pom.xml +++ b/src/services/core/webtest/pom.xml @@ -11,7 +11,7 @@ org.geoserver.geofence geofence-core - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/generic-api/pom.xml b/src/services/modules/generic-api/pom.xml index d6d6218a..ea1899dc 100644 --- a/src/services/modules/generic-api/pom.xml +++ b/src/services/modules/generic-api/pom.xml @@ -14,7 +14,7 @@ org.geoserver.geofence geofence-modules - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/ldap/pom.xml b/src/services/modules/ldap/pom.xml index 22245c32..118f3262 100644 --- a/src/services/modules/ldap/pom.xml +++ b/src/services/modules/ldap/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence geofence-modules - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/login/api/pom.xml b/src/services/modules/login/api/pom.xml index 735cc006..5912af56 100644 --- a/src/services/modules/login/api/pom.xml +++ b/src/services/modules/login/api/pom.xml @@ -14,7 +14,7 @@ org.geoserver.geofence geofence-login-parent - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/login/impl/pom.xml b/src/services/modules/login/impl/pom.xml index 3e371fe6..65d7ebdd 100644 --- a/src/services/modules/login/impl/pom.xml +++ b/src/services/modules/login/impl/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence geofence-login-parent - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/login/pom.xml b/src/services/modules/login/pom.xml index 8e479b5d..06a1fbf5 100644 --- a/src/services/modules/login/pom.xml +++ b/src/services/modules/login/pom.xml @@ -14,7 +14,7 @@ org.geoserver.geofence geofence-modules - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/pom.xml b/src/services/modules/pom.xml index b9e750cc..62e5e099 100644 --- a/src/services/modules/pom.xml +++ b/src/services/modules/pom.xml @@ -14,7 +14,7 @@ org.geoserver.geofence geofence-root - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/rest/api/pom.xml b/src/services/modules/rest/api/pom.xml index 3cf8ed65..c28d7ecb 100644 --- a/src/services/modules/rest/api/pom.xml +++ b/src/services/modules/rest/api/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence geofence-rest-root - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/rest/client/pom.xml b/src/services/modules/rest/client/pom.xml index 274b5b66..5b355af3 100644 --- a/src/services/modules/rest/client/pom.xml +++ b/src/services/modules/rest/client/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence geofence-rest-root - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/rest/impl/pom.xml b/src/services/modules/rest/impl/pom.xml index 2e7224d4..12c863a0 100644 --- a/src/services/modules/rest/impl/pom.xml +++ b/src/services/modules/rest/impl/pom.xml @@ -5,16 +5,14 @@ * application directory. */ --> - + 4.0.0 org.geoserver.geofence geofence-rest-root - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/rest/pom.xml b/src/services/modules/rest/pom.xml index 527a9d5f..0de578b1 100644 --- a/src/services/modules/rest/pom.xml +++ b/src/services/modules/rest/pom.xml @@ -14,7 +14,7 @@ org.geoserver.geofence geofence-modules - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/modules/rest/test/pom.xml b/src/services/modules/rest/test/pom.xml index 4249237d..8d7875ac 100644 --- a/src/services/modules/rest/test/pom.xml +++ b/src/services/modules/rest/test/pom.xml @@ -12,7 +12,7 @@ org.geoserver.geofence geofence-rest-root - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence diff --git a/src/services/pom.xml b/src/services/pom.xml index d544a814..8ff09604 100644 --- a/src/services/pom.xml +++ b/src/services/pom.xml @@ -11,12 +11,12 @@ org.geoserver.geofence geofence - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence geofence-root - 3.7-SNAPSHOT + 3.8-SNAPSHOT pom GeoFence - 0 Services @@ -28,7 +28,7 @@ - 3.7-SNAPSHOT + 3.8-SNAPSHOT geofence 32-SNAPSHOT diff --git a/src/services/webapp/pom.xml b/src/services/webapp/pom.xml index db8a8209..c455eefa 100644 --- a/src/services/webapp/pom.xml +++ b/src/services/webapp/pom.xml @@ -11,12 +11,12 @@ org.geoserver.geofence geofence-root - 3.7-SNAPSHOT + 3.8-SNAPSHOT org.geoserver.geofence geofence-web-app - 3.7-SNAPSHOT + 3.8-SNAPSHOT war GeoFence - Webapp From 10b0b95fd2eb5fb724c05e8c76c8203d7bb5db48 Mon Sep 17 00:00:00 2001 From: Emanuele Tajariol Date: Fri, 31 Jan 2025 16:26:52 +0100 Subject: [PATCH 09/11] jdk11: many library updates and code alignment - library update: hibernate spatial - hibernate -> jpa annotation - align dep versions to geoserver main - created script to export DDL - removed javaassist - many fixes for deprecation warnings --- src/pom.xml | 269 +++++++++-------- src/services/core/model-external/pom.xml | 11 +- src/services/core/model/pom.xml | 5 +- .../geoserver/geofence/core/model/GFUser.java | 22 +- .../geofence/core/model/GSInstance.java | 2 +- .../geoserver/geofence/core/model/GSUser.java | 33 ++- .../geofence/core/model/IPAddressRange.java | 4 +- .../geofence/core/model/Identifiable.java | 2 - .../geofence/core/model/LayerAttribute.java | 4 +- .../geofence/core/model/LayerDetails.java | 40 ++- .../geoserver/geofence/core/model/Rule.java | 45 +-- .../geofence/core/model/RuleLimits.java | 14 +- .../geofence/core/model/UserGroup.java | 15 +- src/services/core/persistence/pom.xml | 102 +++++-- .../geoserver/geofence/SchemaExporter.java | 95 ++++++ .../core/dao/RestrictedGenericDAO.java | 2 - .../geofence/core/dao/search/Search.java | 5 +- .../geofence/core/dao/RuleDAOTest.java | 42 +-- .../geofence/services/dto/RuleFilter.java | 28 -- src/services/core/services-impl/pom.xml | 2 +- .../services/RuleReaderServiceImplTest.java | 34 ++- .../RuleReaderServiceImpl_GeomTest.java | 48 +-- src/services/core/webtest/pom.xml | 2 +- .../geofence/servicetest/MainTest.java | 22 +- .../webtest/src/main/resources/log4j2.xml | 4 +- src/services/modules/generic-api/pom.xml | 6 - src/services/modules/login/api/pom.xml | 5 - src/services/modules/login/impl/pom.xml | 5 - src/services/modules/rest/api/pom.xml | 5 - .../services/rest/RESTConfigService.java | 8 + src/services/modules/rest/impl/pom.xml | 7 - .../rest/impl/RESTConfigServiceImpl.java | 14 +- src/services/modules/rest/test/pom.xml | 2 +- .../services/servicetest/MainTest.java | 4 +- src/services/pom.xml | 275 ++++-------------- src/services/webapp/pom.xml | 2 +- .../geofence-datasource-ovr.properties | 4 +- 37 files changed, 594 insertions(+), 595 deletions(-) create mode 100644 src/services/core/persistence/src/main/java/org/geoserver/geofence/SchemaExporter.java diff --git a/src/pom.xml b/src/pom.xml index 0e0db511..ce9c71ab 100644 --- a/src/pom.xml +++ b/src/pom.xml @@ -6,145 +6,158 @@ */ --> - 4.0.0 + 4.0.0 - org.geoserver.geofence - geofence - 3.8-SNAPSHOT - pom - - - - 8 - 8 - 3.8-SNAPSHOT - 3.6.9.Final - 1.1.3.2 - 42.2.18 - 1.3.3 - 1.19.0 - + org.geoserver.geofence + geofence + 3.8-SNAPSHOT + pom - Master GeoFence POM - GeoFence is a java web application that handles authorization rules, integrating with GeoServer using the interface described in GSIP 57. + Master GeoFence POM + GeoFence is a java web application that handles authorization rules, integrating with GeoServer using the interface described in GSIP 57. - https://github.com/geoserver/geofence - 2011 + https://github.com/geoserver/geofence + 2011 - - GeoSolutions - http://www.geo-solutions.it - + + GeoSolutions + https://www.geosolutionsgroup.com + - - - etj - Emanuele Tajariol - GeoSolutions - - architect - developer - - +2 - - - afabiani - Alessio Fabiani - GeoSolutions - - developer - - +2 - - + + + etj + Emanuele Tajariol + GeoSolutions + + architect + developer + + +1 + + + afabiani + Alessio Fabiani + GeoSolutions + + developer + + +1 + + - - github - https://github.com/geoserver/geofence/issues - + + github + https://github.com/geoserver/geofence/issues + - - scm:git:git@github.com:geoserver/geofence.git - main - https://github.com/geoserver/geofence - + + scm:git:git@github.com:geoserver/geofence.git + main + https://github.com/geoserver/geofence + - - jenkins - https://build.geoserver.org - + + jenkins + https://build.geoserver.org + - - - osgeo-releases - OSGeo Nexus Release Repository - https://repo.osgeo.org/repository/release/ - - false - - - true - - + + + osgeo-releases + OSGeo Nexus Release Repository + https://repo.osgeo.org/repository/release/ + + false + + + true + + - - osgeo-snapshots - OSGeo Nexus Snapshot Repository - https://repo.osgeo.org/repository/snapshot/ - - true - - - false - - + + osgeo-snapshots + OSGeo Nexus Snapshot Repository + https://repo.osgeo.org/repository/snapshot/ + + true + + + false + + - - geosolutions - GeoSolutions Repository - https://maven.geo-solutions.it/ - - true - - - true - - - + + geosolutions + GeoSolutions Repository + https://maven.geo-solutions.it/ + + true + + + true + + + - - - nexus - OSGeo Release Repository - https://repo.osgeo.org/repository/Geoserver-releases/ - false - - - nexus - false - OSGeo Snapshot Repository - https://repo.osgeo.org/repository/geoserver-snapshots/ - - + + + nexus + OSGeo Release Repository + https://repo.osgeo.org/repository/Geoserver-releases/ + false + + + nexus + false + OSGeo Snapshot Repository + https://repo.osgeo.org/repository/geoserver-snapshots/ + + - - services - - - - - - - - - org.apache.maven.wagon - wagon-webdav - 1.0-beta-2 - - - - + + services + + + + + libyear + + + + + io.github.mfoo + libyear-maven-plugin + 1.1.0 + + + libyear-analysis + + analyze + + + + + + + + + + + + + + + + + + + org.apache.maven.wagon + wagon-webdav + 1.0-beta-2 + + + + diff --git a/src/services/core/model-external/pom.xml b/src/services/core/model-external/pom.xml index 33f6378a..41a60c16 100644 --- a/src/services/core/model-external/pom.xml +++ b/src/services/core/model-external/pom.xml @@ -126,7 +126,14 @@ - + + + + + + + + @@ -140,7 +147,7 @@ - + diff --git a/src/services/core/model/pom.xml b/src/services/core/model/pom.xml index 2d8c32d0..d54ea1bc 100644 --- a/src/services/core/model/pom.xml +++ b/src/services/core/model/pom.xml @@ -31,8 +31,9 @@ - javax.xml.bind - jaxb-api + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.2 org.glassfish.jaxb diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GFUser.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GFUser.java index 4bbb669c..f404184c 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GFUser.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GFUser.java @@ -15,6 +15,7 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.UniqueConstraint; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @@ -27,7 +28,14 @@ * */ @Entity(name = "GFUser") -@Table(name = "gf_gfuser") +@Table(name = "gf_gfuser", + uniqueConstraints = { // @InternalModel + @UniqueConstraint( + columnNames = {"extid"}, name = "gf_gfuser_extid_key"), // @InternalModel + @UniqueConstraint( + columnNames = {"name"}, name = "gf_gfuser_name_key") // @InternalModel + } // @InternalModel +) // @InternalModel @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "GFUser") @XmlRootElement(name = "GFUser") @XmlType(propOrder={"id","extId","name","enabled","fullName","password","emailAddress","dateCreation"}) @@ -35,11 +43,11 @@ public class GFUser implements Identifiable, Serializable { /** - * - */ - private static final long serialVersionUID = -5161617651332259455L; + * + */ + private static final long serialVersionUID = -3801617651332259455L; - /** The id. */ + /** The id. */ @Id @GeneratedValue @Column @@ -48,11 +56,11 @@ public class GFUser implements Identifiable, Serializable { /** External Id. An ID used in an external systems. * This field should simplify Geofence integration in complex systems. */ - @Column(nullable=true, updatable=false, unique=true) + @Column(nullable=true, updatable=false) private String extId; /** The name. */ - @Column(nullable=false, unique=true) + @Column(nullable=false) private String name; /** The user name. */ diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GSInstance.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GSInstance.java index e0beab4d..9ffbfcb1 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GSInstance.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GSInstance.java @@ -35,7 +35,7 @@ public class GSInstance implements Identifiable, Serializable { /** The Constant serialVersionUID. */ - private static final long serialVersionUID = -2584592064221812813L; + private static final long serialVersionUID = 3804592064221812813L; /** The id. */ @Id diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GSUser.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GSUser.java index 79802ee4..6214eaa0 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GSUser.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/GSUser.java @@ -16,14 +16,17 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; +import javax.persistence.ForeignKey; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.Index; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.UniqueConstraint; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @@ -34,8 +37,6 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; -import org.hibernate.annotations.ForeignKey; -import org.hibernate.annotations.Index; /** * A User that can access GeoServer resources. @@ -45,13 +46,21 @@ * @author ETj (etj at geo-solutions.it) */ @Entity(name = "GSUser") -@Table(name = "gf_gsuser") +@Table(name = "gf_gsuser", + indexes = { @Index(name = "idx_gsuser_name", columnList = "name")}, + uniqueConstraints = { // @InternalModel + @UniqueConstraint( + columnNames = "extid", name = "gf_gsuser_extid_key"), // @InternalModel + @UniqueConstraint( + columnNames = "name", name = "gf_gsuser_name_key") // @InternalModel + } // @InternalModel +) // @InternalModel @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "GSUser") @XmlRootElement(name = "GSUser") @XmlType(propOrder={"id","extId","name","fullName","password","emailAddress","dateCreation","groups"}) public class GSUser implements Identifiable, Serializable { - private static final long serialVersionUID = 7718458156939088033L; + private static final long serialVersionUID = 3808458156939088033L; /** The id. */ @Id @@ -63,12 +72,11 @@ public class GSUser implements Identifiable, Serializable { * External Id. An ID used in an external systems. * This field should simplify Geofence integration in complex systems. */ - @Column(nullable=true, updatable=false, unique=true) + @Column(nullable=true, updatable=false) private String extId; /** The name. */ - @Index(name = "idx_gsuser_name") - @Column(nullable=false, unique=true) + @Column(nullable=false) private String name; /** The user name. */ @@ -98,9 +106,14 @@ public class GSUser implements Identifiable, Serializable { /** Groups to which the user is associated */ @ManyToMany(fetch= FetchType.LAZY) - @JoinTable( name = "gf_user_usergroups", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns=@JoinColumn(name = "group_id") ) - @Column(name = "u_id") - @ForeignKey(name="fk_uug_user", inverseName="fk_uug_group") + @JoinTable( + name = "gf_user_usergroups", // @InternalModel + joinColumns = @JoinColumn(name = "user_id"), + inverseJoinColumns = @JoinColumn(name = "group_id"), + foreignKey = @ForeignKey(name="fk_uug_user"), + inverseForeignKey = @ForeignKey(name="fk_uug_group") + ) // @JoinTable + @Column(name = "u_id") @Fetch(FetchMode.SUBSELECT) // without this, hibernate will duplicate results(!) private Set userGroups = new HashSet(); diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/IPAddressRange.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/IPAddressRange.java index 28f1d248..8c425975 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/IPAddressRange.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/IPAddressRange.java @@ -20,6 +20,8 @@ @Embeddable public class IPAddressRange implements Serializable { + private static final long serialVersionUID = 3808458156939088033L; + /** * The lower 64 bits. * For IPv4, only the lower 32 are used. @@ -44,7 +46,7 @@ protected IPAddressRange() { public IPAddressRange(String cidrNotation) { SubnetV4Utils su = new SubnetV4Utils(cidrNotation); - low = new Long(su.getInfo().getAddressAsInteger()); + low = Long.valueOf(su.getInfo().getAddressAsInteger()); size = su.getInfo().getMaskSize(); } diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/Identifiable.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/Identifiable.java index f62c5d55..c3d4476f 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/Identifiable.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/Identifiable.java @@ -14,6 +14,4 @@ public interface Identifiable { Long getId(); void setId(Long id); -// String getName(); -// void setName(String name); } diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/LayerAttribute.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/LayerAttribute.java index 533871e1..a0274a9b 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/LayerAttribute.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/LayerAttribute.java @@ -7,8 +7,6 @@ import org.geoserver.geofence.core.model.enums.AccessType; import java.io.Serializable; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.persistence.Column; import javax.persistence.Embeddable; import javax.persistence.EnumType; @@ -27,7 +25,7 @@ @XmlRootElement(name = "LayerAttribute") public class LayerAttribute implements Serializable, Cloneable { - private static final long serialVersionUID = -4739817113509675752L; + private static final long serialVersionUID = 3809817113509675752L; @Column(nullable=false) private String name; 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 e1412993..b921b4b7 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 @@ -19,6 +19,7 @@ import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; +import javax.persistence.ForeignKey; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; @@ -33,8 +34,6 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; -import org.hibernate.annotations.ForeignKey; -import org.hibernate.annotations.Type; /** * Details may be set only for ules with non-wildcarded profile, instance, workspace,layer. @@ -47,12 +46,19 @@ * @author ETj (etj at geo-solutions.it) */ @Entity(name = "LayerDetails") -@Table(name = "gf_layer_details") +@Table(name = "gf_layer_details", + uniqueConstraints = { // @InternalModel + @UniqueConstraint( + columnNames = "rule_id", name = "gf_layer_details_rule_id_key") // @InternalModel + } // @InternalModel +) // @InternalModel + + @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "LayerDetails") @XmlRootElement(name = "LayerDetails") public class LayerDetails implements Identifiable, Serializable { - private static final long serialVersionUID = -4150963895550551513L; + private static final long serialVersionUID = 3800963895550551513L; /** The id. */ @Id @@ -73,13 +79,12 @@ public class LayerDetails implements Identifiable, Serializable { @Column(length=4000) private String cqlFilterWrite; -// @Type(type = "org.hibernate.spatial.JTSGeometryType") - @Column(name = "area") - private MultiPolygon area; + @Column(name = "area") + private MultiPolygon area; - @Enumerated(EnumType.STRING) + @Enumerated(EnumType.STRING) @Column(name="spatial_filter_type",nullable = true) - private SpatialFilterType spatialFilterType; + private SpatialFilterType spatialFilterType; @Enumerated(EnumType.STRING) @Column(name = "catalog_mode", nullable = true) @@ -87,13 +92,16 @@ public class LayerDetails implements Identifiable, Serializable { @OneToOne(optional=false) // @Check(constraints="rule.access='LIMIT'") // ??? check this - @ForeignKey(name="fk_details_rule") + @JoinColumn(foreignKey = @ForeignKey(name="fk_details_rule")) private Rule rule; /** Styles allowed for this layer */ @ElementCollection(fetch=FetchType.EAGER) - @JoinTable( name = "gf_layer_styles", joinColumns = @JoinColumn(name = "details_id")) - @ForeignKey(name="fk_styles_layer") + @JoinTable( + name = "gf_layer_styles", // @InternalModel + joinColumns = @JoinColumn(name = "details_id"), + foreignKey = @ForeignKey(name="fk_styles_layer") + ) // @InternalModel @Column(name="styleName") private Set allowedStyles = new HashSet<>(); @@ -102,10 +110,14 @@ public class LayerDetails implements Identifiable, Serializable { * To do so, we have to perform some trick on the {@link LayerAttribute#access} field. */ @ElementCollection(fetch=FetchType.EAGER) - @JoinTable( name = "gf_layer_attributes", joinColumns = @JoinColumn(name = "details_id"), uniqueConstraints = @UniqueConstraint(columnNames={"details_id", "name"})) + @JoinTable( + name = "gf_layer_attributes", // @InternalModel + joinColumns = @JoinColumn(name = "details_id"), + uniqueConstraints = @UniqueConstraint(columnNames={"details_id", "name"}, name="gf_layer_attributes_didname_unq"), + foreignKey = @ForeignKey(name="fk_attribute_layer") + ) // @InternalModel // 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<>(); diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/Rule.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/Rule.java index d988bd08..4cdee966 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/Rule.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/Rule.java @@ -17,8 +17,11 @@ import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; +import javax.persistence.ForeignKey; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.persistence.Table; @@ -28,8 +31,6 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; -import org.hibernate.annotations.ForeignKey; -import org.hibernate.annotations.Index; /** * A Rule expresses if a given combination of request access is allowed or not. @@ -61,14 +62,26 @@ * @author ETj (etj at geo-solutions.it) */ @Entity(name = "Rule") -@Table(name = "gf_rule", uniqueConstraints = { - @UniqueConstraint(columnNames = {"username", "rolename", "instance_id", "service", "request", "workspace", "layer"})}) +@Table(name = "gf_rule", + uniqueConstraints = { // @InternalModel + @UniqueConstraint( + columnNames = {"username", "rolename", "instance_id", "service", "request", "workspace", "layer"}, // @InternalModel + name = "gf_rule_username_rolename_instance_id_service_request_works_key" // @InternalModel + )}, // @InternalModel + indexes = { // @InternalModel + @Index(name = "idx_rule_priority", columnList = "priority"), + @Index(name = "idx_rule_service", columnList = "service"), + @Index(name = "idx_rule_request", columnList = "request"), + @Index(name = "idx_rule_workspace", columnList = "workspace"), + @Index(name = "idx_rule_layer", columnList = "layer") + } // @InternalModel +) // @InternalModel @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "Rule") @XmlRootElement(name = "Rule") @XmlType(propOrder={"id","priority","username","rolename","instance","addressRange","service","request","workspace","layer","access","layerDetails","ruleLimits"}) public class Rule implements Identifiable, Serializable, Prioritizable, IPRangeProvider { - private static final long serialVersionUID = -5127129225384707164L; + private static final long serialVersionUID = -3803809225384707164L; /** The id. */ @Id @@ -78,7 +91,6 @@ public class Rule implements Identifiable, Serializable, Prioritizable, IPRangeP /** Lower numbers have higher priority */ @Column(nullable = false) - @Index(name = "idx_rule_priority") private long priority; @Column(name = "username", nullable = true) @@ -88,11 +100,10 @@ public class Rule implements Identifiable, Serializable, Prioritizable, IPRangeP private String rolename; @ManyToOne(optional = true, fetch = FetchType.EAGER) - @ForeignKey(name = "fk_rule_instance") + @JoinColumn(foreignKey = @ForeignKey(name="fk_rule_instance")) private GSInstance instance; @Column - @Index(name = "idx_rule_service") private String service; @Embedded @@ -103,18 +114,15 @@ public class Rule implements Identifiable, Serializable, Prioritizable, IPRangeP private IPAddressRange addressRange; @Column - @Index(name = "idx_rule_request") private String request; @Column private String subfield; @Column - @Index(name = "idx_rule_workspace") private String workspace; @Column - @Index(name = "idx_rule_layer") private String layer; @Enumerated(EnumType.STRING) @@ -122,11 +130,11 @@ public class Rule implements Identifiable, Serializable, Prioritizable, IPRangeP private GrantType access; @OneToOne(optional = true, cascade = CascadeType.REMOVE, mappedBy = "rule") // main ref is in LayerDetails - @ForeignKey(name = "fk_rule_details") + @JoinColumn(foreignKey = @ForeignKey(name="fk_rule_details")) private LayerDetails layerDetails; @OneToOne(optional = true, cascade = CascadeType.REMOVE, mappedBy = "rule") // main ref is in ruleLimits - @ForeignKey(name = "fk_rule_limits") + @JoinColumn(foreignKey = @ForeignKey(name="fk_rule_limits")) private RuleLimits ruleLimits; public Rule() { @@ -147,15 +155,6 @@ public Rule(long priority, String username, String rolename, GSInstance instance this.access = access; } - /** - * @deprecated need new subfield argument - */ - @Deprecated - public Rule(long priority, String username, String rolename, GSInstance instance, IPAddressRange addressRange, - String service, String request, String workspace, String layer, GrantType access) { - this(priority, username, rolename, instance, addressRange, service, request, null, workspace, layer, access); - } - public Long getId() { return id; } @@ -262,6 +261,7 @@ public RuleLimits getRuleLimits() { * @deprecated This setter is only used by hibernate, should not be called by the user. * @param ruleLimits */ + @Deprecated public void setRuleLimits(RuleLimits ruleLimits) { this.ruleLimits = ruleLimits; } @@ -273,6 +273,7 @@ public LayerDetails getLayerDetails() { /** * @deprecated This setter is only used by hibernate, should not be called by the user. */ + @Deprecated public void setLayerDetails(LayerDetails layerDetails) { this.layerDetails = layerDetails; } 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 83a61600..d4d039c6 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 @@ -11,7 +11,9 @@ import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.ForeignKey; import javax.persistence.Id; +import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.UniqueConstraint; @@ -26,8 +28,6 @@ import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Check; -import org.hibernate.annotations.ForeignKey; -import org.hibernate.annotations.Type; import org.locationtech.jts.geom.MultiPolygon; @@ -38,12 +38,16 @@ * @author ETj (etj at geo-solutions.it) */ @Entity(name = "RuleLimits") -@Table(name = "gf_rule_limits", uniqueConstraints = @UniqueConstraint(columnNames = "rule_id")) +@Table(name = "gf_rule_limits", + uniqueConstraints = @UniqueConstraint( + columnNames = "rule_id", // @InternalModel + name = "gf_rule_limits_rule_id_key") // @InternalModel +) // @InternalModel @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "RuleLimits") @XmlRootElement(name = "RuleLimits") public class RuleLimits implements Identifiable, Serializable { - private static final long serialVersionUID = 2829839552804345725L; + private static final long serialVersionUID = 3809839552804345725L; /** The id. */ @Id @@ -53,7 +57,7 @@ public class RuleLimits implements Identifiable, Serializable { @OneToOne(optional = false) @Check(constraints = "rule.access='LIMIT'") // ??? check this - @ForeignKey(name = "fk_limits_rule") + @JoinColumn(foreignKey = @ForeignKey(name = "fk_limits_rule")) private Rule rule; //@Type(type = "org.hibernate.spatial.JTSGeometryType") diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/UserGroup.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/UserGroup.java index 08e42c20..3a6956dd 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/UserGroup.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/UserGroup.java @@ -16,6 +16,7 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.UniqueConstraint; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @@ -30,7 +31,15 @@ * @author ETj (etj at geo-solutions.it) */ @Entity(name = "UserGroup") -@Table(name = "gf_usergroup") +@Table(name = "gf_usergroup", + uniqueConstraints = { // @InternalModel + @UniqueConstraint( + columnNames = {"extid"}, name = "gf_usergroup_extid_key"), // @InternalModel + @UniqueConstraint( + columnNames = {"name"}, name = "gf_usergroup_name_key") // @InternalModel + } // @InternalModel +) // @InternalModel + @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "usergroup") @XmlRootElement(name = "UserGroup") @XmlType(propOrder={"id","extId","name","dateCreation"/*,"customProps"*/}) @@ -49,11 +58,11 @@ public class UserGroup implements Identifiable, Serializable { * An ID used in an external systems. * This field should simplify Geofence integration in complex systems. */ - @Column(nullable=true, updatable=false, unique=true) + @Column(nullable=true, updatable=false) private String extId; /** The name. */ - @Column(nullable=false, updatable=true, unique=true) + @Column(nullable=false, updatable=true) private String name; /** The date creation. */ diff --git a/src/services/core/persistence/pom.xml b/src/services/core/persistence/pom.xml index 42f8205f..41c4fdc3 100644 --- a/src/services/core/persistence/pom.xml +++ b/src/services/core/persistence/pom.xml @@ -69,7 +69,7 @@ - dom4j + org.dom4j dom4j @@ -155,6 +155,15 @@ com.h2database h2 + + + + + + + org.opengeo + geodb + 0.9 @@ -226,43 +235,64 @@ test + + + com.google.guava + guava + 33.4.0-jre + - + org.codehaus.mojo - hibernate3-maven-plugin - 3.0 - - - - generate-sources - - run - - - - + exec-maven-plugin + 3.5.0 + + exportSchema + - - - - - - - - - - - - - - - + org.geoserver.geofence.SchemaExporter - + + + org.geoserver.geofence + geofence-model-internal + ${geofence-version} + + + org.geoserver.geofence + geofence-persistence + ${geofence-version} + + + com.google.guava + guava + 33.4.0-jre + + + + org.apache.logging.log4j + log4j-core + 2.24.3 + + + org.apache.logging.log4j + log4j-slf4j-impl + 2.24.3 + + + org.slf4j + slf4j-simple + 1.7.30 + + + + + + org.apache.maven.plugins @@ -280,6 +310,7 @@ org.apache.maven.plugins maven-source-plugin + 3.3.1 attach-sources @@ -299,7 +330,16 @@ false - + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + + -Xlint + + + diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/SchemaExporter.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/SchemaExporter.java new file mode 100644 index 00000000..64bd2bd8 --- /dev/null +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/SchemaExporter.java @@ -0,0 +1,95 @@ +/* + */ +package org.geoserver.geofence; + +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.geoserver.geofence.core.model.AdminRule; +import org.geoserver.geofence.core.model.GFUser; +import org.geoserver.geofence.core.model.GSInstance; +import org.geoserver.geofence.core.model.GSUser; +import org.geoserver.geofence.core.model.IPAddressRange; +import org.geoserver.geofence.core.model.IPRangeProvider; +import org.geoserver.geofence.core.model.Identifiable; +import org.geoserver.geofence.core.model.LayerAttribute; +import org.geoserver.geofence.core.model.LayerDetails; +import org.geoserver.geofence.core.model.Rule; +import org.geoserver.geofence.core.model.RuleLimits; +import org.geoserver.geofence.core.model.UserGroup; +import org.geoserver.geofence.core.model.adapter.MultiPolygonAdapter; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.boot.MetadataSources; +import org.hibernate.tool.hbm2ddl.SchemaExport; +import org.hibernate.tool.hbm2ddl.SchemaExport.Action; +import org.hibernate.tool.schema.TargetType; + +/** + * + * @author etj + */ +public class SchemaExporter { + + private static final Logger LOGGER = LogManager.getLogger(SchemaExporter.class); + + static final String DIALECT_POSTGIS = "org.hibernate.spatial.dialect.postgis.PostgisDialect"; + static final String DIALECT_H2 = "org.hibernate.dialect.H2Dialect"; + + public static void main(String[] args) { + SchemaExporter exporter = new SchemaExporter(); + + exporter.createSqlFile(DIALECT_POSTGIS, "./schema.postgres.sql", true); + exporter.createSqlFile(DIALECT_H2, "./schema.h2.sql", false); + } + + + public void createSqlFile(String dialect, String outputFile, boolean stdout) { + + Map settings = new HashMap<>(); + + settings.put("hibernate.dialect", dialect); +// settings.put("hibernate.show_sql", "true"); + settings.put("hibernate.format_sql", "true"); + + ServiceRegistry serviceRegistry + = new StandardServiceRegistryBuilder().applySettings(settings).build(); + + MetadataSources sources = new MetadataSources(serviceRegistry); + + Class modelClasses[] = { + AdminRule.class, + GFUser.class, + GSInstance.class, + GSUser.class, + IPAddressRange.class, + IPRangeProvider.class, + Identifiable.class, + LayerAttribute.class, + LayerDetails.class, + Rule.class, + RuleLimits.class, + UserGroup.class, + MultiPolygonAdapter.class + }; + + for(Class c: modelClasses) { + sources.addAnnotatedClass(c); + } + + EnumSet enumSet = EnumSet.of(TargetType.SCRIPT); + if(stdout) { + enumSet.add(TargetType.STDOUT); + } + + SchemaExport schemaExport = new SchemaExport(); + schemaExport.setOutputFile(outputFile) + .setOverrideOutputFileContent() + .setDelimiter(";") + .setFormat(true) + .execute(enumSet, Action.CREATE, sources.buildMetadata()); + } + +} 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 a25806b3..cecbade1 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,7 @@ package org.geoserver.geofence.core.dao; -import org.geoserver.geofence.core.dao.search.Search; import java.util.List; -import org.geoserver.geofence.core.model.Identifiable; /** * Public interface to define a restricted set of operation wrt to ones 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 index 2c6984d5..8ac4b3ab 100644 --- 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 @@ -17,7 +17,7 @@ /** * - * @author geosol + * @author Emanuele Tajariol */ public class Search { @@ -109,13 +109,12 @@ public Fetch addFetch(String field) { } 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)); + whereClauses.add(cb.isNull(root.get(field))); } public void addFilterNull(JoinInfo j, String field) { 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 2866db1c..0baf0c55 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 @@ -280,7 +280,7 @@ public void testRuleDetails() { final Long id; { - Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.ALLOW); + Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", null, "w1", "l1", GrantType.ALLOW); // ruleAdminService.insert(r1); ruleDAO.persist(r1); id = r1.getId(); @@ -444,8 +444,8 @@ public void setDetails(Long ruleId, LayerDetails details) { public void testDupRuleTest() throws Exception { { - Rule rule1 = new Rule(10, null, null, null, null, "s", null, null, null, GrantType.ALLOW); - Rule rule2 = new Rule(10, null, null, null, null, "s", null, null, null, GrantType.ALLOW); + Rule rule1 = new Rule(10, null, null, null, null, "s", null, null, null, null, GrantType.ALLOW); + Rule rule2 = new Rule(10, null, null, null, null, "s", null, null, null, null, GrantType.ALLOW); ruleDAO.persist(rule1); @@ -462,8 +462,8 @@ public void testDupRuleTest() throws Exception { @Test public void testDupRule2Test() throws Exception { { - Rule rule1 = new Rule(10, null, null, null, new IPAddressRange("1.2.3.4/32"), "s", null, null, null, GrantType.ALLOW); - Rule rule2 = new Rule(10, null, null, null, new IPAddressRange("1.2.3.4/32"), "s", null, null, null, GrantType.ALLOW); + Rule rule1 = new Rule(10, null, null, null, new IPAddressRange("1.2.3.4/32"), "s", null, null, null, null, GrantType.ALLOW); + Rule rule2 = new Rule(10, null, null, null, new IPAddressRange("1.2.3.4/32"), "s", null, null, null, null, GrantType.ALLOW); ruleDAO.persist(rule1); @@ -479,8 +479,8 @@ public void testDupRule2Test() throws Exception { @Test public void testDupRule3Test() throws Exception { { - Rule rule1 = new Rule(10, null, null, null, new IPAddressRange("1.2.3.5/32"), "s", null, null, null, GrantType.ALLOW); - Rule rule2 = new Rule(10, null, null, null, new IPAddressRange("1.2.3.4/32"), "s", null, null, null, GrantType.ALLOW); + Rule rule1 = new Rule(10, null, null, null, new IPAddressRange("1.2.3.5/32"), "s", null, null, null, null, GrantType.ALLOW); + Rule rule2 = new Rule(10, null, null, null, new IPAddressRange("1.2.3.4/32"), "s", null, null, null, null, GrantType.ALLOW); ruleDAO.persist(rule1); @@ -498,10 +498,10 @@ public void testDupRule3Test() throws Exception { public void testShift() { 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); - Rule r3 = new Rule(30, null, null, null, null, "s3", "r3", "w3", "l3", GrantType.ALLOW); - Rule r4 = new Rule(40, null, null, null, null, "s4", "r3", "w3", "l3", GrantType.ALLOW); + Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", null, "w1", "l1", GrantType.ALLOW); + Rule r2 = new Rule(20, null, null, null, null, "s2", "r2", null, "w2", "l2", GrantType.ALLOW); + Rule r3 = new Rule(30, null, null, null, null, "s3", "r3", null, "w3", "l3", GrantType.ALLOW); + Rule r4 = new Rule(40, null, null, null, null, "s4", "r3", null, "w3", "l3", GrantType.ALLOW); ruleDAO.persist(r1); ruleDAO.persist(r2); @@ -526,9 +526,9 @@ public void testShift() { public void testSwap() { 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); - Rule r3 = new Rule(30, null, null, null, null, "s3", "r3", "w3", "l3", GrantType.ALLOW); + Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", null, "w1", "l1", GrantType.ALLOW); + Rule r2 = new Rule(20, null, null, null, null, "s2", "r2", null, "w2", "l2", GrantType.ALLOW); + Rule r3 = new Rule(30, null, null, null, null, "s3", "r3", null, "w3", "l3", GrantType.ALLOW); ruleDAO.persist(r1); ruleDAO.persist(r2); @@ -547,7 +547,7 @@ public void testPersistRulePosition() throws Exception { long id1; { assertEquals(0, ruleDAO.count(ruleDAO.createCountSearch())); - Rule rule1 = new Rule(1000, null, null, null, null, "s", null, null, null, GrantType.ALLOW); + Rule rule1 = new Rule(1000, null, null, null, null, "s", null, null, null, null, GrantType.ALLOW); ruleDAO.persist(rule1, InsertPosition.FROM_START); id1 = rule1.getId(); } @@ -559,30 +559,30 @@ public void testPersistRulePosition() throws Exception { } - ruleDAO.persist(new Rule(10, null, null, null, null, "s10", null, null, null, GrantType.ALLOW)); - ruleDAO.persist(new Rule(20, null, null, null, null, "s20", null, null, null, GrantType.ALLOW)); + ruleDAO.persist(new Rule(10, null, null, null, null, "s10", null, null, null, null, GrantType.ALLOW)); + ruleDAO.persist(new Rule(20, null, null, null, null, "s20", null, null, null, null, GrantType.ALLOW)); { assertEquals(3, ruleDAO.count(ruleDAO.createCountSearch())); - Rule rule1 = new Rule(1000, null, null, null, null, "sZ", null, null, null, GrantType.ALLOW); + Rule rule1 = new Rule(1000, null, null, null, null, "sZ", null, null, null, null, GrantType.ALLOW); long pri = ruleDAO.persist(rule1, InsertPosition.FROM_START); assertEquals(21, pri); } { - Rule rule1 = new Rule(1, null, null, null, null, "second", null, null, null, GrantType.ALLOW); + Rule rule1 = new Rule(1, null, null, null, null, "second", null, null, null, null, GrantType.ALLOW); long pri = ruleDAO.persist(rule1, InsertPosition.FROM_START); assertEquals(10, pri); } { - Rule rule1 = new Rule(0, null, null, null, null, "last", null, null, null, GrantType.ALLOW); + Rule rule1 = new Rule(0, null, null, null, null, "last", null, null, null, null, GrantType.ALLOW); long pri = ruleDAO.persist(rule1, InsertPosition.FROM_END); assertEquals(23, pri); } { - Rule rule1 = new Rule(1, null, null, null, null, "last2", null, null, null, GrantType.ALLOW); + Rule rule1 = new Rule(1, null, null, null, null, "last2", null, null, null, null, GrantType.ALLOW); long pri = ruleDAO.persist(rule1, InsertPosition.FROM_END); assertEquals(23, pri); } diff --git a/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/RuleFilter.java b/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/RuleFilter.java index 19febb45..11089dd2 100644 --- a/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/RuleFilter.java +++ b/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/RuleFilter.java @@ -9,8 +9,6 @@ import java.io.Serializable; import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; import java.util.stream.Collectors; @@ -121,32 +119,6 @@ public RuleFilter(SpecialFilterType type, boolean includeDefault) { layer.setIncludeDefault(includeDefault); } - /** - * Creates a RuleFilter by heuristically converting special string values into Fitler behaviour:

  • a null value will - * match only with null
  • a '*' value will match everything (no filter condition on that given field)
  • any - * other string will match literally
- * - * @deprecated Please use plain setters if you want to handle by hand special values or filter conditions. - */ - public RuleFilter(String userName, String groupName, String instanceName, - String sourceAddress, - String service, String request, String subfield, - String workspace, String layer) { - this(SpecialFilterType.DEFAULT); - - - this.user.setHeuristically(userName); - this.role.setHeuristically(groupName); - this.instance.setHeuristically(instanceName); - this.sourceAddress.setHeuristically(sourceAddress); - - this.service.setHeuristically(service); - this.request.setHeuristically(request); - this.subfield.setHeuristically(subfield); - this.workspace.setHeuristically(workspace); - this.layer.setHeuristically(layer); - } - public RuleFilter(RuleFilter source) { try { diff --git a/src/services/core/services-impl/pom.xml b/src/services/core/services-impl/pom.xml index f823ea2e..71df7555 100644 --- a/src/services/core/services-impl/pom.xml +++ b/src/services/core/services-impl/pom.xml @@ -87,7 +87,7 @@
- dom4j + org.dom4j dom4j diff --git a/src/services/core/services-impl/src/test/java/org/geoserver/geofence/services/RuleReaderServiceImplTest.java b/src/services/core/services-impl/src/test/java/org/geoserver/geofence/services/RuleReaderServiceImplTest.java index 750802af..727bf1fa 100644 --- a/src/services/core/services-impl/src/test/java/org/geoserver/geofence/services/RuleReaderServiceImplTest.java +++ b/src/services/core/services-impl/src/test/java/org/geoserver/geofence/services/RuleReaderServiceImplTest.java @@ -175,9 +175,6 @@ public void testGetInfo() { baseFilter.setWorkspace("W0"); baseFilter.setLayer("l0"); - - AccessInfo accessInfo; - { RuleFilter ruleFilter = new RuleFilter(baseFilter); ruleFilter.setUser(SpecialFilterType.ANY); @@ -812,9 +809,34 @@ public void testMultiRoles() { assertRules(createFilter(u3, "p1,p2,NO"), new Integer[]{50,51,52,60,70,999}); } + /** + * Creates a RuleFilter by heuristically converting special string values into Fitler behaviour:
  • a null value will + * match only with null
  • a '*' value will match everything (no filter condition on that given field)
  • any + * other string will match literally
+ * + */ + private RuleFilter createHeuristicFilter(String userName, String groupName, String instanceName, + String sourceAddress, + String service, String request, String subfield, + String workspace, String layer) { + + RuleFilter filter = new RuleFilter(SpecialFilterType.DEFAULT); + filter.getUser().setHeuristically(userName); + filter.getRole().setHeuristically(groupName); + filter.getInstance().setHeuristically(instanceName); + filter.getSourceAddress().setHeuristically(sourceAddress); + + filter.getService().setHeuristically(service); + filter.getRequest().setHeuristically(request); + filter.getSubfield().setHeuristically(subfield); + filter.getWorkspace().setHeuristically(workspace); + filter.getLayer().setHeuristically(layer); + + return filter; + } private RuleFilter createFilter(String userName, String groupName) { - return new RuleFilter(userName, groupName, "*", "*", "*", "*", "*", "*", "*"); + return createHeuristicFilter(userName, groupName, "*", "*", "*", "*", "*", "*", "*"); } private void assertRules(RuleFilter filter, Integer[] expectedPriorities) { @@ -837,7 +859,7 @@ private List getMatchingRules( String workspace, String layer) { return ruleReaderService.getMatchingRules( - new RuleFilter(userName, profileName, instanceName, sourceAddress, + createHeuristicFilter(userName, profileName, instanceName, sourceAddress, service, request, null, workspace, layer)); } @@ -846,7 +868,7 @@ private AccessInfo getAccessInfo(String userName, String roleName, String instan String service, String request, String workspace, String layer) { return ruleReaderService.getAccessInfo( - new RuleFilter(userName, roleName, instanceName, sourceAddress, + createHeuristicFilter(userName, roleName, instanceName, sourceAddress, service, request, null, workspace, layer)); } diff --git a/src/services/core/services-impl/src/test/java/org/geoserver/geofence/services/RuleReaderServiceImpl_GeomTest.java b/src/services/core/services-impl/src/test/java/org/geoserver/geofence/services/RuleReaderServiceImpl_GeomTest.java index d0090e89..5e49e525 100644 --- a/src/services/core/services-impl/src/test/java/org/geoserver/geofence/services/RuleReaderServiceImpl_GeomTest.java +++ b/src/services/core/services-impl/src/test/java/org/geoserver/geofence/services/RuleReaderServiceImpl_GeomTest.java @@ -37,13 +37,13 @@ public void testRuleLimitsAllowedAreaSRIDIsPreserved() throws NotFoundServiceEx, Long id2 = null; try { { - Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.LIMIT); + Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", null, "w1", "l1", GrantType.LIMIT); ruleAdminService.insert(r1); id = r1.getId(); } { - Rule r2 = new Rule(11, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.ALLOW); + Rule r2 = new Rule(11, null, null, null, null, "s1", "r1", null, "w1", "l1", GrantType.ALLOW); id2 = ruleAdminService.insert(r2); } @@ -89,13 +89,13 @@ public void testRuleLimitsAllowedAreaReprojectionWithDifferentSrid() throws NotF Long id3 = null; try { { - Rule r1 = new Rule(999, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.ALLOW); + Rule r1 = new Rule(999, null, null, null, null, "s1", "r1", null, "w1", "l1", GrantType.ALLOW); ruleAdminService.insert(r1); id = r1.getId(); } { - Rule r2 = new Rule(11, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.LIMIT); + Rule r2 = new Rule(11, null, null, null, null, "s1", "r1", null, "w1", "l1", GrantType.LIMIT); id2 = ruleAdminService.insert(r2); } @@ -110,7 +110,7 @@ public void testRuleLimitsAllowedAreaReprojectionWithDifferentSrid() throws NotF } { - Rule r3 = new Rule(12, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.LIMIT); + Rule r3 = new Rule(12, null, null, null, null, "s1", "r1", null, "w1", "l1", GrantType.LIMIT); id3 = ruleAdminService.insert(r3); } @@ -159,8 +159,8 @@ public void testRuleSpatialFilterTypeClipSameGroup() throws ParseException { UserGroup g2 = createRole("group12"); GSUser user = createUser("auth11", g1, g2); - ruleAdminService.insert(new Rule(9999, null, null, null, null, "s11", "r11", "w11", "l11", GrantType.ALLOW)); - long id = ruleAdminService.insert(new Rule(10, user.getName(), "group11", null, null, "s11", "r11", "w11", "l11", GrantType.LIMIT)); + ruleAdminService.insert(new Rule(9999, null, null, null, null, "s11", "r11", null, "w11", "l11", GrantType.ALLOW)); + long id = ruleAdminService.insert(new Rule(10, user.getName(), "group11", null, null, "s11", "r11", null, "w11", "l11", GrantType.LIMIT)); RuleLimits limits = new RuleLimits(); limits.setSpatialFilterType(SpatialFilterType.CLIP); limits.setCatalogMode(CatalogMode.HIDE); @@ -169,7 +169,7 @@ public void testRuleSpatialFilterTypeClipSameGroup() throws ParseException { limits.setAllowedArea(area); ruleAdminService.setLimits(id, limits); - long id2 = ruleAdminService.insert(new Rule(11, user.getName(), "group12", null, null, "s11", "r11", "w11", "l11", GrantType.LIMIT)); + long id2 = ruleAdminService.insert(new Rule(11, user.getName(), "group12", null, null, "s11", "r11", null, "w11", "l11", GrantType.LIMIT)); RuleLimits limits2 = new RuleLimits(); limits2.setSpatialFilterType(SpatialFilterType.INTERSECT); limits2.setCatalogMode(CatalogMode.HIDE); @@ -207,8 +207,8 @@ public void testRuleSpatialFilterTypeIntersectsSameGroup() throws ParseException UserGroup g2 = createRole("group14"); GSUser user = createUser("auth12", g1, g2); - ruleAdminService.insert(new Rule(9999, null, null, null, null, "s11", "r11", "w11", "l11", GrantType.ALLOW)); - long id = ruleAdminService.insert(new Rule(13, user.getName(), "group13", null, null, "s11", "r11", "w11", "l11", GrantType.LIMIT)); + ruleAdminService.insert(new Rule(9999, null, null, null, null, "s11", "r11", null, "w11", "l11", GrantType.ALLOW)); + long id = ruleAdminService.insert(new Rule(13, user.getName(), "group13", null, null, "s11", "r11", null, "w11", "l11", GrantType.LIMIT)); RuleLimits limits = new RuleLimits(); limits.setSpatialFilterType(SpatialFilterType.INTERSECT); limits.setCatalogMode(CatalogMode.HIDE); @@ -217,7 +217,7 @@ public void testRuleSpatialFilterTypeIntersectsSameGroup() throws ParseException limits.setAllowedArea(area); ruleAdminService.setLimits(id, limits); - long id2 = ruleAdminService.insert(new Rule(14, user.getName(), "group14", null, null, "s11", "r11", "w11", "l11", GrantType.LIMIT)); + long id2 = ruleAdminService.insert(new Rule(14, user.getName(), "group14", null, null, "s11", "r11", null, "w11", "l11", GrantType.LIMIT)); RuleLimits limits2 = new RuleLimits(); limits2.setSpatialFilterType(SpatialFilterType.INTERSECT); limits2.setCatalogMode(CatalogMode.HIDE); @@ -256,9 +256,9 @@ public void testRuleSpatialFilterTypeEnlargeAccess() throws ParseException { UserGroup g2 = createRole("group23"); GSUser user = createUser("auth22", g1, g2); - ruleAdminService.insert(new Rule(999, null, null, null, null, "s22", "r22", "w22", "l22", GrantType.ALLOW)); + ruleAdminService.insert(new Rule(999, null, null, null, null, "s22", "r22", null, "w22", "l22", GrantType.ALLOW)); - long id = ruleAdminService.insert(new Rule(15, null, "group22", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id = ruleAdminService.insert(new Rule(15, null, "group22", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits = new RuleLimits(); limits.setSpatialFilterType(SpatialFilterType.INTERSECT); limits.setCatalogMode(CatalogMode.HIDE); @@ -267,7 +267,7 @@ public void testRuleSpatialFilterTypeEnlargeAccess() throws ParseException { limits.setAllowedArea(area); ruleAdminService.setLimits(id, limits); - long id2 = ruleAdminService.insert(new Rule(16, null, "group23", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id2 = ruleAdminService.insert(new Rule(16, null, "group23", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits2 = new RuleLimits(); limits2.setSpatialFilterType(SpatialFilterType.CLIP); limits2.setCatalogMode(CatalogMode.HIDE); @@ -315,9 +315,9 @@ public void testRuleSpatialFilterTypeFourRules() throws ParseException { WKTReader reader = new WKTReader(); - ruleAdminService.insert(new Rule(999, null, null, null, null, "s22", "r22", "w22", "l22", GrantType.ALLOW)); + ruleAdminService.insert(new Rule(999, null, null, null, null, "s22", "r22", null, "w22", "l22", GrantType.ALLOW)); - long id = ruleAdminService.insert(new Rule(17, null, "group31", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id = ruleAdminService.insert(new Rule(17, null, "group31", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits = new RuleLimits(); limits.setSpatialFilterType(SpatialFilterType.INTERSECT); limits.setCatalogMode(CatalogMode.HIDE); @@ -326,7 +326,7 @@ public void testRuleSpatialFilterTypeFourRules() throws ParseException { limits.setAllowedArea(area); ruleAdminService.setLimits(id, limits); - long id2 = ruleAdminService.insert(new Rule(18, null, "group31", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id2 = ruleAdminService.insert(new Rule(18, null, "group31", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits2 = new RuleLimits(); limits2.setSpatialFilterType(SpatialFilterType.CLIP); limits2.setCatalogMode(CatalogMode.HIDE); @@ -335,7 +335,7 @@ public void testRuleSpatialFilterTypeFourRules() throws ParseException { limits2.setAllowedArea(area2); ruleAdminService.setLimits(id2, limits2); - long id3 = ruleAdminService.insert(new Rule(19, null, "group32", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id3 = ruleAdminService.insert(new Rule(19, null, "group32", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits3 = new RuleLimits(); limits3.setSpatialFilterType(SpatialFilterType.CLIP); limits3.setCatalogMode(CatalogMode.HIDE); @@ -344,7 +344,7 @@ public void testRuleSpatialFilterTypeFourRules() throws ParseException { limits3.setAllowedArea(area3); ruleAdminService.setLimits(id3, limits3); - long id4 = ruleAdminService.insert(new Rule(20, null, "group32", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id4 = ruleAdminService.insert(new Rule(20, null, "group32", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits4 = new RuleLimits(); limits4.setSpatialFilterType(SpatialFilterType.CLIP); limits4.setCatalogMode(CatalogMode.HIDE); @@ -385,9 +385,9 @@ public void testRuleSpatialFilterTypeFourRules2() throws ParseException { WKTReader reader = new WKTReader(); - ruleAdminService.insert(new Rule(999, null, null, null, null, "s22", "r22", "w22", "l22", GrantType.ALLOW)); + ruleAdminService.insert(new Rule(999, null, null, null, null, "s22", "r22", null, "w22", "l22", GrantType.ALLOW)); - long id = ruleAdminService.insert(new Rule(21, null, "group41", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id = ruleAdminService.insert(new Rule(21, null, "group41", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits = new RuleLimits(); limits.setSpatialFilterType(SpatialFilterType.CLIP); limits.setCatalogMode(CatalogMode.HIDE); @@ -396,7 +396,7 @@ public void testRuleSpatialFilterTypeFourRules2() throws ParseException { limits.setAllowedArea(area); ruleAdminService.setLimits(id, limits); - long id2 = ruleAdminService.insert(new Rule(22, null, "group41", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id2 = ruleAdminService.insert(new Rule(22, null, "group41", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits2 = new RuleLimits(); limits2.setSpatialFilterType(SpatialFilterType.CLIP); limits2.setCatalogMode(CatalogMode.HIDE); @@ -405,7 +405,7 @@ public void testRuleSpatialFilterTypeFourRules2() throws ParseException { limits2.setAllowedArea(area2); ruleAdminService.setLimits(id2, limits2); - long id3 = ruleAdminService.insert(new Rule(23, null, "group42", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id3 = ruleAdminService.insert(new Rule(23, null, "group42", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits3 = new RuleLimits(); limits3.setSpatialFilterType(SpatialFilterType.INTERSECT); limits3.setCatalogMode(CatalogMode.HIDE); @@ -414,7 +414,7 @@ public void testRuleSpatialFilterTypeFourRules2() throws ParseException { limits3.setAllowedArea(area3); ruleAdminService.setLimits(id3, limits3); - long id4 = ruleAdminService.insert(new Rule(24, null, "group42", null, null, "s22", "r22", "w22", "l22", GrantType.LIMIT)); + long id4 = ruleAdminService.insert(new Rule(24, null, "group42", null, null, "s22", "r22", null, "w22", "l22", GrantType.LIMIT)); RuleLimits limits4 = new RuleLimits(); limits4.setSpatialFilterType(SpatialFilterType.INTERSECT); limits4.setCatalogMode(CatalogMode.HIDE); diff --git a/src/services/core/webtest/pom.xml b/src/services/core/webtest/pom.xml index 9dabd0ae..dad8cb95 100644 --- a/src/services/core/webtest/pom.xml +++ b/src/services/core/webtest/pom.xml @@ -82,7 +82,7 @@ - dom4j + org.dom4j dom4j diff --git a/src/services/core/webtest/src/main/java/org/geoserver/geofence/servicetest/MainTest.java b/src/services/core/webtest/src/main/java/org/geoserver/geofence/servicetest/MainTest.java index 72b0c1c4..0443d587 100644 --- a/src/services/core/webtest/src/main/java/org/geoserver/geofence/servicetest/MainTest.java +++ b/src/services/core/webtest/src/main/java/org/geoserver/geofence/servicetest/MainTest.java @@ -126,30 +126,32 @@ public void afterPropertiesSet() throws Exception { /* Cite user rules */ // allow user cite full control over the cite workspace - ruleAdminService.insert(new Rule(priority++, citeUsername, null, null, null, null, null, "cite", null, GrantType.ALLOW)); + ruleAdminService.insert(new Rule(priority++, citeUsername, null, null, null, null, null, null, "cite", null, GrantType.ALLOW)); // allow only getmap, getcapatbilities and reflector usage on workspace sf - ruleAdminService.insert((new Rule(priority++, citeUsername, null, null, null, "wms", "GetMap", "sf", null, GrantType.ALLOW))); - ruleAdminService.insert((new Rule(priority++, citeUsername, null, null, null, "wms", "GetCapabilities", "sf", null, GrantType.ALLOW))); - ruleAdminService.insert((new Rule(priority++, citeUsername, null, null, null, "wms", "reflect", "sf", null, GrantType.ALLOW))); + ruleAdminService.insert((new Rule(priority++, citeUsername, null, null, null, "wms", "GetMap", null, "sf", null, GrantType.ALLOW))); + ruleAdminService.insert((new Rule(priority++, citeUsername, null, null, null, "wms", "GetCapabilities", null, "sf", null, GrantType.ALLOW))); + ruleAdminService.insert((new Rule(priority++, citeUsername, null, null, null, "wms", "reflect", null, "sf", null, GrantType.ALLOW))); // allow only GetMap and GetFeature the topp workspace /* wms user rules */ - ruleAdminService.insert((new Rule(priority++, wmsUsername, null, null, null, "wms", null, null, null, GrantType.ALLOW))); + ruleAdminService.insert((new Rule(priority++, wmsUsername, null, null, null, "wms", null, null, null, null, GrantType.ALLOW))); /* all powerful but only in a restricted area */ - Rule areaRestriction = new Rule(priority++, areaUsername, null, null, null, null, null, null, null, GrantType.LIMIT); + Rule areaRestriction = new Rule(priority++, areaUsername, null, null, null, null, null, null, null, null, GrantType.LIMIT); RuleLimits limits = new RuleLimits(); - limits.setAllowedArea((MultiPolygon) new WKTReader().read(MULTIPOLYGONWKT)); + MultiPolygon allowedArea = (MultiPolygon) new WKTReader().read(MULTIPOLYGONWKT); + allowedArea.setSRID(4326); + limits.setAllowedArea(allowedArea); long ruleId = ruleAdminService.insert(areaRestriction); ruleAdminService.setLimits(ruleId, limits); - ruleAdminService.insert((new Rule(priority++, areaUsername, null, null, null, null, null, null, null, GrantType.ALLOW))); + ruleAdminService.insert((new Rule(priority++, areaUsername, null, null, null, null, null, null, null, null, GrantType.ALLOW))); /* some users for interactive testing with the default data directory */ // uStates can do whatever, but only on topp:states - ruleAdminService.insert(new Rule(priority++, statesUsername, null, null, null, null, null, "topp", "states", GrantType.ALLOW)); + ruleAdminService.insert(new Rule(priority++, statesUsername, null, null, null, null, null, null, "topp", "states", GrantType.ALLOW)); // deny everything else - ruleAdminService.insert(new Rule(priority++, null, null, null, null, null, null, null, null, GrantType.DENY)); + ruleAdminService.insert(new Rule(priority++, null, null, null, null, null, null, null, null, null, GrantType.DENY)); new Thread(new Runnable() { @Override diff --git a/src/services/core/webtest/src/main/resources/log4j2.xml b/src/services/core/webtest/src/main/resources/log4j2.xml index d462b287..b1704698 100644 --- a/src/services/core/webtest/src/main/resources/log4j2.xml +++ b/src/services/core/webtest/src/main/resources/log4j2.xml @@ -5,7 +5,9 @@ - + diff --git a/src/services/modules/generic-api/pom.xml b/src/services/modules/generic-api/pom.xml index ea1899dc..346f94f8 100644 --- a/src/services/modules/generic-api/pom.xml +++ b/src/services/modules/generic-api/pom.xml @@ -35,14 +35,8 @@ com.sun.xml.ws jaxws-ri - 2.3.2 pom - - javassist - javassist - runtime - org.springframework spring-beans diff --git a/src/services/modules/login/api/pom.xml b/src/services/modules/login/api/pom.xml index 5912af56..eae3c7bd 100644 --- a/src/services/modules/login/api/pom.xml +++ b/src/services/modules/login/api/pom.xml @@ -36,11 +36,6 @@ - - javassist - javassist - runtime - org.springframework spring-beans diff --git a/src/services/modules/login/impl/pom.xml b/src/services/modules/login/impl/pom.xml index 65d7ebdd..4c9e8a18 100644 --- a/src/services/modules/login/impl/pom.xml +++ b/src/services/modules/login/impl/pom.xml @@ -44,11 +44,6 @@ - - javassist - javassist - runtime - org.springframework spring-beans diff --git a/src/services/modules/rest/api/pom.xml b/src/services/modules/rest/api/pom.xml index c28d7ecb..0125f1e3 100644 --- a/src/services/modules/rest/api/pom.xml +++ b/src/services/modules/rest/api/pom.xml @@ -57,11 +57,6 @@ - - javassist - javassist - runtime - junit junit diff --git a/src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/RESTConfigService.java b/src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/RESTConfigService.java index 9769f8ab..4b7308b8 100644 --- a/src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/RESTConfigService.java +++ b/src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/RESTConfigService.java @@ -43,6 +43,7 @@ public interface RESTConfigService /** * @deprecated misbehaves since usergroups introduction. Please use backup() */ + @Deprecated(forRemoval = true) @GET @Path("/full") @Produces(MediaType.APPLICATION_XML) @@ -91,6 +92,7 @@ void cleanup() /** * @deprecated */ + @Deprecated @PUT @Path("/full") @Produces(MediaType.APPLICATION_XML) @@ -103,6 +105,7 @@ RESTConfigurationRemapping setConfiguration(@Multipart("configuration") RESTFull /** * @deprecated */ + @Deprecated(forRemoval = true) @GET @Path("/users") @Produces(MediaType.APPLICATION_XML) @@ -112,6 +115,7 @@ RESTFullUserList getUsers() /** * @deprecated */ + @Deprecated(forRemoval = true) @GET @Path("/groups") @Produces(MediaType.APPLICATION_XML) @@ -123,6 +127,7 @@ RESTFullUserGroupList getUserGroups() /** * @deprecated used for testing only */ + @Deprecated(forRemoval = true) @POST @Path("/groups") @Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) @@ -135,6 +140,7 @@ void setUserGroups(@Multipart("groups")RESTFullUserGroupList groups) * * @deprecated used for testing only */ + @Deprecated(forRemoval = true) @POST @Path("/users/short") @Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) @@ -144,6 +150,7 @@ void setUsers(@Multipart("users")RESTShortUserList users) /** * @deprecated used for testing only */ + @Deprecated(forRemoval = true) @POST @Path("/instances/short") @Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) @@ -153,6 +160,7 @@ void setInstances(@Multipart("instances")RESTShortInstanceList instances) /** * @deprecated used for testing only */ + @Deprecated(forRemoval = true) @POST @Path("/rules/short") @Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) diff --git a/src/services/modules/rest/impl/pom.xml b/src/services/modules/rest/impl/pom.xml index 12c863a0..3ecc8ee6 100644 --- a/src/services/modules/rest/impl/pom.xml +++ b/src/services/modules/rest/impl/pom.xml @@ -87,13 +87,6 @@ - - - javassist - javassist - runtime - - org.springframework spring-beans diff --git a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTConfigServiceImpl.java b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTConfigServiceImpl.java index b6969626..60439131 100644 --- a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTConfigServiceImpl.java +++ b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTConfigServiceImpl.java @@ -294,10 +294,10 @@ public synchronized RESTConfigurationRemapping setConfiguration(RESTFullConfigur RESTConfigurationRemapping remap = new RESTConfigurationRemapping(); - RemapperCache groupCache = new RemapperCache(userGroupAdminService, remap.getUserGroups()); - RemapperCache userCache = new RemapperCache(userAdminService, remap.getUsers()); + RemapperCache groupCache = new RemapperCache<>(userGroupAdminService, remap.getUserGroups()); + RemapperCache userCache = new RemapperCache<>(userAdminService, remap.getUsers()); RemapperCache instanceCache = - new RemapperCache(instanceAdminService, remap.getInstances()); + new RemapperCache<>(instanceAdminService, remap.getInstances()); try { @@ -488,9 +488,9 @@ public void setInstances(RESTShortInstanceList instances) throws BadRequestRestE @Override public void setRules(RESTOutputRuleList rules) throws BadRequestRestEx, NotFoundRestEx, InternalErrorRestEx { int okCnt = 0; - Map groups = new HashMap(); - Map users = new HashMap(); - Map instances = new HashMap(); + Map groups = new HashMap<>(); + Map users = new HashMap<>(); + Map instances = new HashMap<>(); for (RESTOutputRule in : rules) { try { @@ -566,7 +566,7 @@ public void setRestBatchService(RESTBatchService restBatchService) { // ========================================================================== class RemapperCache> { - private Map cache = new HashMap(); + private Map cache = new HashMap<>(); private final Map idRemapper; private final SERVICE service; diff --git a/src/services/modules/rest/test/pom.xml b/src/services/modules/rest/test/pom.xml index aba2b055..b4aeaf1a 100644 --- a/src/services/modules/rest/test/pom.xml +++ b/src/services/modules/rest/test/pom.xml @@ -92,7 +92,7 @@ - dom4j + org.dom4j dom4j diff --git a/src/services/modules/rest/test/src/main/java/org/geoserver/geofence/services/servicetest/MainTest.java b/src/services/modules/rest/test/src/main/java/org/geoserver/geofence/services/servicetest/MainTest.java index f5ff1e53..1bbb05e4 100644 --- a/src/services/modules/rest/test/src/main/java/org/geoserver/geofence/services/servicetest/MainTest.java +++ b/src/services/modules/rest/test/src/main/java/org/geoserver/geofence/services/servicetest/MainTest.java @@ -97,14 +97,14 @@ private void setUpTestRule() { gs1.setDescription("A sample instance"); instanceAdminService.insert(gs1); - Rule r0 = new Rule(5, u1.getName(), p2.getName(), gs1, null, "s0", "r0", null, null, GrantType.ALLOW); + Rule r0 = new Rule(5, u1.getName(), p2.getName(), gs1, null, "s0", "r0", null, null, null, GrantType.ALLOW); ruleAdminService.insert(r0); final Long r1id; { - Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", "w1", "l1", GrantType.ALLOW); + Rule r1 = new Rule(10, null, null, null, null, "s1", "r1", null, "w1", "l1", GrantType.ALLOW); ruleAdminService.insert(r1); r1id = r1.getId(); } diff --git a/src/services/pom.xml b/src/services/pom.xml index 8ff09604..61cb4170 100644 --- a/src/services/pom.xml +++ b/src/services/pom.xml @@ -30,72 +30,56 @@ 3.8-SNAPSHOT geofence + + 11 + 11 + + 33-SNAPSHOT + 1.20.0 + + + 5.3.39 + 5.8.16 + 2.0.8 + 1.0.1 - 32-SNAPSHOT - - 3.3.2 - - - 5.1.1.RELEASE - 5.1.5.RELEASE - - - - - - - - - - - 2.7.0 - 2.8.1 - 1.3.03 + 2.7.3 + 2.12.2 + 1.4.01 2.1 1.2 - 2.17.2 + 2.24.3 2.3 - 3.2 - 1.7.0 + 3.2.2 + 1.9.4 1.2.2 - 1.4 + 1.17.1 + 3.3.2 - - 5.6.15.Final - - - - 42.1.1 + + 42.2.18 1.3.3 1.1 4.0 - - 1.6.1 - - - + 2.1.4 3.1.0.2-fuse - 2.0.8 - 1.0.1 1.5.4 2.0 9.2.13.v20150730 - 2.2.3 - 2.2 - - 3.8.0.GA + 3.3.0 + 3.30.2-GA 1.3.3-SNAPSHOT @@ -235,9 +219,9 @@ runtime - - - + + + org.apache.logging.log4j @@ -270,7 +254,7 @@ - dom4j + org.dom4j dom4j ${dom4j-version} @@ -409,55 +393,21 @@ ${cxf-version} - - - - - - - - - + javax.xml.bind jaxb-api - 2.3.1 + 2.4.0-b180830.0359 - com.sun.xml.bind - jaxb-impl - 2.3.1 - ---> - - - javax.xml.bind - jaxb-api - 2.4.0-b180830.0359 - - - org.glassfish.jaxb - jaxb-runtime - 2.4.0-b180830.0438 - + org.glassfish.jaxb + jaxb-runtime + 2.4.0-b180830.0438 + - - + + + asm asm 3.3.1 - - cglib - cglib - 3.2.12 - cglib cglib-nodep - 3.2.12 + ${cglib-version} @@ -639,30 +584,6 @@ ${hibernate-version} - - - - @@ -683,17 +604,19 @@ ${postgresql.jdbc.version} - + com.h2database h2 - 1.4.200 + + + 2.3.232 - - + + org.locationtech.jts @@ -702,39 +625,8 @@ - + - - - - - org.geotools gt-main @@ -833,7 +725,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 + 3.5.2 +
- - - -
- - @@ -922,25 +764,6 @@ - - - - - - - diff --git a/src/services/webapp/pom.xml b/src/services/webapp/pom.xml index c455eefa..195c6eef 100644 --- a/src/services/webapp/pom.xml +++ b/src/services/webapp/pom.xml @@ -88,7 +88,7 @@ - dom4j + org.dom4j dom4j diff --git a/src/services/webapp/src/main/resources/geofence-datasource-ovr.properties b/src/services/webapp/src/main/resources/geofence-datasource-ovr.properties index 4f4fd8e4..389f4b41 100644 --- a/src/services/webapp/src/main/resources/geofence-datasource-ovr.properties +++ b/src/services/webapp/src/main/resources/geofence-datasource-ovr.properties @@ -12,9 +12,9 @@ ## contains some info about each setting. ################################################################################ -geofenceVendorAdapter.databasePlatform=org.hibernatespatial.geodb.GeoDBDialect +geofenceVendorAdapter.databasePlatform=org.hibernate.spatial.dialect.h2geodb.GeoDBDialect geofenceDataSource.driverClassName=org.h2.Driver -geofenceDataSource.url=jdbc:h2:geofence_db/geofence +geofenceDataSource.url=jdbc:h2:${user.dir}/geofence_db/geofence geofenceDataSource.username=sa geofenceDataSource.password=sa geofenceEntityManagerFactory.jpaPropertyMap[hibernate.default_schema]=public From 7ff784cc9ca3ba096ed5eaa7d4e6fa8b9defb64a Mon Sep 17 00:00:00 2001 From: Emanuele Tajariol Date: Mon, 3 Feb 2025 12:50:03 +0100 Subject: [PATCH 10/11] jdk11: many library updates and code alignment - missing file --- .../geofence/core/model/AdminRule.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/AdminRule.java b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/AdminRule.java index a06571a8..49793278 100644 --- a/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/AdminRule.java +++ b/src/services/core/model/src/main/java/org/geoserver/geofence/core/model/AdminRule.java @@ -16,8 +16,11 @@ import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; +import javax.persistence.ForeignKey; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.UniqueConstraint; @@ -26,8 +29,6 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; -import org.hibernate.annotations.ForeignKey; -import org.hibernate.annotations.Index; /** * An AdminRule expresses if a given combination of request access is allowed or not. @@ -39,14 +40,23 @@ * @author ETj (etj at geo-solutions.it) */ @Entity(name = "AdminRule") -@Table(name = "gf_adminrule", uniqueConstraints = { - @UniqueConstraint(columnNames = {"username", "rolename", "instance_id", "workspace"})}) +@Table(name = "gf_adminrule", + uniqueConstraints = { // @InternalModel + @UniqueConstraint( + columnNames = {"username", "rolename", "instance_id", "workspace"}, // @InternalModel + name = "gf_adminrule_username_rolename_instance_id_workspace_key" // @InternalModel + )}, // @InternalModel + indexes = { // @InternalModel + @Index(name="idx_adminrule_priority", columnList = "priority"), + @Index(name = "idx_adminrule_workspace", columnList = "workspace") + } // @InternalModel +) // @InternalModel @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "Rule") @XmlRootElement(name = "AdminRule") @XmlType(propOrder={"id","priority","username","rolename","instance","addressRange","workspace","access"}) public class AdminRule implements Identifiable, Serializable, Prioritizable, IPRangeProvider { - private static final long serialVersionUID = -5127129225384707999L; + private static final long serialVersionUID = -3807129225384707999L; /** The id. */ @Id @@ -56,7 +66,6 @@ public class AdminRule implements Identifiable, Serializable, Prioritizable, IPR /** Lower numbers have higher priority */ @Column(nullable = false) - @Index(name = "idx_adminrule_priority") private long priority; @Column(name = "username", nullable = true) @@ -66,7 +75,7 @@ public class AdminRule implements Identifiable, Serializable, Prioritizable, IPR private String rolename; @ManyToOne(optional = true, fetch = FetchType.EAGER) - @ForeignKey(name = "fk_adminrule_instance") + @JoinColumn(foreignKey = @ForeignKey(name="fk_adminrule_instance")) private GSInstance instance; @Embedded @@ -77,7 +86,6 @@ public class AdminRule implements Identifiable, Serializable, Prioritizable, IPR private IPAddressRange addressRange; @Column - @Index(name = "idx_adminrule_workspace") private String workspace; @Enumerated(EnumType.STRING) From a887e7333eeb53c83cf0f88f73ce83840a319431 Mon Sep 17 00:00:00 2001 From: Emanuele Tajariol Date: Mon, 3 Feb 2025 12:52:15 +0100 Subject: [PATCH 11/11] jdk11: deps cleanup --- src/services/core/services-impl/pom.xml | 6 ---- src/services/core/webtest/pom.xml | 40 +------------------------ src/services/modules/rest/impl/pom.xml | 7 ----- src/services/modules/rest/test/pom.xml | 22 -------------- 4 files changed, 1 insertion(+), 74 deletions(-) diff --git a/src/services/core/services-impl/pom.xml b/src/services/core/services-impl/pom.xml index 71df7555..6024bf18 100644 --- a/src/services/core/services-impl/pom.xml +++ b/src/services/core/services-impl/pom.xml @@ -79,12 +79,6 @@ - - - com.sun.xml.ws - jaxws-ri - pom - org.dom4j diff --git a/src/services/core/webtest/pom.xml b/src/services/core/webtest/pom.xml index dad8cb95..b2fa57f7 100644 --- a/src/services/core/webtest/pom.xml +++ b/src/services/core/webtest/pom.xml @@ -117,7 +117,6 @@ javax.servlet javax.servlet-api - 3.1.0 provided @@ -176,12 +175,7 @@ - + org.springframework spring-beans @@ -202,10 +196,6 @@ org.springframework spring-tx - org.springframework spring-orm @@ -233,34 +223,6 @@ test - - - - - - - diff --git a/src/services/modules/rest/impl/pom.xml b/src/services/modules/rest/impl/pom.xml index 3ecc8ee6..071592dd 100644 --- a/src/services/modules/rest/impl/pom.xml +++ b/src/services/modules/rest/impl/pom.xml @@ -48,13 +48,6 @@ - - com.sun.xml.ws - jaxws-ri - - pom - - jakarta.xml.ws diff --git a/src/services/modules/rest/test/pom.xml b/src/services/modules/rest/test/pom.xml index b4aeaf1a..c1d8048b 100644 --- a/src/services/modules/rest/test/pom.xml +++ b/src/services/modules/rest/test/pom.xml @@ -219,27 +219,6 @@ org.springframework spring-web - - - - @@ -247,7 +226,6 @@ junit junit - 4.13.1 test