From 2ad01b3d94793375b00382cb512f8b7e177d3618 Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Tue, 19 Oct 2021 15:48:22 +0200
Subject: [PATCH] I18n now works for the observationdataschema endpoint

---
 .../controller/session/ObservationBean.java   | 17 ++++++++++--
 .../ObservationDataService.java               | 27 -------------------
 .../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 ++
 .../i18n/vipslogictexts_zh_CN.properties      |  2 ++
 src/main/webapp/templates/observationForm.ftl |  5 ++++
 9 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java
index a92f370e..43a909d0 100755
--- a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java
+++ b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java
@@ -813,7 +813,10 @@ public class ObservationBean {
             // First: Convert to Jackson JsonNode tree
             ObjectMapper m = new ObjectMapper();
             JsonNode rootNode = m.readTree(ods.getDataSchema());
-            Iterator<Entry<String, JsonNode>> nodeIterator = rootNode.fields();
+            // Is this the full schema or just the "properties" property?
+            JsonNode propertiesNode = rootNode.get("properties") == null ? rootNode : rootNode.get("properties");
+
+            Iterator<Entry<String, JsonNode>> nodeIterator = propertiesNode.fields();
             
             String fieldKeyPrefix = "observationDataField_";
             // Loop through each field
@@ -828,9 +831,19 @@ public class ObservationBean {
                     // Get the property field (e.g. {"title":"Counting 2"} )
                     JsonNode schemaProperty = schemaPropertyField.getValue();
                     ((ObjectNode)schemaProperty).put("title", bundle.getString(fieldKeyPrefix + fieldKey));
-                    ((ObjectNode)rootNode).replace(fieldKey, schemaProperty);
+                    ((ObjectNode)propertiesNode).replace(fieldKey, schemaProperty);
                 }
             }
+            
+            // I repeat: Is this the full schema or just the "properties" property?
+            if(rootNode.get("properties") != null)
+            {
+                ((ObjectNode)rootNode).replace("properties", propertiesNode);
+            }
+            else
+            {
+                rootNode = propertiesNode;
+            }
             ods.setDataSchema(m.writeValueAsString(rootNode));
             return ods;
     }
