From 4e5712b38d7decb2bf9de8d679ef18e7fe8c0738 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 8 Aug 2017 11:51:17 +0200
Subject: [PATCH] stub of new admin panel

---
 frontend-js/src/main/js/Admin.js              | 178 ++++++++++++++++++
 .../main/js/gui/admin/CommentsAdminPanel.js   |  22 +++
 .../js/gui/admin/ConfigurationAdminPanel.js   |  22 +++
 .../src/main/js/gui/admin/MapsAdminPanel.js   |  22 +++
 .../main/js/gui/admin/ServicesAdminPanel.js   |  22 +++
 .../src/main/js/gui/admin/UsersAdminPanel.js  |  22 +++
 frontend-js/src/main/js/minerva.js            |  28 +++
 frontend-js/src/test/js/minerva-test.js       |  12 ++
 .../main/webapp/WEB-INF/security-context.xml  |   2 -
 web/src/main/webapp/admin-new.xhtml           |  57 ++++++
 10 files changed, 385 insertions(+), 2 deletions(-)
 create mode 100644 frontend-js/src/main/js/Admin.js
 create mode 100644 frontend-js/src/main/js/gui/admin/CommentsAdminPanel.js
 create mode 100644 frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
 create mode 100644 frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
 create mode 100644 frontend-js/src/main/js/gui/admin/ServicesAdminPanel.js
 create mode 100644 frontend-js/src/main/js/gui/admin/UsersAdminPanel.js
 create mode 100644 web/src/main/webapp/admin-new.xhtml

