From fb7bd13755a24e1e9a742d8ab72f974b27e30546 Mon Sep 17 00:00:00 2001 From: Matija Obreza Date: Tue, 18 Sep 2018 20:47:15 +0200 Subject: [PATCH] Implemented filtering on institute.networks --- .../elastic/ElasticQueryBuilder.java | 4 ++ .../server/model/impl/FaoInstitute.java | 43 ++++++++++++++++--- .../server/model/impl/Organization.java | 2 +- .../genesys2/server/mvc/SubsetController.java | 3 +- .../filter/AppliedFiltersConverter.java | 10 +++++ .../service/filter/InstituteFilter.java | 8 ++++ .../api/v1/SubsetRestControllerTest.java | 1 + 7 files changed, 62 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/genesys2/server/component/elastic/ElasticQueryBuilder.java b/src/main/java/org/genesys2/server/component/elastic/ElasticQueryBuilder.java index 114b674bf..7614c6967 100644 --- a/src/main/java/org/genesys2/server/component/elastic/ElasticQueryBuilder.java +++ b/src/main/java/org/genesys2/server/component/elastic/ElasticQueryBuilder.java @@ -66,8 +66,12 @@ public class ElasticQueryBuilder implements Visitor { } else if (path.startsWith("accessionId.")) { // Example of @JsonUnwrapped return path.replace("accessionId.", ""); + } else if (path.equals("institute.networks.slug")) { + // Example of @JsonIdentityReference(alwaysAsId = true) + return "institute.networks"; } } + return path; } diff --git a/src/main/java/org/genesys2/server/model/impl/FaoInstitute.java b/src/main/java/org/genesys2/server/model/impl/FaoInstitute.java index 29515c492..d0407bd37 100644 --- a/src/main/java/org/genesys2/server/model/impl/FaoInstitute.java +++ b/src/main/java/org/genesys2/server/model/impl/FaoInstitute.java @@ -20,11 +20,24 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.text.MessageFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.MapKey; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; -import javax.persistence.*; - -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import org.genesys.blocks.model.BasicModel; import org.genesys.blocks.model.EntityId; @@ -36,7 +49,11 @@ import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldIndex; import org.springframework.data.elasticsearch.annotations.FieldType; +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonIdentityReference; import com.fasterxml.jackson.annotation.JsonView; +import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.databind.ObjectMapper; @Cacheable @Entity @@ -46,7 +63,7 @@ public class FaoInstitute extends BasicModel implements GeoReferencedEntity, Acl private static final long serialVersionUID = -8773002513838748431L; private static final int LEN_ACRONYM = 50; - + private static final ObjectMapper mapper = new ObjectMapper(); @Column(unique = true, nullable = false, length = 10) @@ -94,6 +111,13 @@ public class FaoInstitute extends BasicModel implements GeoReferencedEntity, Acl @IgnoreField private Map settings = new HashMap(); + @JsonView({ JsonViews.Public.class }) + @ManyToMany(cascade = {}, fetch = FetchType.LAZY, mappedBy = "members") + @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "slug") + @JsonIdentityReference(alwaysAsId = true) + @Field(index = FieldIndex.not_analyzed, type = FieldType.String) + private List networks; + private long accessionCount; private boolean pgrActivity; private boolean maintainsCollection; @@ -108,7 +132,6 @@ public class FaoInstitute extends BasicModel implements GeoReferencedEntity, Acl @Column(name = "pdciHistogram") private String pdciHistogram; - public FaoInstitute() { } @@ -277,6 +300,14 @@ public class FaoInstitute extends BasicModel implements GeoReferencedEntity, Acl this.codeSGSV = codeSGSV; } + public List getNetworks() { + return networks; + } + + public void setNetworks(List networks) { + this.networks = networks; + } + public Double getPdciMin() { return pdciMin; } diff --git a/src/main/java/org/genesys2/server/model/impl/Organization.java b/src/main/java/org/genesys2/server/model/impl/Organization.java index b3e6165f1..c23566d24 100644 --- a/src/main/java/org/genesys2/server/model/impl/Organization.java +++ b/src/main/java/org/genesys2/server/model/impl/Organization.java @@ -40,7 +40,7 @@ public class Organization extends AuditedModel { private static final long serialVersionUID = 2710908645431936666L; - @Column(nullable = false, length = 150) + @Column(nullable = false, length = 150, unique = true) private String slug; @Lob diff --git a/src/main/java/org/genesys2/server/mvc/SubsetController.java b/src/main/java/org/genesys2/server/mvc/SubsetController.java index c3aa868cf..89dc3d820 100644 --- a/src/main/java/org/genesys2/server/mvc/SubsetController.java +++ b/src/main/java/org/genesys2/server/mvc/SubsetController.java @@ -71,8 +71,7 @@ public class SubsetController extends BaseController { public String listSubsets(final HttpServletResponse response, final ModelMap model, @RequestParam(value = "page", required = false, defaultValue = "1") int page, @RequestParam(value = "results", required = true, defaultValue = "50") int results) throws IOException { - final SubsetFilter filter = new SubsetFilter(); - filter.state.add(PublishState.PUBLISHED); + final SubsetFilter filter = new SubsetFilter().state(PublishState.PUBLISHED); final Page subsets = subsetService.list(filter, new PageRequest(page - 1, Integer.min(results, maxPageSize), new Sort("id"))); model.addAttribute("pagedData", subsets); diff --git a/src/main/java/org/genesys2/server/service/filter/AppliedFiltersConverter.java b/src/main/java/org/genesys2/server/service/filter/AppliedFiltersConverter.java index a7dc6e70e..cd860fd84 100644 --- a/src/main/java/org/genesys2/server/service/filter/AppliedFiltersConverter.java +++ b/src/main/java/org/genesys2/server/service/filter/AppliedFiltersConverter.java @@ -462,6 +462,16 @@ public class AppliedFiltersConverter { code.addAll(codes); break; } + case "networks": { + Set networks = ff.networks; + if (networks == null) { + networks = ff.networks = new HashSet<>(); + } + Set codes = toStringSet(af); + LOG.debug("Got Institute networks {}", codes); + networks.addAll(codes); + break; + } default: throw new RuntimeException("Unhandled Institute filter property=" + filterName); } diff --git a/src/main/java/org/genesys2/server/service/filter/InstituteFilter.java b/src/main/java/org/genesys2/server/service/filter/InstituteFilter.java index eaff0d6e8..6b348b14d 100644 --- a/src/main/java/org/genesys2/server/service/filter/InstituteFilter.java +++ b/src/main/java/org/genesys2/server/service/filter/InstituteFilter.java @@ -19,6 +19,7 @@ import static org.genesys2.server.model.impl.QFaoInstitute.faoInstitute; import java.util.Set; +import org.apache.commons.collections.CollectionUtils; import org.genesys.blocks.model.filters.BasicModelFilter; import org.genesys.blocks.model.filters.StringFilter; import org.genesys2.server.model.impl.FaoInstitute; @@ -45,6 +46,9 @@ public class InstituteFilter extends BasicModelFilter networks; + /** * Builds the query. * @@ -80,6 +84,10 @@ public class InstituteFilter extends BasicModelFilter