diff --git a/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java b/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java
index 04e3a2c2..0fe28730 100755
--- a/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java
+++ b/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java
@@ -71,34 +71,7 @@ public class ObservationDataService {
         {
             // Try to find schema for given organism/organization
             ObservationDataSchema ods = SessionControllerGetter.getObservationBean().getObservationDataSchema(organizationId, organismId);
-            /*
-            ResourceBundle bundle = SessionLocaleUtil.getI18nBundle(httpServletRequest);
             
-            // We iterate the schema, replacing default field labels with
-            // translated ones
-            // First: Convert to Jackson JsonNode tree
-            ObjectMapper m = new ObjectMapper();
-            JsonNode rootNode = m.readTree(ods.getDataSchema());
-            Iterator<Entry<String, JsonNode>> nodeIterator = rootNode.fields();
-            
-            String fieldKeyPrefix = "observationDataField_";
-            // Loop through each field
-            while (nodeIterator.hasNext()) {
-                Map.Entry<String, JsonNode> schemaPropertyField = (Map.Entry<String, JsonNode>) nodeIterator.next();
-                // Get the property field key (e.g. "counting2")
-                String fieldKey = schemaPropertyField.getKey();
-                // Find a translation. 
-                if(bundle.containsKey(fieldKeyPrefix + fieldKey))
-                {
-                    // If found, replace with translation
-                    // Get the property field (e.g. {"title":"Counting 2"} )
-                    JsonNode schemaProperty = schemaPropertyField.getValue();
-                    ((ObjectNode)schemaProperty).put("title", bundle.getString(fieldKeyPrefix + fieldKey));
-                    ((ObjectNode)rootNode).replace(fieldKey, schemaProperty);
-                }
-            }
-            return Response.ok().entity(rootNode).build();
-            */
             ods = SessionControllerGetter.getObservationBean().getLocalizedObservationDataSchema(ods, httpServletRequest);
             return Response.ok().entity(ods.getDataSchema()).build();
             
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
index 5e16d81b..5be420e5 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
@@ -519,3 +519,5 @@ slidingHoursAhead=Reference period, forwards (hours)
 thresholdHumidPeriodHours=Threshold Number of consecutive humid hours
 sprayingProtectionDays=Expected protection period (days) after spraying
 leafLifeTime=Leaf life time (days)
+observationDataField_trapCountCropEdge=Number of trap counts at field's edge
+observationDataField_trapCountCropInside=Number of trap counts inside the field
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties
index 308b8df9..e05ec221 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties
@@ -519,3 +519,5 @@ slidingHoursAhead=Reference period, forwards (hours)
 thresholdHumidPeriodHours=Threshold Number of consecutive humid hours
 sprayingProtectionDays=Expected protection period (days) after spraying
 leafLifeTime=Leaf life time (days)
+observationDataField_trapCountCropEdge=Number of trap counts at field's edge
+observationDataField_trapCountCropInside=Number of trap counts inside the field
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties
index 8778e533..53622e17 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties
@@ -518,3 +518,5 @@ slidingHoursAhead=Reference period, forwards (hours)
 thresholdHumidPeriodHours=Threshold Number of consecutive humid hours
 sprayingProtectionDays=Expected protection period (days) after spraying
 leafLifeTime=Leaf life time (days)
+observationDataField_trapCountCropEdge=Number of trap catches at field's edge
+observationDataField_trapCountCropInside=Number of trap catches inside the field
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties
index f51e7c48..06e7837c 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties
@@ -519,3 +519,5 @@ slidingHoursAhead=Prognoseperiode, fremover (timer)
 thresholdHumidPeriodHours=Antall sammenhengende "fuktige timer"
 sprayingProtectionDays=Forv. ant. dager beskyttelse etter spr\u00f8yting
 leafLifeTime=Levetid for blad (dager)
+observationDataField_trapCountCropEdge=Antall insekter, fellefangst i kant av felt\n
+observationDataField_trapCountCropInside=Antall insekter, fellefangst inne i felt
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties
index f6215ae7..72ad9e2d 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties
@@ -519,3 +519,5 @@ slidingHoursAhead=Reference period, forwards (hours)
 thresholdHumidPeriodHours=Threshold Number of consecutive humid hours
 sprayingProtectionDays=Expected protection period (days) after spraying
 leafLifeTime=Leaf life time (days)
+observationDataField_trapCountCropEdge=Number of trap counts at field's edge
+observationDataField_trapCountCropInside=Number of trap counts inside the field
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties
index d81d3f41..1052757b 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties
@@ -516,3 +516,5 @@ slidingHoursAhead=Reference period, forwards (hours)
 thresholdHumidPeriodHours=Threshold Number of consecutive humid hours
 sprayingProtectionDays=Expected protection period (days) after spraying
 leafLifeTime=Leaf life time (days)
+observationDataField_trapCountCropEdge=Number of trap counts at field's edge
+observationDataField_trapCountCropInside=Number of trap counts inside the field
diff --git a/src/main/webapp/templates/observationForm.ftl b/src/main/webapp/templates/observationForm.ftl
index cd245efd..ba748445 100755
--- a/src/main/webapp/templates/observationForm.ftl
+++ b/src/main/webapp/templates/observationForm.ftl
@@ -133,6 +133,11 @@
 		
 		var buildForm = function(schemaProperties)
 		{
+				// Check if we're getting the whole schema or just the properties
+				if(schemaProperties.properties != undefined)
+				{
+					schemaProperties = schemaProperties.properties;
+				}
                     observationSchema = schemaProperties;
                     // Erasing whatever was there before
                     var metawidgetC = document.getElementById( 'metawidget' );
-- 
GitLab