diff --git a/frontend-js/src/main/js/Admin.js b/frontend-js/src/main/js/Admin.js
new file mode 100644
index 0000000000..e0fc04712c
--- /dev/null
+++ b/frontend-js/src/main/js/Admin.js
@@ -0,0 +1,178 @@
+"use strict";
+
+/* exported logger */
+
+var Promise = require("bluebird");
+
+var CustomMapOptions = require('./map/CustomMapOptions');
+var Header = require('./gui/Header');
+var ObjectWithListeners = require('./ObjectWithListeners');
+
+var CommentsAdminPanel = require('./gui/admin/CommentsAdminPanel');
+var ConfigurationAdminPanel = require('./gui/admin/ConfigurationAdminPanel');
+var MapsAdminPanel = require('./gui/admin/MapsAdminPanel');
+var ServicesAdminPanel = require('./gui/admin/ServicesAdminPanel');
+var UsersAdminPanel = require('./gui/admin/UsersAdminPanel');
+
+
+var logger = require('./logger');
+var Functions = require('./Functions');
+
+/**
+ * Default constructor.
+ * 
+ * @param options
+ *          CustomMapOptions object representing all parameters needed for map
+ *          creation
+ */
+function Admin(options) {
+  var self = this;
+  self._panels = [];
+  self._tabIdCount = 0;
+  if (!(options instanceof CustomMapOptions)) {
+    options = new CustomMapOptions(options);
+  }
+  self.setProject(options.getProject());
+  self.setElement(options.getElement());
+
+  self.setConfiguration(options.getConfiguration());
+  self._createGui();
+}
+
+Admin.prototype = Object.create(ObjectWithListeners.prototype);
+Admin.prototype.constructor = ObjectWithListeners;
+
+Admin.prototype._createGui = function() {
+  var self = this;
+  self.getElement().innerHTML = "";
+  var headerDiv = Functions.createElement({
+    type : "div"
+  });
+  new Header({
+    element : headerDiv,
+    customMap : null,
+    project : self.getProject(),
+  });
+  self.getElement().appendChild(headerDiv);
+
+  var panels = [ {
+    name : "COMMENTS",
+    panelClass : CommentsAdminPanel,
+  }, {
+    name : "MAPS",
+    panelClass : MapsAdminPanel,
+  }, {
+    name : "USERS",
+    panelClass : UsersAdminPanel,
+  }, {
+    name : "SERVICES",
+    panelClass : ServicesAdminPanel,
+  }, {
+    name : "CONFIGURATION",
+    panelClass : ConfigurationAdminPanel,
+  } ];
+
+  var tabDiv = Functions.createElement({
+    type : "div",
+    name : "tabView",
+    className : "tabbable boxed parentTabs"
+  });
+  self.getElement().appendChild(tabDiv);
+
+  var tabMenuDiv = Functions.createElement({
+    type : "ul",
+    className : "nav nav-tabs"
+  });
+  tabDiv.appendChild(tabMenuDiv);
+
+  var tabContentDiv = Functions.createElement({
+    type : "div",
+    className : "tab-content"
+  });
+  tabDiv.appendChild(tabContentDiv);
+
+  for (var i = 0; i < panels.length; i++) {
+    self.addTab(panels[i], tabMenuDiv, tabContentDiv);
+  }
+};
+
+Admin.prototype.addTab = function(params, navElement, contentElement) {
+  var self = this;
+
+  var name = params.name;
+
+  var tabId = "export_panel_tab_" + this._tabIdCount;
+  self._tabIdCount++;
+
+  var navClass = '';
+  var contentClass = 'tab-pane';
+  if (navElement.children.length === 0) {
+    navClass = "active";
+    contentClass = "tab-pane active";
+  }
+
+  var navLi = document.createElement("li");
+  navLi.className = navClass;
+
+  var navLink = document.createElement("a");
+  navLink.href = "#" + tabId;
+  if (name !== undefined) {
+    if (name.length > 12) {
+      name = name.substring(0, 10) + "...";
+    }
+    navLink.innerHTML = name;
+  }
+  navLink.onclick = function() {
+    $(this).tab('show');
+  };
+  navLi.appendChild(navLink);
+  if (name !== undefined) {
+    navLink.innerHTML = name;
+  }
+  navElement.appendChild(navLi);
+
+  var contentDiv = document.createElement("div");
+  contentDiv.style.height = "100%";
+  contentDiv.className = contentClass;
+  contentDiv.id = tabId;
+
+  contentElement.appendChild(contentDiv);
+
+  this._panels.push(new params.panelClass({
+    element : contentDiv,
+    project : self.getProject(),
+    configuration : self.getConfiguration(),
+  }));
+};
+
+Admin.prototype.setProject = function(project) {
+  this._project = project;
+};
+Admin.prototype.getProject = function() {
+  return this._project;
+};
+
+Admin.prototype.setElement = function(element) {
+  this._element = element;
+};
+Admin.prototype.getElement = function() {
+  return this._element;
+};
+
+Admin.prototype.init = function() {
+  var promises = [];
+  for (var i = 0; i < this._panels.length; i++) {
+    promises.push(this._panels[i].init());
+  }
+  return Promise.all(promises);
+};
+
+Admin.prototype.setConfiguration = function(configuration) {
+  this._configuration = configuration;
+};
+
+Admin.prototype.getConfiguration = function() {
+  return this._configuration;
+};
+
+module.exports = Admin;
diff --git a/frontend-js/src/main/js/gui/admin/CommentsAdminPanel.js b/frontend-js/src/main/js/gui/admin/CommentsAdminPanel.js
new file mode 100644
index 0000000000..722dfeaea2
--- /dev/null
+++ b/frontend-js/src/main/js/gui/admin/CommentsAdminPanel.js
@@ -0,0 +1,22 @@
+"use strict";
+
+/* exported logger */
+
+var Panel = require('../Panel');
+
+var Promise = require("bluebird");
+
+function CommentsAdminPanel(params) {
+  params.scrollable = true;
+  Panel.call(this, params);
+
+}
+
+CommentsAdminPanel.prototype = Object.create(Panel.prototype);
+CommentsAdminPanel.prototype.constructor = CommentsAdminPanel;
+
+CommentsAdminPanel.prototype.init = function() {
+
+};
+
+module.exports = CommentsAdminPanel;
diff --git a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
new file mode 100644
index 0000000000..43f8ec6a08
--- /dev/null
+++ b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
@@ -0,0 +1,22 @@
+"use strict";
+
+/* exported logger */
+
+var Panel = require('../Panel');
+
+var Promise = require("bluebird");
+
+function ConfigurationAdminPanel(params) {
+  params.scrollable = true;
+  Panel.call(this, params);
+
+}
+
+ConfigurationAdminPanel.prototype = Object.create(Panel.prototype);
+ConfigurationAdminPanel.prototype.constructor = ConfigurationAdminPanel;
+
+ConfigurationAdminPanel.prototype.init = function() {
+
+};
+
+module.exports = ConfigurationAdminPanel;
diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
new file mode 100644
index 0000000000..32afe0ce96
--- /dev/null
+++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
@@ -0,0 +1,22 @@
+"use strict";
+
+/* exported logger */
+
+var Panel = require('../Panel');
+
+var Promise = require("bluebird");
+
+function MapsAdminPanel(params) {
+  params.scrollable = true;
+  Panel.call(this, params);
+
+}
+
+MapsAdminPanel.prototype = Object.create(Panel.prototype);
+MapsAdminPanel.prototype.constructor = MapsAdminPanel;
+
+MapsAdminPanel.prototype.init = function() {
+
+};
+
+module.exports = MapsAdminPanel;
diff --git a/frontend-js/src/main/js/gui/admin/ServicesAdminPanel.js b/frontend-js/src/main/js/gui/admin/ServicesAdminPanel.js
new file mode 100644
index 0000000000..a13151a722
--- /dev/null
+++ b/frontend-js/src/main/js/gui/admin/ServicesAdminPanel.js
@@ -0,0 +1,22 @@
+"use strict";
+
+/* exported logger */
+
+var Panel = require('../Panel');
+
+var Promise = require("bluebird");
+
+function ServicesAdminPanel(params) {
+  params.scrollable = true;
+  Panel.call(this, params);
+
+}
+
+ServicesAdminPanel.prototype = Object.create(Panel.prototype);
+ServicesAdminPanel.prototype.constructor = ServicesAdminPanel;
+
+ServicesAdminPanel.prototype.init = function() {
+
+};
+
+module.exports = ServicesAdminPanel;
diff --git a/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js b/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js
new file mode 100644
index 0000000000..16277062e1
--- /dev/null
+++ b/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js
@@ -0,0 +1,22 @@
+"use strict";
+
+/* exported logger */
+
+var Panel = require('../Panel');
+
+var Promise = require("bluebird");
+
+function UsersAdminPanel(params) {
+  params.scrollable = true;
+  Panel.call(this, params);
+
+}
+
+UsersAdminPanel.prototype = Object.create(Panel.prototype);
+UsersAdminPanel.prototype.constructor = UsersAdminPanel;
+
+UsersAdminPanel.prototype.init = function() {
+
+};
+
+module.exports = UsersAdminPanel;
diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js
index f84281272a..7a885004ae 100644
--- a/frontend-js/src/main/js/minerva.js
+++ b/frontend-js/src/main/js/minerva.js
@@ -5,6 +5,7 @@ var functions = require('./Functions');
 var IdentifiedElement = require('./map/data/IdentifiedElement');
 
 var AbstractDbOverlay = require('./map/overlay/AbstractDbOverlay');
