Skip to content

Commit

Permalink
geoserver#128: jdk11: services-impl modules builds - WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
etj committed Dec 20, 2019
1 parent 7e5bd25 commit c00fbe4
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 101 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,33 @@
*/
public class Search<O, R> {

Class<O> outType;
Class<R> rootClass;
private final Class<O> outType;
private final Class<R> rootClass;
private final EntityManager em;
private final CriteriaBuilder cb;
private CriteriaQuery q;
private Root<R> root;
private List<Predicate> whereClauses = new ArrayList<>() ;
private List<Order> 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<O> resultType, Class<R> rootClass) {
this.em = em;
Expand Down Expand Up @@ -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) {
Expand All @@ -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));
}

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -206,7 +223,7 @@ private void applyPagination(TypedQuery<O> query) throws IllegalStateException {
if(maxResults == null) {
throw new IllegalStateException("Page set without maxresults");
}
query.setFirstResult((page-1) * maxResults);
query.setFirstResult(page * maxResults);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -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
Expand Down Expand Up @@ -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 {
Expand Down
30 changes: 21 additions & 9 deletions src/services/core/services-impl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,12 @@
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<!--
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
-->
<!--
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
-->

<!-- =========================================================== -->
<!-- PERSISTENCE -->
Expand All @@ -125,7 +125,7 @@
</dependency>

<!-- HIBERNATE-GENERIC-DAO -->
<!-- <dependency>
<!-- <dependency>
<groupId>com.googlecode.genericdao</groupId>
<artifactId>dao</artifactId>
<exclusions>
Expand All @@ -140,7 +140,7 @@
<artifactId>search-jpa-hibernate</artifactId>
</dependency>-->

<!-- <dependency>
<!-- <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
Expand All @@ -158,7 +158,7 @@
<!-- =========================================================== -->
<!-- TEST -->

<!-- <dependency>
<!-- <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<scope>test</scope>
Expand Down Expand Up @@ -191,6 +191,18 @@
</includes>
</resource>
</resources>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<!--<version></version>-->
<configuration>
<trimStackTrace>false</trimStackTrace>
</configuration>
</plugin>

</plugins>
</build>

<profiles>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -180,11 +179,11 @@ public ShortAdminRule getRule(RuleFilter filter) throws BadRequestServiceEx {

@Override
public List<ShortAdminRule> getRulesByPriority(long priority, Integer page, Integer entries) {
Search searchCriteria = ruleDAO.createSearch();
searchCriteria.addFilterGreaterOrEqual("priority", priority);
searchCriteria.addSortAsc("priority");
addPagingConstraints(searchCriteria, page, entries);
List<AdminRule> found = ruleDAO.search(searchCriteria);
Search search = ruleDAO.createSearch();
search.addFilterGreaterOrEqual("priority", priority);
search.addSortAsc("priority");
addPagingConstraints(search, page, entries);
List<AdminRule> found = ruleDAO.search(search);
return convertToShortList(found);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -599,41 +599,41 @@ protected Set<String> validateUserRoles(RuleFilter filter) throws BadRequestServ
}

protected List<Rule> 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<Rule> 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<Rule> 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:
Expand Down Expand Up @@ -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<AdminRule> found = adminRuleDAO.search(searchCriteria);
List<AdminRule> found = adminRuleDAO.search(search);
found = filterByAddress(filter, found);

switch(found.size()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,32 +97,32 @@ List<T> filterByAddress(RuleFilter filter, List<T> rules)
*
* We're dealing with IDs here, so <U>we'll suppose that the related object id field is called "id"</U>.
*/
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;

Expand Down
Loading

0 comments on commit c00fbe4

Please sign in to comment.