diff --git a/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java b/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java index 5882ed5c64d3780509ae2f0fed60707f9b9513b8..55166fdb2c67877235ac41c51bc17768ab4e81af 100755 --- a/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java @@ -46,7 +46,7 @@ import no.nibio.vips.logic.entity.OrganismLocalePK; import no.nibio.vips.logic.util.HierarchyCategoryLocaleNames; /** - * @copyright 2014 <a href="http://www.nibio.no/">NIBIO</a> + * @copyright 2014-2020 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ @Stateless @@ -481,4 +481,11 @@ public class OrganismBean { public List<Organism> findOrganismsByLatinNames(List<String> latinNames) { return em.createNamedQuery("Organism.findByLatinNames").setParameter("latinNames", latinNames).getResultList(); } + + public List<Organism> findOrganismsByLocalNames(List<String> localNames, String locale) { + return em.createNamedQuery("Organism.findByLocalNames") + .setParameter("localNames", localNames) + .setParameter("locale", locale) + .getResultList(); + } } diff --git a/src/main/java/no/nibio/vips/logic/entity/Organism.java b/src/main/java/no/nibio/vips/logic/entity/Organism.java index 35423557d6c38601966bfc22b8b25df0a16fde8d..3e2ba63fb3a651849debdde4ce690e0862884454 100755 --- a/src/main/java/no/nibio/vips/logic/entity/Organism.java +++ b/src/main/java/no/nibio/vips/logic/entity/Organism.java @@ -42,7 +42,7 @@ import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlRootElement; /** - * @copyright 2013-2014 <a href="http://www.nibio.no/">NIBIO</a> + * @copyright 2013-2020 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ @Entity @@ -57,6 +57,7 @@ import javax.xml.bind.annotation.XmlRootElement; @NamedQuery(name = "Organism.findByParentOrganismId", query = "SELECT o FROM Organism o WHERE o.parentOrganismId = :parentOrganismId"), @NamedQuery(name = "Organism.findByLatinName", query = "SELECT o FROM Organism o WHERE o.latinName = :latinName"), @NamedQuery(name = "Organism.findByLatinNames", query = "SELECT o FROM Organism o WHERE o.latinName IN :latinNames"), + @NamedQuery(name = "Organism.findByLocalNames", query = "SELECT o FROM Organism o WHERE o.organismId IN (SELECT ol.organismId FROM OrganismLocale ol WHERE ol.localName IN(:localNames) AND ol.organismLocalePK.locale = :locale)"), @NamedQuery(name = "Organism.findByTradeName", query = "SELECT o FROM Organism o WHERE o.tradeName = :tradeName"), @NamedQuery(name = "Organism.findByLogicallyDeleted", query = "SELECT o FROM Organism o WHERE o.logicallyDeleted = :logicallyDeleted")}) public class Organism implements Serializable { diff --git a/src/main/java/no/nibio/vips/logic/entity/OrganismLocale.java b/src/main/java/no/nibio/vips/logic/entity/OrganismLocale.java index 9bcdd4d428e3de81f25423510461c3ebbf51fbd6..92d95108cc3fa06fb9b582a501088bb97e2908a9 100755 --- a/src/main/java/no/nibio/vips/logic/entity/OrganismLocale.java +++ b/src/main/java/no/nibio/vips/logic/entity/OrganismLocale.java @@ -30,7 +30,7 @@ import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlRootElement; /** - * @copyright 2013-2014 <a href="http://www.nibio.no/">NIBIO</a> + * @copyright 2013-2020 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ @Entity @@ -40,7 +40,8 @@ import javax.xml.bind.annotation.XmlRootElement; @NamedQuery(name = "OrganismLocale.findAll", query = "SELECT o FROM OrganismLocale o"), @NamedQuery(name = "OrganismLocale.findByOrganismId", query = "SELECT o FROM OrganismLocale o WHERE o.organismLocalePK.organismId = :organismId"), @NamedQuery(name = "OrganismLocale.findByLocale", query = "SELECT o FROM OrganismLocale o WHERE o.organismLocalePK.locale = :locale"), - @NamedQuery(name = "OrganismLocale.findByLocalName", query = "SELECT o FROM OrganismLocale o WHERE o.localName = :localName")}) + @NamedQuery(name = "OrganismLocale.findByLocalName", query = "SELECT o FROM OrganismLocale o WHERE o.localName = :localName")//, +}) public class OrganismLocale implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId diff --git a/src/main/java/no/nibio/vips/logic/service/LogicService.java b/src/main/java/no/nibio/vips/logic/service/LogicService.java index 1dc41894cc3e6f50f68ca3e625d31e9a00c57017..359cd31dab9f0a90f0a5f02babd4e5e1acd3eaff 100755 --- a/src/main/java/no/nibio/vips/logic/service/LogicService.java +++ b/src/main/java/no/nibio/vips/logic/service/LogicService.java @@ -712,6 +712,24 @@ public class LogicService { return Response.ok().entity(organismList).build(); } + /** + * Look up organisms by local names + * @param keywords + * @return + */ + @GET + @Path("organism/search/localnames/{locale}") + @Produces("application/json;charset=UTF-8") + public Response findOrganismsByLocalNames( + @PathParam("locale") String locale, + @QueryParam("keywords") String keywords + ) + { + List<String> localNames = Arrays.asList(keywords.split(",")).stream().map(String::trim).collect(Collectors.toList()); + List<Organism> organismList = SessionControllerGetter.getOrganismBean().findOrganismsByLocalNames(localNames, locale); + return Response.ok().entity(organismList).build(); + } + /** * Get a list of crops * @return