+var Admin = require('./Admin');
 var DbOverlayCollection = require('./map/overlay/DbOverlayCollection');
 var ConfigurationType = require('./ConfigurationType');
 var CustomMap = require('./map/CustomMap');
@@ -586,9 +587,36 @@ function createExport(params) {
   });
 }
 
+function createAdmin(params) {
+  params = modifyParamsForTouchInterface(params);
+  if (!(params instanceof CustomMapOptions)) {
+    params = new CustomMapOptions(params);
+  }
+  initGlobals(params);
+  params.getElement().style.display = "table";
+  params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>"
+      + "<img src='resources/images/icons/ajax-loader.gif'/>" + "</div>";
+
+  var result;
+  // make sure that we are logged in
+  return ServerConnector.getToken().then(function() {
+    return ServerConnector.getConfiguration();
+  }).then(function(configuration) {
+    params.setConfiguration(configuration);
+    return getProject(params);
+  }).then(function(project) {
+    params.setProject(project);
+    result = new Admin(params);
+    return result.init();
+  }).then(function() {
+    return result;
+  });
+}
+
 var minerva = {
   create : create,
   createExport : createExport,
+  createAdmin: createAdmin,
   ServerConnector : OriginalServerConnector,
   GuiConnector : OriginalGuiConnector,
   DualListbox : require('dual-listbox').DualListbox,
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index b09a1fa0ed..ffbbf905cb 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -494,4 +494,16 @@ describe('minerva global', function() {
     });
   });
 
