From e6c008483c1b12efd4ddba0f89fb15caa525bfe5 Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@bioforsk.no>
Date: Fri, 2 Jan 2015 20:51:54 +0100
Subject: [PATCH] Bugfix for storing local name

---
 .../servlet/OrganismController.java           | 18 +++++------------
 .../controller/session/OrganismBean.java      | 20 ++++++++++++++++---
 .../bioforsk/vips/logic/entity/Organism.java  |  3 +++
 3 files changed, 25 insertions(+), 16 deletions(-)

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 aec0401c..4985a3d9 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
@@ -199,19 +199,11 @@ public class OrganismController extends HttpServlet {
                     organism.setHierarchyCategoryId(formValidation.getFormField("hierarchyCategoryId").getValueAsInteger());
                     organism.setParentOrganismId(formValidation.getFormField("parentOrganismId").getValueAsInteger());
                     
-                    
-                    // Adding local name only if it is set
-                    if(!formValidation.getFormField("localName").getWebValue().isEmpty())
-                    {
-                        SessionControllerGetter.getOrganismBean().setOrganismLocalName(organism, formValidation.getFormField("localName").getWebValue(), SessionLocaleUtil.getCurrentLocale(request));
-                    }
-                    // If local name form field is not set, but it already has a local name, delete it
-                    else if(organism.getOrganismLocale(SessionLocaleUtil.getCurrentLocale(request).getLanguage()) != null)
-                    {
-                        SessionControllerGetter.getOrganismBean().removeOrganismLocalName(organism, SessionLocaleUtil.getCurrentLocale(request));
-                    }
-                    
-                    organism = SessionControllerGetter.getOrganismBean().storeOrganism(organism);
+                    organism = SessionControllerGetter.getOrganismBean().storeOrganismWithLocalName(
+                            organism,
+                            formValidation.getFormField("localName").getWebValue(),
+                            SessionLocaleUtil.getCurrentLocale(request)
+                            );
                     
                     //System.out.println(formValidation.getFormFields().toString());
                     Map<String, FormField> externalResourceIdentifiers = formValidation.getMultipleMapFormFields().get("externalResourceIdentifier");
diff --git a/src/main/java/no/bioforsk/vips/logic/controller/session/OrganismBean.java b/src/main/java/no/bioforsk/vips/logic/controller/session/OrganismBean.java
index f4a0093a..d9dc6ece 100644
--- a/src/main/java/no/bioforsk/vips/logic/controller/session/OrganismBean.java
+++ b/src/main/java/no/bioforsk/vips/logic/controller/session/OrganismBean.java
@@ -36,7 +36,9 @@ import no.bioforsk.vips.logic.entity.Organism;
 import no.bioforsk.vips.logic.entity.OrganismExternalResource;
 import no.bioforsk.vips.logic.entity.OrganismLocale;
 import no.bioforsk.vips.logic.entity.OrganismLocalePK;
+import no.bioforsk.vips.logic.i18n.SessionLocaleUtil;
 import no.bioforsk.vips.logic.util.HierarchyCategoryLocaleNames;
+import no.bioforsk.vips.logic.util.SessionControllerGetter;
 
 /**
  * @copyright 2014 <a href="http://www.bioforsk.no/">Bioforsk</a>
@@ -129,13 +131,26 @@ public class OrganismBean {
         }
     }
 
-    public Organism storeOrganism(Organism organism) {
+    public Organism storeOrganismWithLocalName(Organism organism, String localName, ULocale currentLocale) {
         // Ensure that parentOrganismId = -1 => null
         if(organism.getParentOrganismId().equals(-1))
         {
             organism.setParentOrganismId(null);
         }
-        return em.merge(organism);
+        organism = em.merge(organism);
+        // Adding local name only if it is set
+        if(!localName.isEmpty())
+        {
+            //SessionControllerGetter.getOrganismBean().setOrganismLocalName(organism, localName, currentLocale);
+            this.setOrganismLocalName(organism, localName, currentLocale);
+        }
+        // If local name form field is not set, but it already has a local name, delete it
+        else if(organism.getOrganismLocale(currentLocale.getLanguage()) != null)
+        {
+            //SessionControllerGetter.getOrganismBean().removeOrganismLocalName(organism, currentLocale);
+            this.removeOrganismLocalName(organism, currentLocale);
+        }
+        return organism;
     }
 
     public void storeOrganismExternalResource(OrganismExternalResource organismExternalResource) {
@@ -179,7 +194,6 @@ public class OrganismBean {
      * @param currentLocale 
      */
     public void setOrganismLocalName(Organism organism, String localName, ULocale currentLocale) {
-        
         if(organism.getOrganismLocale(currentLocale.getLanguage()) == null)
         {
             OrganismLocalePK pk = new OrganismLocalePK(organism.getOrganismId(), currentLocale.getLanguage());
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 f2b3e8f0..8c1c4752 100644
--- a/src/main/java/no/bioforsk/vips/logic/entity/Organism.java
+++ b/src/main/java/no/bioforsk/vips/logic/entity/Organism.java
@@ -19,6 +19,7 @@
 package no.bioforsk.vips.logic.entity;
 
 import java.io.Serializable;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import javax.persistence.Basic;
@@ -143,6 +144,8 @@ public class Organism implements Serializable {
 
     
     public Set<OrganismLocale> getOrganismLocaleSet() {
+        if(this.organismLocaleSet == null)
+            this.organismLocaleSet = new HashSet<>();
         return organismLocaleSet;
     }
 
-- 
GitLab