From 3b31b987ac525112b03bb84d411bb4beee051d5d Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@bioforsk.no>
Date: Fri, 13 Feb 2015 13:19:11 +0100
Subject: [PATCH] Added pest and crop properties to organism

---
 .../ForecastConfigurationController.java      |  4 +--
 .../servlet/OrganismController.java           |  2 ++
 .../bioforsk/vips/logic/entity/Organism.java  | 34 +++++++++++++++++++
 .../vips/logic/i18n/vipslogictexts.properties |  2 ++
 .../logic/i18n/vipslogictexts_bs.properties   |  2 ++
 .../logic/i18n/vipslogictexts_hr.properties   |  2 ++
 .../logic/i18n/vipslogictexts_nb.properties   |  2 ++
 .../logic/i18n/vipslogictexts_sr.properties   |  2 ++
 .../webapp/formdefinitions/organismForm.json  | 10 ++++++
 .../templates/forecastConfigurationForm.ftl   |  4 +--
 src/main/webapp/templates/organismForm.ftl    | 16 +++++++++
 11 files changed, 76 insertions(+), 4 deletions(-)

diff --git a/src/main/java/no/bioforsk/vips/logic/controller/servlet/ForecastConfigurationController.java b/src/main/java/no/bioforsk/vips/logic/controller/servlet/ForecastConfigurationController.java
index f4f2cd2e..8749985b 100644
--- a/src/main/java/no/bioforsk/vips/logic/controller/servlet/ForecastConfigurationController.java
+++ b/src/main/java/no/bioforsk/vips/logic/controller/servlet/ForecastConfigurationController.java
@@ -35,7 +35,6 @@ import no.bioforsk.vips.logic.controller.session.ForecastBean;
 import no.bioforsk.vips.logic.controller.session.UserBean;
 import no.bioforsk.vips.logic.entity.ForecastConfiguration;
 import no.bioforsk.vips.logic.entity.ModelInformation;
-import no.bioforsk.vips.logic.entity.Organism;
 import no.bioforsk.vips.logic.entity.Organization;
 import no.bioforsk.vips.logic.entity.VipsLogicRole;
 import no.bioforsk.vips.logic.entity.VipsLogicUser;
@@ -176,7 +175,8 @@ public class ForecastConfigurationController extends HttpServlet {
                         }
                         request.setAttribute("forecastConfiguration", forecastConfiguration);
                         // All organisms used for parent organism list
-                        request.setAttribute("allOrganisms", em.createNamedQuery("Organism.findAll").getResultList());
+                        request.setAttribute("allCrops", em.createNamedQuery("Organism.findAllCrops").getResultList());
+                        request.setAttribute("allPests", em.createNamedQuery("Organism.findAllPests").getResultList());
                         // Hierarchy categories
                         request.setAttribute("hierarchyCategories", SessionControllerGetter.getOrganismBean().getHierarchyCategoryNames(SessionLocaleUtil.getCurrentLocale(request)));
                         request.setAttribute("modelInformations", em.createNamedQuery("ModelInformation.findAll").getResultList());
