From ee6a1a06b43400672cf4f6d93ceffee965d8399a Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Thu, 9 Jan 2020 14:23:42 +0100
Subject: [PATCH] Added findOrganismsByLocalNames endpoint

---
 .../logic/controller/session/OrganismBean.java |  9 ++++++++-
 .../no/nibio/vips/logic/entity/Organism.java   |  3 ++-
 .../vips/logic/entity/OrganismLocale.java      |  5 +++--
 .../nibio/vips/logic/service/LogicService.java | 18 ++++++++++++++++++
 4 files changed, 31 insertions(+), 4 deletions(-)

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 5882ed5c..55166fdb 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 35423557..3e2ba63f 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 9bcdd4d4..92d95108 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 1dc41894..359cd31d 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 
-- 
GitLab