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 114b674bf99496a66bc2f91edccf19b06bc3d760..7614c6967d904047c294d42291d8bfb2ea83c910 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 29515c4926b8e71c2779d080fc42196086a35fee..d0407bd375a848f6d20c0fabd27a80685c933d81 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 b3e6165f142e875c44d3b671aeda5209583bf3f4..c23566d242f94c77cc25c34d5ea5866e7f7c572f 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 c3aa868cfa04ad1953397fdb8e0106cb89372da5..89dc3d8201e2fe3264ffe61a84227880b4de7846 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 a7dc6e70e15b9b86ad2de22c9b6806805c91127e..cd860fd8456ff8e687ad9ab375740a4a2b4d70f6 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 eaff0d6e8347ddd83c94712904144792b0b6b72e..6b348b14d01a071f93ea683975824a5f0c2a7636 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