From c00fbe453d6423a4dfbeaeb0365c49b978a27ef7 Mon Sep 17 00:00:00 2001 From: etj Date: Fri, 20 Dec 2019 13:01:53 -0700 Subject: [PATCH] #128: jdk11: services-impl modules builds - WIP --- .../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 | 52 +++++++++---------- .../geofence/services/util/FilterUtils.java | 20 +++---- src/services/pom.xml | 4 +- 9 files changed, 97 insertions(+), 101 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 cf89ce0c..9ff8dffd 100644 --- a/src/services/core/services-impl/pom.xml +++ b/src/services/core/services-impl/pom.xml @@ -95,12 +95,12 @@ log4j log4j - + @@ -125,7 +125,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 95415b24..ab413d99 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 7df23039..8c3fd42b 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 4580b1a0..3b77261f 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 @@ -14,7 +14,6 @@ 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.model.*; import org.geoserver.geofence.core.model.enums.AccessType; @@ -40,6 +39,7 @@ import java.util.*; import java.util.Map.Entry; +import org.geoserver.geofence.core.dao.search.Search.JoinInfo; import static org.geoserver.geofence.services.util.FilterUtils.filterByAddress; @@ -599,41 +599,41 @@ 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, "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, "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: @@ -737,17 +737,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 0bde34e4..35949bc5 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 @@ -97,32 +97,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 8f61b3ac..44b6f12e 100644 --- a/src/services/pom.xml +++ b/src/services/pom.xml @@ -652,7 +652,7 @@ com.h2database h2 - 1.3.176 + 1.4.200 @@ -662,7 +662,7 @@ org.locationtech.jts jts-core - 1.15.1 + 1.16.1