From 3fde5e767595c9be7ff21efbc149cf909266e719 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 24 May 2018 10:03:19 +0200
Subject: [PATCH] fronted shows only datasets where user agreed to google
 license

---
 frontend-js/package.json                       |  2 +-
 frontend-js/src/main/js/ServerConnector.js     |  9 ++++++---
 frontend-js/src/main/js/gui/Panel.js           |  2 ++
 .../src/main/js/gui/leftPanel/OverlayPanel.js  | 18 ++++++++++++++----
 frontend-js/src/main/js/map/data/LayoutData.js | 10 ++++++++++
 frontend-js/src/test/js/mocha-config.js        |  2 +-
 6 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/frontend-js/package.json b/frontend-js/package.json
index 2e4d1c8983..ac69a29834 100644
--- a/frontend-js/package.json
+++ b/frontend-js/package.json
@@ -28,7 +28,7 @@
     "istanbul": "0.4.5",
     "jquery": "3.1.1",
     "jquery-ui-dist": "^1.12.1",
-    "jsdom": "^11.1.0",
+    "jsdom": "11.1.0",
     "jsdom-global": "^2.1.1",
     "jshint": "^2.9.4",
     "log4js-memory-appender": "1.0.5",
diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 2899a28b54..f75bd1ded4 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -44,7 +44,7 @@ ServerConnector.registerListenerType("onDataLoadStart");
 ServerConnector.registerListenerType("onDataLoadStop");
 
 ServerConnector._configurationParam = [];