diff --git a/src/main/java/no/bioforsk/vips/logic/controller/servlet/OrganismController.java b/src/main/java/no/bioforsk/vips/logic/controller/servlet/OrganismController.java
index 4985a3d9..73fd6e60 100644
--- a/src/main/java/no/bioforsk/vips/logic/controller/servlet/OrganismController.java
+++ b/src/main/java/no/bioforsk/vips/logic/controller/servlet/OrganismController.java
@@ -194,6 +194,8 @@ public class OrganismController extends HttpServlet {
                 FormValidation formValidation = FormValidator.validateForm("organismForm",request,getServletContext());
                 if(formValidation.isValid())
                 {
+                    organism.setIsCrop(formValidation.getFormField("isCrop").getWebValue() != null);
+                    organism.setIsPest(formValidation.getFormField("isPest").getWebValue() != null);
                     organism.setLatinName(formValidation.getFormField("latinName").getWebValue());
                     organism.setTradeName(formValidation.getFormField("tradeName").getWebValue());
                     organism.setHierarchyCategoryId(formValidation.getFormField("hierarchyCategoryId").getValueAsInteger());
diff --git a/src/main/java/no/bioforsk/vips/logic/entity/Organism.java b/src/main/java/no/bioforsk/vips/logic/entity/Organism.java
index 8c1c4752..2be85aff 100644
--- a/src/main/java/no/bioforsk/vips/logic/entity/Organism.java
+++ b/src/main/java/no/bioforsk/vips/logic/entity/Organism.java
@@ -48,6 +48,8 @@ import javax.xml.bind.annotation.XmlRootElement;
 @XmlRootElement
 @NamedQueries({
     @NamedQuery(name = "Organism.findAll", query = "SELECT o FROM Organism o"),
+    @NamedQuery(name = "Organism.findAllCrops", query = "SELECT o FROM Organism o WHERE o.isCrop = true AND o.logicallyDeleted = false"),
+    @NamedQuery(name = "Organism.findAllPests", query = "SELECT o FROM Organism o WHERE o.isPest = true AND o.logicallyDeleted = false"),
     @NamedQuery(name = "Organism.findByOrganismId", query = "SELECT o FROM Organism o WHERE o.organismId = :organismId"),
     @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"),
@@ -70,6 +72,10 @@ public class Organism implements Serializable {
     @NotNull
     @Column(name = "logically_deleted")
     private boolean logicallyDeleted;
+    @Column(name = "is_pest")
+    private Boolean isPest;
+    @Column(name = "is_crop")
+    private Boolean isCrop;
     
     // We simplify this to avoid very large queries
     @Column(name = "parent_organism_id")
@@ -284,4 +290,32 @@ public class Organism implements Serializable {
         }
         return null;
     }
+
+    /**
+     * @return the isPest
+     */
+    public Boolean getIsPest() {
+        return isPest;
+    }
+
+    /**
+     * @param isPest the isPest to set
+     */
+    public void setIsPest(Boolean isPest) {
+        this.isPest = isPest;
+    }
+
+    /**
+     * @return the isCrop
+     */
+    public Boolean getIsCrop() {
+        return isCrop;
+    }
+
+    /**
+     * @param isCrop the isCrop to set
+     */
+    public void setIsCrop(boolean isCrop) {
+        this.isCrop = isCrop;
+    }
 }
diff --git a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts.properties b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts.properties
index 8aaedac4..df644816 100644
--- a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts.properties
+++ b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts.properties
@@ -257,3 +257,5 @@ pestOrganismId=Pest
 weatherForecastProvider=Weather forecast service
 none=None
 allOrganizations=All organizations
+isPest=Is pest
+isCrop=Is crop
diff --git a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_bs.properties b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_bs.properties
index 6e86aab5..88f31f84 100644
--- a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_bs.properties
+++ b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_bs.properties
@@ -257,3 +257,5 @@ pestOrganismId=Pest
 weatherForecastProvider=Weather forecast service
 none=None
 allOrganizations=All organizations
+isPest=Is pest
+isCrop=Is crop
diff --git a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_hr.properties b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_hr.properties
index 2881afe3..d93a4703 100644
--- a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_hr.properties
+++ b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_hr.properties
@@ -256,3 +256,5 @@ pestOrganismId=Pest
 weatherForecastProvider=Weather forecast service
 none=None
 allOrganizations=All organizations
+isPest=Is pest
+isCrop=Is crop
diff --git a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_nb.properties b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_nb.properties
index ef3d2a90..9e013aa3 100644
--- a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_nb.properties
+++ b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_nb.properties
@@ -257,3 +257,5 @@ pestOrganismId=Skadegj\u00f8rer
 weatherForecastProvider=V\u00e6rvarslingstjeneste
 none=Ingen
 allOrganizations=Alle organisasjoner
+isPest=Er skadegj\u00f8rer
+isCrop=Er kultur
diff --git a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_sr.properties b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_sr.properties
index 731fde48..477293f5 100644
--- a/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_sr.properties
+++ b/src/main/resources/no/bioforsk/vips/logic/i18n/vipslogictexts_sr.properties
@@ -257,3 +257,5 @@ pestOrganismId=Pest
 weatherForecastProvider=Weather forecast service
 none=None
 allOrganizations=All organizations
+isPest=Is pest
+isCrop=Is crop
diff --git a/src/main/webapp/formdefinitions/organismForm.json b/src/main/webapp/formdefinitions/organismForm.json
index 0b8f8056..fb21bee2 100644
--- a/src/main/webapp/formdefinitions/organismForm.json
+++ b/src/main/webapp/formdefinitions/organismForm.json
@@ -30,6 +30,16 @@
             "required" : false,
             "nullValue" : "-1"
         },
+        {
+            "name" : "isCrop",
+            "dataType" : "STRING",
+            "required" : false
+        },
+        {
+            "name" : "isPest",
+            "dataType" : "STRING",
+            "required" : false
+        },
         {
             "name" : "hierarchyCategoryId",
             "dataType" : "INTEGER",
diff --git a/src/main/webapp/templates/forecastConfigurationForm.ftl b/src/main/webapp/templates/forecastConfigurationForm.ftl
index b4c6dad7..6ada37f7 100644
--- a/src/main/webapp/templates/forecastConfigurationForm.ftl
+++ b/src/main/webapp/templates/forecastConfigurationForm.ftl
@@ -75,7 +75,7 @@
 	    <label for="cropOrganismId">${i18nBundle.cropOrganismId}</label>
 	    <select class="form-control" id="cropOrganismId" name="cropOrganismId" onblur="validateField(this);" onchange="renderModelSpecificFields();">
 	    	<option value="-1">${i18nBundle.pleaseSelect} ${i18nBundle.cropOrganismId?lower_case}</option>
-	    	<#list allOrganisms?sort_by("latinName") as organism>
+	    	<#list allCrops?sort_by("latinName") as organism>
 			<option value="${organism.organismId}"
 				<#if (forecastConfiguration.cropOrganismId?has_content && forecastConfiguration.cropOrganismId.organismId == organism.organismId)>
 					selected="selected"
@@ -89,7 +89,7 @@
 	    <label for="pestOrganismId">${i18nBundle.pestOrganismId}</label>
 	    <select class="form-control" id="pestOrganismId" name="pestOrganismId" onblur="validateField(this);" onchange="renderModelSpecificFields();">
 	    	<option value="-1">${i18nBundle.pleaseSelect} ${i18nBundle.pestOrganismId?lower_case}</option>
-	    	<#list allOrganisms?sort_by("latinName") as organism>
+	    	<#list allPests?sort_by("latinName") as organism>
 			<option value="${organism.organismId}"
 				<#if (forecastConfiguration.pestOrganismId?has_content && forecastConfiguration.pestOrganismId.organismId == organism.organismId)>
 					selected="selected"
diff --git a/src/main/webapp/templates/organismForm.ftl b/src/main/webapp/templates/organismForm.ftl
index 4efc6c58..78bc31f7 100644
--- a/src/main/webapp/templates/organismForm.ftl
+++ b/src/main/webapp/templates/organismForm.ftl
@@ -62,6 +62,7 @@
 		</#list>
 	     </select>
 	</div>
+	
         <div class="form-group">
 	    <label for="latinName">${i18nBundle.latinName}</label>
 	    <input type="text" class="form-control" name="latinName" placeholder="${i18nBundle.latinName}" value="${organism.latinName!""}" onblur="validateField(this);" />
@@ -90,6 +91,20 @@
 		</#list>
 	     </select>
 	</div>
+	<div class="form-group">
+		<div class="checkbox">
+		  <label>
+		    <input type="checkbox" name="isPest" value="true"<#if (organism.isPest?has_content && organism.isPest == true)> checked="checked"</#if>/>
+		    ${i18nBundle.isPest}
+		  </label>
+		</div>
+		<div class="checkbox">
+		  <label>
+		    <input type="checkbox" name="isCrop" value="true"<#if (organism.isCrop?has_content && organism.isCrop == true)> checked="checked"</#if>/>
+		    ${i18nBundle.isCrop}
+		  </label>
+		</div>
+	</div>
 	<fieldset>
 	<h3>${i18nBundle.externalResources}</h3>
 	<#if organism.organismExternalResourceSet?has_content>
@@ -111,5 +126,6 @@
         <button type="submit" class="btn btn-default">${i18nBundle.submit}</button>
         <a href="/organism?action=listChildOrganisms&organismId=${organism.parentOrganismId!"null"}" class="btn btn-default" role="button">${i18nBundle.cancel}</a>
 	</form>
+	
 </#macro>
 <@page_html/>
-- 
GitLab