+  it('create Admin', function() {
+    var options = null;
+    return ServerConnectorMock.getProject().then(function(project) {
+      options = helper.createCustomMapOptions(project);
+
+      return minerva.createAdmin(options);
+    }).then(function(result) {
+      assert.ok(result);
+      assert.equal(logger.getWarnings().length, 0);
+    });
+  });
+
 });
diff --git a/web/src/main/webapp/WEB-INF/security-context.xml b/web/src/main/webapp/WEB-INF/security-context.xml
index c1378aa39a..e152ccd848 100644
--- a/web/src/main/webapp/WEB-INF/security-context.xml
+++ b/web/src/main/webapp/WEB-INF/security-context.xml
@@ -23,9 +23,7 @@
 		
 	 	<security:intercept-url pattern="/login**" access="permitAll"/>
 	 	<security:intercept-url pattern="/index**" access="permitAll"/>
-	 	<security:intercept-url pattern="/miriam**" access="permitAll"/>
 	 	<security:intercept-url pattern="/export**" access="permitAll"/>
-	 	<security:intercept-url pattern="/expire**" access="permitAll"/>
 	 	<security:intercept-url pattern="/galaxy**" access="permitAll"/>
 	 	<security:intercept-url pattern="/map**" access="permitAll"/>
 		<security:intercept-url pattern="/map/**" access="permitAll"/>
diff --git a/web/src/main/webapp/admin-new.xhtml b/web/src/main/webapp/admin-new.xhtml
new file mode 100644
index 0000000000..4e7805363d
--- /dev/null
+++ b/web/src/main/webapp/admin-new.xhtml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:p="http://primefaces.org/ui">
+
+<f:view contentType="text/html">
+<h:head>
+	<script src="https://maps.google.com/maps/api/js?libraries=drawing&amp;v=3.26" type="text/javascript"/>
+
+	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" type="text/javascript"/>
+	<script src="https://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.min.js" type="text/javascript"/>
+
+  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
+  <script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
+
+
+	<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css"/>	
+	<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"/>
+	
+	<link rel="shortcut icon" href="./resources/images/favicon.png" type="image/png" />
+
+	<h:outputScript library="js" name="minerva.js"  />
+	
+	<script type="text/javascript">
+//<![CDATA[
+
+function initMap(){
+	var element = document.getElementById('minervaAppDiv');
+  return minerva.createAdmin({
+		element : element, 
+	}).then(function(result){
+		customMap = result;
+		document.title = result.getProject().getName();
+	}).catch(function(rejectReason){
+		minerva.GuiConnector.alert(rejectReason);
+	});
+}
+
+//]]>
+		</script>
+</h:head>
+<h:body onload="initMap();" >
+<h:outputStylesheet library="css" name="style.css"/>
+<h:outputStylesheet library="css" name="minerva.css"	/>
+<h:outputStylesheet library="css" name="pileup.css"/>
+<h:outputStylesheet library="css" name="bootstrap.min.css"/>
+
+	<h:outputScript library="primefaces" name="jquery/jquery.js" target="head"	/>
+	<div id="minervaAppDiv" style="height: 100%;width: 100%;margin: 0;"/>
+
+</h:body>
+</f:view>
+</html>
-- 
GitLab