From 78fdead0924cffa94211b853fec34af104bfa04d Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Thu, 6 Jun 2019 14:31:30 +0200
Subject: [PATCH] Apple fruit moth: Adding possibility of hiding an observation
 site to the public

---
 .../applefruitmoth/AppleFruitMothBean.java    | 55 +++----------------
 .../AppleFruitMothController.java             |  1 +
 .../applefruitmoth/AppleFruitMothService.java | 11 ++--
 .../applefruitmoth/ObservationSite.java       | 16 ++++++
 .../vips/logic/i18n/vipslogictexts.properties |  1 +
 .../logic/i18n/vipslogictexts_bs.properties   |  1 +
 .../logic/i18n/vipslogictexts_hr.properties   |  1 +
 .../logic/i18n/vipslogictexts_nb.properties   |  1 +
 .../logic/i18n/vipslogictexts_sr.properties   |  1 +
 .../i18n/vipslogictexts_zh_CN.properties      |  1 +
 .../appleFruitMothStationForm.json            |  5 ++
 .../js/appleFruitMothObservationSiteMap.js    |  2 +-
 .../js/appleFruitMothObservationSitesMap.js   |  2 +-
 .../templates/appleFruitMothStationForm.ftl   |  8 +++
 14 files changed, 52 insertions(+), 54 deletions(-)

diff --git a/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothBean.java b/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothBean.java
index 92c07b8a..eb017ef9 100755
--- a/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothBean.java
+++ b/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothBean.java
@@ -78,7 +78,8 @@ public class AppleFruitMothBean {
         return em.find(ObservationSite.class, observationSiteId);
     }
 