-ServerConnector._serverBaseUrl= undefined;
+ServerConnector._serverBaseUrl = undefined;
 
 
 ServerConnector.getMinOverlayColorInt = function () {
@@ -275,8 +275,8 @@ ServerConnector.getApiBaseUrl = function () {
 ServerConnector.getServerBaseUrl = function () {
   if (this._serverBaseUrl === undefined) {
     var url = "" + window.location.href;
-    if (url.indexOf("?")>=0) {
-      url = url.substr(0,url.indexOf("?"));
+    if (url.indexOf("?") >= 0) {
+      url = url.substr(0, url.indexOf("?"));
     }
     if (!url.endsWith("/")) {
       url = url.substr(0, url.lastIndexOf("/") + 1);
@@ -1264,6 +1264,9 @@ ServerConnector.updateOverlay = function (params) {
   if (params.description !== undefined) {
     filterParams.overlay.description = params.description;
   }
+  if (params.googleLicenseConsent !== undefined) {
+    filterParams.overlay.googleLicenseConsent = params.googleLicenseConsent;
+  }
   return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendPatchRequest(self.updateOverlayUrl(queryParams), filterParams);
diff --git a/frontend-js/src/main/js/gui/Panel.js b/frontend-js/src/main/js/gui/Panel.js
index d4c85402ef..d9ac68da4b 100644
--- a/frontend-js/src/main/js/gui/Panel.js
+++ b/frontend-js/src/main/js/gui/Panel.js
@@ -190,6 +190,8 @@ Panel.prototype.assignDialogOptions = function(div, params) {
         dialog.dialog('option', 'dialogClass', params[key]);
       } else if (key === "title") {
         dialog.dialog('option', 'title', params[key]);
+      } else if (key === "width") {
+        dialog.dialog('option', 'width', params[key]);
       } else {
         throw new Error("Unknown dialog param: " + key + " - " + params[key]);
       }
diff --git a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js
index 3b0ebabd8b..4f9d56c7d3 100644
--- a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js
@@ -141,7 +141,7 @@ OverlayPanel.prototype.createTableHeader = function (edit) {
   return result;
 };
 
-OverlayPanel.prototype.createOverlayRow = function (overlay, checked) {
+OverlayPanel.prototype.createOverlayRow = function (overlay, checked, disabled) {
   var self = this;
   var guiUtils = self.getGuiUtils();
   var result = document.createElement("tr");
@@ -172,6 +172,7 @@ OverlayPanel.prototype.createOverlayRow = function (overlay, checked) {
         $(thisCheckbox).prop("disabled", false);
       });
     };
+    $(checkbox).prop("disabled", disabled);
     viewTd.appendChild(checkbox);
   } else {
     var img = guiUtils.createIcon("icons/search.png");
@@ -230,6 +231,13 @@ OverlayPanel.prototype.openEditOverlayDialog = function (overlay) {
   row = guiUtils.createTableRow([guiUtils.createLabel("Description: "), descriptionInput]);
   content.appendChild(row);
 
+  var consentCheckbox = document.createElement("input");
+  consentCheckbox.type = "checkbox";
+  consentCheckbox.checked = overlay.isGoogleLicenseConsent();
+  row = guiUtils.createTableRow([guiUtils.createLabel("I am aware that this map is displayed under the terms of the <a href='https://cloud.google.com/maps-platform/terms/'>license of Google Maps Platform</a> and I agree to these terms. " +
+    "In particular, I warrant that this dataset does not contain Protected Health Information (as defined in and subject to HIPAA). "), consentCheckbox]);
+  content.appendChild(row);
+
   var buttons = [{
     text: "SAVE",
     click: function () {
@@ -237,7 +245,8 @@ OverlayPanel.prototype.openEditOverlayDialog = function (overlay) {
       return ServerConnector.updateOverlay({
         overlayId: overlay.id,
         name: nameInput.value,
-        description: descriptionInput.value
+        description: descriptionInput.value,
+        googleLicenseConsent: consentCheckbox.checked
       }).then(function () {
         return self.refresh();
       }).then(function () {
@@ -265,6 +274,7 @@ OverlayPanel.prototype.openEditOverlayDialog = function (overlay) {
     }
   }];
   self.openDialog(content, {
+    width: "600px",
     id: overlay.getId(),
     buttons: buttons,
     title: "Data overlay: " + overlay.getName(),
@@ -317,7 +327,7 @@ OverlayPanel.prototype.refresh = function () {
       table.appendChild(body);
       for (i = 0; i < generalOverlays.length; i++) {
         overlay = generalOverlays[i];
-        body.appendChild(self.createOverlayRow(overlay, selectedOverlay[overlay.getId()]));
+        body.appendChild(self.createOverlayRow(overlay, selectedOverlay[overlay.getId()], false));
       }
 
       var title = self.getControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TITLE);
@@ -342,7 +352,7 @@ OverlayPanel.prototype.refresh = function () {
         table.appendChild(body);
         for (i = 0; i < customOverlays.length; i++) {
           overlay = customOverlays[i];
-          body.appendChild(self.createOverlayRow(overlay, selectedOverlay[overlay.getId()]));
+          body.appendChild(self.createOverlayRow(overlay, selectedOverlay[overlay.getId()], !overlay.isGoogleLicenseConsent()));
         }
       }
 
diff --git a/frontend-js/src/main/js/map/data/LayoutData.js b/frontend-js/src/main/js/map/data/LayoutData.js
index a31227f460..25ec19b025 100644
--- a/frontend-js/src/main/js/map/data/LayoutData.js
+++ b/frontend-js/src/main/js/map/data/LayoutData.js
@@ -23,6 +23,7 @@ function LayoutData(layoutId, name) {
     this.setDirectory(object.directory);
     this.setDescription(object.description);
     this.setCreator(object.creator);
+    this.setGoogleLicenseConsent(object.googleLicenseConsent);
     this.setInputDataAvailable(object.inputDataAvailable);
     if (!this.getInputDataAvailable()) {
       this.setInitialized(true);
@@ -155,6 +156,15 @@ LayoutData.prototype.isInitialized = function() {
   return this._initialized;
 };
 
+LayoutData.prototype.setGoogleLicenseConsent = function(value) {
+  this._googleLicenseConsent = value;
+};
+
+LayoutData.prototype.isGoogleLicenseConsent = function() {
+  return this._googleLicenseConsent;
+};
+
+
 LayoutData.prototype.getAliases = function() {
   return this.aliases;
 };
diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js
index 1caaad7148..6bec611e44 100644
--- a/frontend-js/src/test/js/mocha-config.js
+++ b/frontend-js/src/test/js/mocha-config.js
@@ -97,7 +97,7 @@ before(function() {
     };
     return Promise.resolve();
   };
-  
+
   Promise.longStackTraces();
 
   mockBootstrap();
-- 
GitLab