-    public Kml getObservationSitesKml(Integer season, Integer selectedObservationSiteId, String serverName) {
+    public Kml getObservationSitesKml(Integer season, Integer selectedObservationSiteId, String serverName, Boolean onlyPubliclyAvailable) {
+        onlyPubliclyAvailable = onlyPubliclyAvailable != null ? onlyPubliclyAvailable : true;
         String iconPath = Globals.PROTOCOL + "://" + serverName + "/public/images/";
         // Initialization
         final Vec2 hotspot = new Vec2()
@@ -175,6 +176,10 @@ public class AppleFruitMothBean {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         for(ObservationSite site:sites)
         {
+            if(onlyPubliclyAvailable && !site.getPubliclyAvailable())
+            {
+                continue;
+            }
             Integer warningStatus = 0;
             String remarks = "Varsel ikke oppdatert";
             ObservationSiteSeasonCommonData commonData = site.getCommonDataForSeason(season);
@@ -222,53 +227,7 @@ public class AppleFruitMothBean {
         return kml;
     }
     
-    /*
-    public Kml getObservationSitePointsKml(Integer observationSiteId, String serverName) {
-        
-        ObservationSite observationSite = em.find(ObservationSite.class, observationSiteId);
-        
-        String iconPath = Globals.PROTOCOL + "://" + serverName + "/public/images/";
-        // Initialization
-        final Vec2 hotspot = new Vec2()
-                .withX(0.5)
-                .withXunits(Units.FRACTION)
-                .withY(0)
-                .withYunits(Units.FRACTION);
-        final Kml kml = KmlFactory.createKml();
-        final Document document = kml.createAndSetDocument()
-                .withName("Rognebærmøllstasjon-punkter").withDescription("Oversikt over punkter for rognebærmøllstasjonen " + observationSite.getObservationSiteName());
-        
-        // Adding icons for warning statuses
-        document.createAndAddStyle()
-            .withId("observation_site_point_icon")
-        .createAndSetIconStyle()
-                .withScale(1)
-                .withHotSpot(hotspot)
-                .createAndSetIcon()
-                    .withHref(iconPath + "dot_blue.png");
-        
-        Set<ObservationSitePoint> sitePoints = observationSite.getObservationSitePointSet();
-        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-        for(ObservationSitePoint sitePoint:sitePoints)
-        {
-            
-            final Placemark placemark = document.createAndAddPlacemark()
-                    .withName(sitePoint.getPointName())
-                    .withStyleUrl("#observation_site_point_icon")
-                    .withId(sitePoint.getObservationSitePointId().toString());
-            
-            final Point point = placemark.createAndSetPoint();
-            List<Coordinate> coord = point.createAndSetCoordinates();
-            coord.add(new Coordinate(
-                    sitePoint.getGisId().getGisGeom().getCoordinate().x,
-                    sitePoint.getGisId().getGisGeom().getCoordinate().y,
-                    0
-            ));
-            
-        }
-        return kml;
-    }*/
-
+    
     public ObservationSite storeObservationSite(ObservationSite observationSite) {
         return em.merge(observationSite);
     }
diff --git a/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothController.java b/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothController.java
index e9ee9169..0fa0defc 100755
--- a/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothController.java
+++ b/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothController.java
@@ -172,6 +172,7 @@ public class AppleFruitMothController extends HttpServlet {
                         {
                             Integer currentSeason = formValidation.getFormField("currentSeason").getValueAsInteger();
                             observationSite.setObservationSiteName(formValidation.getFormField("observationSiteName").getWebValue());
+                            observationSite.setPubliclyAvailable(formValidation.getFormField("publiclyAvailable").getWebValue() != null);
                             ObservationSiteSeasonCommonData ossc = observationSite.getCommonDataForSeason(currentSeason);
                             if(ossc == null)
                             {
diff --git a/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothService.java b/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothService.java
index dbd2c570..bcc0d958 100755
--- a/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothService.java
+++ b/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/AppleFruitMothService.java
@@ -48,12 +48,14 @@ public class AppleFruitMothService {
     @GET
     @Path("observationsites/kml/")
     @Produces("application/vnd.google-earth.kml+xml;charset=utf-8")
-    public Response getObservationSitesKML()
+    public Response getObservationSitesKML(
+            @QueryParam("onlyPubliclyAvailable") Boolean onlyPubliclyAvailable
+    )
     {
         Calendar cal = Calendar.getInstance();
         cal.setTime(SystemTime.getSystemTime());
         Integer season = cal.get(Calendar.YEAR);
-        return this.getObservationSitesKML(season, null);
+        return this.getObservationSitesKML(season, null, onlyPubliclyAvailable);
     }
     
     @GET
@@ -61,10 +63,11 @@ public class AppleFruitMothService {
     @Produces("application/vnd.google-earth.kml+xml;charset=utf-8")
     public Response getObservationSitesKML(
             @PathParam("season") Integer season,
-            @QueryParam("selectedObservationSiteId") Integer selectedObservationSiteId
+            @QueryParam("selectedObservationSiteId") Integer selectedObservationSiteId,
+            @QueryParam("onlyPubliclyAvailable") Boolean onlyPubliclyAvailable
     )
     {
-        Kml retVal = SessionControllerGetter.getAppleFruitMothBean().getObservationSitesKml(season, selectedObservationSiteId, ServletUtil.getServerName(httpServletRequest));
+        Kml retVal = SessionControllerGetter.getAppleFruitMothBean().getObservationSitesKml(season, selectedObservationSiteId, ServletUtil.getServerName(httpServletRequest), onlyPubliclyAvailable);
         return Response.ok().entity(retVal).build();
     }
     
diff --git a/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/ObservationSite.java b/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/ObservationSite.java
index 3e425dcd..845c2694 100755
--- a/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/ObservationSite.java
+++ b/src/main/java/no/nibio/vips/logic/modules/applefruitmoth/ObservationSite.java
@@ -81,6 +81,8 @@ public class ObservationSite implements Serializable, Comparable {
     private Gis gisId;
     @Transient
     private Date lastUpdatedClusterCount;
+    @Column(name = "publicly_available")
+    private Boolean publiclyAvailable;
 
 
     public ObservationSite() {
@@ -201,4 +203,18 @@ public class ObservationSite implements Serializable, Comparable {
     public void setLastUpdatedClusterCount(Date lastUpdatedClusterCount) {
         this.lastUpdatedClusterCount = lastUpdatedClusterCount;
     }
+
+    /**
+     * @return the publiclyAvailable
+     */
+    public Boolean getPubliclyAvailable() {
+        return publiclyAvailable;
+    }
+
+    /**
+     * @param publiclyAvailable the publiclyAvailable to set
+     */
+    public void setPubliclyAvailable(Boolean publiclyAvailable) {
+        this.publiclyAvailable = publiclyAvailable;
+    }
 }
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 c39e2025..dd351cf4 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
@@ -478,3 +478,4 @@ archiveUserId=Archive user
 defaultMapZoom=Default map zoom
 defaultMapCenter=Default map center
 organizationStored=Organization was stored
+publiclyAvailable=Publicly available
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 e0460a5c..3dc73777 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
@@ -478,3 +478,4 @@ archiveUserId=Archive user
 defaultMapZoom=Default map zoom
 defaultMapCenter=Default map center
 organizationStored=Organization was stored
+publiclyAvailable=Publicly available
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 f7e92b32..bdf26f28 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
@@ -477,3 +477,4 @@ archiveUserId=Archive user
 defaultMapZoom=Default map zoom
 defaultMapCenter=Default map center
 organizationStored=Organization was stored
+publiclyAvailable=Publicly available
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 298e9cd0..c27bc21b 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
@@ -478,3 +478,4 @@ archiveUserId=Arkivbruker
 defaultMapZoom=Standard zoomniv\u00e5 p\u00e5 kart
 defaultMapCenter=Standard kartsentrum
 organizationStored=Organisasjonen ble lagret
+publiclyAvailable=Offentlig tilgjengelig
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 910852b2..7e8b0fa0 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
@@ -478,3 +478,4 @@ archiveUserId=Archive user
 defaultMapZoom=Default map zoom
 defaultMapCenter=Default map center
 organizationStored=Organization was stored
+publiclyAvailable=Publicly available
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 bb7cb605..4260156e 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
@@ -475,3 +475,4 @@ archiveUserId=Archive user
 defaultMapZoom=Default map zoom
 defaultMapCenter=Default map center
 organizationStored=Organization was stored
+publiclyAvailable=Publicly available
diff --git a/src/main/webapp/formdefinitions/appleFruitMothStationForm.json b/src/main/webapp/formdefinitions/appleFruitMothStationForm.json
index e5e22d46..cec171ad 100755
--- a/src/main/webapp/formdefinitions/appleFruitMothStationForm.json
+++ b/src/main/webapp/formdefinitions/appleFruitMothStationForm.json
@@ -28,6 +28,11 @@
             "dataType" : "STRING",
             "required" : true
         },
+        {
+            "name" : "publiclyAvailable",
+            "dataType" : "STRING",
+            "required" : false
+        },
         {
             "name" : "currentSeason",
             "dataType" : "INTEGER",
diff --git a/src/main/webapp/js/appleFruitMothObservationSiteMap.js b/src/main/webapp/js/appleFruitMothObservationSiteMap.js
index e57a2a1d..d859edea 100755
--- a/src/main/webapp/js/appleFruitMothObservationSiteMap.js
+++ b/src/main/webapp/js/appleFruitMothObservationSiteMap.js
@@ -54,7 +54,7 @@ function initMap(center, observationSiteId, currentSeason)
     
     var sitePointsLayer = new ol.layer.Vector({
             source: new ol.source.Vector({
-                    url: "/rest/applefruitmoth/observationsites/kml/" + currentSeason + "/?selectedObservationSiteId=" + observationSiteId,
+                    url: "/rest/applefruitmoth/observationsites/kml/" + currentSeason + "/?onlyPubliclyAvailable=false&selectedObservationSiteId=" + observationSiteId,
                     format: new ol.format.KML({"extractAttributes":true}),
                     projection: ol.proj.get('EPSG:3857')
             })
diff --git a/src/main/webapp/js/appleFruitMothObservationSitesMap.js b/src/main/webapp/js/appleFruitMothObservationSitesMap.js
index dd2e3e5a..d6675744 100755
--- a/src/main/webapp/js/appleFruitMothObservationSitesMap.js
+++ b/src/main/webapp/js/appleFruitMothObservationSitesMap.js
@@ -32,7 +32,7 @@ var initMap = function(container, mapAttribution)
 	
 	forecastLayer = new ol.layer.Vector({
 		source: new ol.source.Vector({
-			url: "/rest/applefruitmoth/observationsites/kml/",
+			url: "/rest/applefruitmoth/observationsites/kml/?onlyPubliclyAvailable=false",
 			format: new ol.format.KML({"extractAttributes":true}),
 			projection: ol.proj.get('EPSG:3857')
 		})
diff --git a/src/main/webapp/templates/appleFruitMothStationForm.ftl b/src/main/webapp/templates/appleFruitMothStationForm.ftl
index a5445f28..bb7604e8 100755
--- a/src/main/webapp/templates/appleFruitMothStationForm.ftl
+++ b/src/main/webapp/templates/appleFruitMothStationForm.ftl
@@ -54,6 +54,14 @@
 				    <input type="text" class="form-control" name="observationSiteName" placeholder="${i18nBundle.observationSiteName}" value="${observationSite.observationSiteName!""}" onblur="validateField(this);" />
 				    <span class="help-block" id="${formId}_observationSiteName_validation"></span>
 				  </div>
+                                <div class="form-group">
+                                    <div class="checkbox">
+                                            <label>
+                                              <input type="checkbox" name="publiclyAvailable" value="true"<#if (observationSite.publiclyAvailable?has_content && observationSite.publiclyAvailable == true)> checked="checked"</#if>/>
+                                              ${i18nBundle.publiclyAvailable}
+                                            </label>
+                                    </div>
+                                </div>
 				  <div class="form-group">
 				    <label for="currentSeason">${i18nBundle.season}</label>
 				    <select class="form-control" name="currentSeason" onchange="if(confirm('${i18nBundle.appleFruitMothChangeSeasonConfirm}')){window.location.href='/applefruitmoth?action=viewObservationSite&observationSiteId=${observationSite.observationSiteId}&currentSeason=' + this.options[this.options.selectedIndex].value;}">
-- 
GitLab