From 596c9a8587f6356a3b6da8d0baf653d69eb82d06 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 25 Aug 2017 17:02:13 +0200
Subject: [PATCH] removing projects from frontend

---
 frontend-js/.idea/workspace.xml               | 373 ++++-----
 frontend-js/src/main/js/ServerConnector.js    | 749 +++++++++---------
 .../src/main/js/gui/admin/MapsAdminPanel.js   | 430 +++++-----
 .../src/test/js/ServerConnector-test.js       |  11 +
 .../sample/DELETE_token=MOCK_TOKEN_ID&        |   1 +
 .../api/projects/ProjectController.java       |   9 +
 .../api/projects/ProjectRestImpl.java         |   7 +
 .../services/impl/ProjectServiceTest.java     |   3 +-
 .../java/lcsb/mapviewer/bean/ProjectBean.java |   5 +-
 9 files changed, 800 insertions(+), 788 deletions(-)
 create mode 100644 frontend-js/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID&

diff --git a/frontend-js/.idea/workspace.xml b/frontend-js/.idea/workspace.xml
index 9abab729ca..2d6cf7a572 100644
--- a/frontend-js/.idea/workspace.xml
+++ b/frontend-js/.idea/workspace.xml
@@ -6,20 +6,15 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="c119f0dd-fdda-4d02-a51e-86bc6ef7e50c" name="Default" comment="">
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/js/ValidationError.js" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID&amp;" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.jshintrc" afterPath="$PROJECT_DIR$/.jshintrc" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/GuiConnector.js" afterPath="$PROJECT_DIR$/src/main/js/GuiConnector.js" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/ServerConnector.js" afterPath="$PROJECT_DIR$/src/main/js/ServerConnector.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/gui/admin/AddProjectDialog.js" afterPath="$PROJECT_DIR$/src/main/js/gui/admin/AddProjectDialog.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/gui/leftPanel/OverlayPanel.js" afterPath="$PROJECT_DIR$/src/main/js/gui/leftPanel/OverlayPanel.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/minerva.js" afterPath="$PROJECT_DIR$/src/main/js/minerva.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/gui/admin/AddProjectDialog-test.js" afterPath="$PROJECT_DIR$/src/test/js/gui/admin/AddProjectDialog-test.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/gui/admin/EditProjectDialog-test.js" afterPath="$PROJECT_DIR$/src/test/js/gui/admin/EditProjectDialog-test.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/map/TouchMap-test.js" afterPath="$PROJECT_DIR$/src/test/js/map/TouchMap-test.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/map/window/AliasInfoWindow-test.js" afterPath="$PROJECT_DIR$/src/test/js/map/window/AliasInfoWindow-test.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/minerva-test.js" afterPath="$PROJECT_DIR$/src/test/js/minerva-test.js" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/mocha-config.js" afterPath="$PROJECT_DIR$/src/test/js/mocha-config.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/js/gui/admin/MapsAdminPanel.js" afterPath="$PROJECT_DIR$/src/main/js/gui/admin/MapsAdminPanel.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/js/ServerConnector-test.js" afterPath="$PROJECT_DIR$/src/test/js/ServerConnector-test.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/../rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java" afterPath="$PROJECT_DIR$/../rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/../rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java" afterPath="$PROJECT_DIR$/../rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/../service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java" afterPath="$PROJECT_DIR$/../service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/../web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java" afterPath="$PROJECT_DIR$/../web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java" />
     </list>
     <ignored path="$PROJECT_DIR$/.tmp/" />
     <ignored path="$PROJECT_DIR$/temp/" />
@@ -36,18 +31,18 @@
       <file leaf-file-name="TouchMap-test.js" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/test/js/map/TouchMap-test.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="338">
+            <state relative-caret-position="1547">
               <caret line="91" column="11" lean-forward="false" selection-start-line="91" selection-start-column="11" selection-end-line="91" selection-end-column="11" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="AddProjectDialog.js" pinned="false" current-in-tab="true">
+      <file leaf-file-name="AddProjectDialog.js" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/AddProjectDialog.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="421">
-              <caret line="498" column="56" lean-forward="true" selection-start-line="498" selection-start-column="56" selection-end-line="498" selection-end-column="56" />
+            <state relative-caret-position="221">
+              <caret line="13" column="34" lean-forward="false" selection-start-line="13" selection-start-column="34" selection-end-line="13" selection-end-column="34" />
               <folding>
                 <marker date="1503670249417" expanded="true" signature="4888:4894" ph=" " />
                 <marker date="1503670249417" expanded="true" signature="5205:5211" ph=" " />
@@ -56,11 +51,24 @@
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="AddProjectDialog-test.js" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/test/js/gui/admin/AddProjectDialog-test.js">
+      <file leaf-file-name="MapsAdminPanel.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/MapsAdminPanel.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="306">
-              <caret line="42" column="7" lean-forward="false" selection-start-line="42" selection-start-column="7" selection-end-line="42" selection-end-column="7" />
+            <state relative-caret-position="4692">
+              <caret line="276" column="34" lean-forward="false" selection-start-line="276" selection-start-column="34" selection-end-line="276" selection-end-column="34" />
+              <folding>
+                <marker date="1503671355126" expanded="true" signature="1540:1546" ph=" " />
+                <marker date="1503671355126" expanded="true" signature="1820:1826" ph=" " />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="CommentsAdminPanel.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/CommentsAdminPanel.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="2839">
+              <caret line="167" column="19" lean-forward="false" selection-start-line="167" selection-start-column="19" selection-end-line="167" selection-end-column="19" />
               <folding />
             </state>
           </provider>
@@ -69,7 +77,7 @@
       <file leaf-file-name="GuiConnector.js" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/main/js/GuiConnector.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="897">
+            <state relative-caret-position="3961">
               <caret line="233" column="39" lean-forward="false" selection-start-line="233" selection-start-column="39" selection-end-line="233" selection-end-column="39" />
               <folding />
             </state>
@@ -79,8 +87,18 @@
       <file leaf-file-name="ServerConnector.js" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/main/js/ServerConnector.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-1445">
-              <caret line="66" column="7" lean-forward="false" selection-start-line="66" selection-start-column="7" selection-end-line="66" selection-end-column="7" />
+            <state relative-caret-position="10506">
+              <caret line="618" column="35" lean-forward="false" selection-start-line="618" selection-start-column="35" selection-end-line="618" selection-end-column="35" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="ServerConnector-test.js" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/test/js/ServerConnector-test.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="431">
+              <caret line="161" column="5" lean-forward="true" selection-start-line="161" selection-start-column="5" selection-end-line="161" selection-end-column="5" />
               <folding />
             </state>
           </provider>
@@ -89,7 +107,7 @@
       <file leaf-file-name="minerva.js" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/src/main/js/minerva.js">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="355">
+            <state relative-caret-position="5712">
               <caret line="336" column="11" lean-forward="false" selection-start-line="336" selection-start-column="11" selection-end-line="336" selection-end-column="11" />
               <folding>
                 <marker date="1503670069762" expanded="true" signature="16640:16699" ph="..." />
@@ -110,45 +128,10 @@
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="mocha-config.js" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/test/js/mocha-config.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="338">
-              <caret line="38" column="4" lean-forward="false" selection-start-line="38" selection-start-column="4" selection-end-line="38" selection-end-column="4" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="minerva-test.js" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/test/js/minerva-test.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="338">
-              <caret line="117" column="0" lean-forward="false" selection-start-line="117" selection-start-column="0" selection-end-line="117" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="AliasInfoWindow-test.js" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/test/js/map/window/AliasInfoWindow-test.js">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-289">
-              <caret line="19" column="31" lean-forward="false" selection-start-line="19" selection-start-column="31" selection-end-line="19" selection-end-column="31" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
     </leaf>
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>touchend</find>
-      <find>touch end</find>
-      <find>panBy</find>
-      <find>moveMap</find>
-      <find>makeMove</find>
       <find>handleMove</find>
       <find>ongoingTouches</find>
       <find>firstFingerIdfirstFingerId</find>
@@ -169,11 +152,16 @@
       <find>GuiConnector.alert</find>
       <find>self</find>
       <find>self =</find>
-      <find>updatePro</find>
       <find>InvalidArgumentError</find>
       <find>getFileContent</find>
       <find>getConverter</find>
       <find>chai</find>
+      <find>link</find>
+      <find>remove</find>
+      <find>updatePro</find>
+      <find>updateP</find>
+      <find>getProject</find>
+      <find>getPRoject</find>
     </findStrings>
     <replaceStrings>
       <replace>ValidationError</replace>
@@ -219,7 +207,6 @@
         <option value="$PROJECT_DIR$/src/main/js/gui/leftPanel/PublicationListDialog.js" />
         <option value="$PROJECT_DIR$/src/main/js/gui/LoginDialog.js" />
         <option value="$PROJECT_DIR$/src/main/js/gui/admin/CommentsAdminPanel.js" />
-        <option value="$PROJECT_DIR$/src/main/js/gui/admin/MapsAdminPanel.js" />
         <option value="$PROJECT_DIR$/src/main/js/Admin.js" />
         <option value="$PROJECT_DIR$/src/main/js/map/window/AliasInfoWindow.js" />
         <option value="$PROJECT_DIR$/src/test/js/google-map-mock.js" />
@@ -233,11 +220,14 @@
         <option value="$PROJECT_DIR$/src/test/js/map/window/AliasInfoWindow-test.js" />
         <option value="$PROJECT_DIR$/src/test/js/mocha-config.js" />
         <option value="$PROJECT_DIR$/src/test/js/map/TouchMap-test.js" />
-        <option value="$PROJECT_DIR$/src/main/js/ServerConnector.js" />
         <option value="$PROJECT_DIR$/src/main/js/minerva.js" />
         <option value="$PROJECT_DIR$/src/main/js/gui/leftPanel/OverlayPanel.js" />
         <option value="$PROJECT_DIR$/src/main/js/GuiConnector.js" />
         <option value="$PROJECT_DIR$/src/main/js/gui/admin/AddProjectDialog.js" />
+        <option value="$PROJECT_DIR$/src/main/js/gui/admin/MapsAdminPanel.js" />
+        <option value="$PROJECT_DIR$/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID&amp;" />
+        <option value="$PROJECT_DIR$/src/main/js/ServerConnector.js" />
+        <option value="$PROJECT_DIR$/src/test/js/ServerConnector-test.js" />
       </list>
     </option>
   </component>
@@ -331,15 +321,6 @@
               <item name="gui" type="462c0819:PsiDirectoryNode" />
               <item name="admin" type="462c0819:PsiDirectoryNode" />
             </path>
-            <path>
-              <item name="frontend-js" type="b2602c69:ProjectViewProjectNode" />
-              <item name="frontend-js" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="main" type="462c0819:PsiDirectoryNode" />
-              <item name="js" type="462c0819:PsiDirectoryNode" />
-              <item name="gui" type="462c0819:PsiDirectoryNode" />
-              <item name="leftPanel" type="462c0819:PsiDirectoryNode" />
-            </path>
             <path>
               <item name="frontend-js" type="b2602c69:ProjectViewProjectNode" />
               <item name="frontend-js" type="462c0819:PsiDirectoryNode" />
@@ -411,7 +392,15 @@
               <item name="frontend-js" type="462c0819:PsiDirectoryNode" />
               <item name="testFiles" type="462c0819:PsiDirectoryNode" />
               <item name="apiCalls" type="462c0819:PsiDirectoryNode" />
-              <item name="users" type="462c0819:PsiDirectoryNode" />
+              <item name="projects" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="frontend-js" type="b2602c69:ProjectViewProjectNode" />
+              <item name="frontend-js" type="462c0819:PsiDirectoryNode" />
+              <item name="testFiles" type="462c0819:PsiDirectoryNode" />
+              <item name="apiCalls" type="462c0819:PsiDirectoryNode" />
+              <item name="projects" type="462c0819:PsiDirectoryNode" />
+              <item name="sample" type="462c0819:PsiDirectoryNode" />
             </path>
           </expand>
           <select />
@@ -440,6 +429,7 @@
   </component>
   <component name="RecentsManager">
     <key name="CopyFile.RECENT_KEYS">
+      <recent name="C:\Users\piotr.gawron\workspace\MapViewer-parent\frontend-js\testFiles\apiCalls\projects\sample" />
       <recent name="C:\Users\piotr.gawron\workspace\MapViewer-parent\frontend-js\src\main\js" />
       <recent name="C:\Users\piotr.gawron\workspace\MapViewer-parent\frontend-js\src\test\js" />
     </key>
@@ -471,21 +461,6 @@
         <name value="AddProjectDialog" />
       </test-names>
     </configuration>
-    <configuration name="AddProjectDialog.init" type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
-      <node-interpreter>project</node-interpreter>
-      <node-options />
-      <working-directory>$PROJECT_DIR$</working-directory>
-      <pass-parent-env>true</pass-parent-env>
-      <envs />
-      <ui>bdd</ui>
-      <extra-mocha-options />
-      <test-kind>TEST</test-kind>
-      <test-file>$PROJECT_DIR$/src/test/js/gui/admin/AddProjectDialog-test.js</test-file>
-      <test-names>
-        <name value="AddProjectDialog" />
-        <name value="init" />
-      </test-names>
-    </configuration>
     <configuration name="AddProjectDialog.js" type="NodeJSConfigurationType" factoryName="Node.js" temporary="true" path-to-node="project" path-to-js-file="AddProjectDialog.js" working-dir="$PROJECT_DIR$/src/main/js/gui/admin">
       <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
         <option name="envVars">
@@ -532,6 +507,22 @@
         </option>
       </EXTENSION>
     </configuration>
+    <configuration name="ServerConnector.removeProject.default" type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST</test-kind>
+      <test-file>$PROJECT_DIR$/src/test/js/ServerConnector-test.js</test-file>
+      <test-names>
+        <name value="ServerConnector" />
+        <name value="removeProject" />
+        <name value="default" />
+      </test-names>
+    </configuration>
     <configuration name="Unnamed" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" path-to-js-file="node_modules/mocha/bin/_mocha" application-parameters="--recursive src/test --grep &quot;create Admin&quot;" working-dir="$PROJECT_DIR$">
       <profiling do-profile="true" />
       <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
@@ -636,19 +627,19 @@
       <item index="0" class="java.lang.String" itemvalue="Node.js.Unnamed" />
       <item index="1" class="java.lang.String" itemvalue="npm.build-deploy" />
       <item index="2" class="java.lang.String" itemvalue="npm.test" />
-      <item index="3" class="java.lang.String" itemvalue="Mocha.AddProjectDialog.init" />
-      <item index="4" class="java.lang.String" itemvalue="Mocha.AddProjectDialog" />
-      <item index="5" class="java.lang.String" itemvalue="Mocha.src\test\js\gui\admin\AddProjectDialog-test.js" />
-      <item index="6" class="java.lang.String" itemvalue="Node.js.GuiConnector.js" />
-      <item index="7" class="java.lang.String" itemvalue="Node.js.AddProjectDialog.js" />
+      <item index="3" class="java.lang.String" itemvalue="Mocha.AddProjectDialog" />
+      <item index="4" class="java.lang.String" itemvalue="Mocha.src\test\js\gui\admin\AddProjectDialog-test.js" />
+      <item index="5" class="java.lang.String" itemvalue="Node.js.GuiConnector.js" />
+      <item index="6" class="java.lang.String" itemvalue="Node.js.AddProjectDialog.js" />
+      <item index="7" class="java.lang.String" itemvalue="Mocha.ServerConnector.removeProject.default" />
     </list>
     <recent_temporary>
       <list size="5">
-        <item index="0" class="java.lang.String" itemvalue="Node.js.AddProjectDialog.js" />
-        <item index="1" class="java.lang.String" itemvalue="Node.js.GuiConnector.js" />
-        <item index="2" class="java.lang.String" itemvalue="Mocha.AddProjectDialog" />
-        <item index="3" class="java.lang.String" itemvalue="Mocha.src\test\js\gui\admin\AddProjectDialog-test.js" />
-        <item index="4" class="java.lang.String" itemvalue="Mocha.AddProjectDialog.init" />
+        <item index="0" class="java.lang.String" itemvalue="Mocha.ServerConnector.removeProject.default" />
+        <item index="1" class="java.lang.String" itemvalue="Node.js.AddProjectDialog.js" />
+        <item index="2" class="java.lang.String" itemvalue="Node.js.GuiConnector.js" />
+        <item index="3" class="java.lang.String" itemvalue="Mocha.AddProjectDialog" />
+        <item index="4" class="java.lang.String" itemvalue="Mocha.src\test\js\gui\admin\AddProjectDialog-test.js" />
       </list>
     </recent_temporary>
   </component>
@@ -669,44 +660,45 @@
       <workItem from="1503501772627" duration="21000" />
       <workItem from="1503502231792" duration="5017000" />
       <workItem from="1503560609163" duration="22426000" />
-      <workItem from="1503648028157" duration="7262000" />
+      <workItem from="1503648028157" duration="9357000" />
+      <workItem from="1503673204553" duration="113000" />
     </task>
     <servers />
   </component>
   <component name="TestHistory">
-    <history-entry file="AddProjectDialog - 2017.08.25 at 15h 02m 15s.xml">
+    <history-entry file="AddProjectDialog - 2017.08.25 at 15h 46m 22s.xml">
       <configuration name="AddProjectDialog" configurationId="mocha-javascript-test-runner" />
     </history-entry>
-    <history-entry file="AddProjectDialog - 2017.08.25 at 15h 45m 33s.xml">
+    <history-entry file="AddProjectDialog - 2017.08.25 at 15h 46m 42s.xml">
       <configuration name="AddProjectDialog" configurationId="mocha-javascript-test-runner" />
     </history-entry>
-    <history-entry file="AddProjectDialog - 2017.08.25 at 15h 45m 55s.xml">
-      <configuration name="AddProjectDialog" configurationId="mocha-javascript-test-runner" />
+    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 34m 51s.xml">
+      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
-    <history-entry file="AddProjectDialog - 2017.08.25 at 15h 46m 22s.xml">
-      <configuration name="AddProjectDialog" configurationId="mocha-javascript-test-runner" />
+    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 36m 31s.xml">
+      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
-    <history-entry file="AddProjectDialog - 2017.08.25 at 15h 46m 42s.xml">
-      <configuration name="AddProjectDialog" configurationId="mocha-javascript-test-runner" />
+    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 36m 48s.xml">
+      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
-    <history-entry file="AddProjectDialog_init - 2017.08.25 at 15h 01m 58s.xml">
-      <configuration name="AddProjectDialog.init" configurationId="mocha-javascript-test-runner" />
+    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 37m 17s.xml">
+      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
-    <history-entry file="src_test_js_gui_admin_AddProjectDialog-test_js - 2017.08.25 at 15h 26m 51s.xml">
-      <configuration name="src\test\js\gui\admin\AddProjectDialog-test.js" configurationId="mocha-javascript-test-runner" />
+    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 37m 49s.xml">
+      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
-    <history-entry file="src_test_js_gui_admin_AddProjectDialog-test_js - 2017.08.25 at 15h 33m 16s.xml">
-      <configuration name="src\test\js\gui\admin\AddProjectDialog-test.js" configurationId="mocha-javascript-test-runner" />
+    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 41m 03s.xml">
+      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
-    <history-entry file="src_test_js_gui_admin_AddProjectDialog-test_js - 2017.08.25 at 15h 33m 34s.xml">
-      <configuration name="src\test\js\gui\admin\AddProjectDialog-test.js" configurationId="mocha-javascript-test-runner" />
+    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 42m 01s.xml">
+      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
-    <history-entry file="src_test_js_gui_admin_AddProjectDialog-test_js - 2017.08.25 at 15h 33m 42s.xml">
-      <configuration name="src\test\js\gui\admin\AddProjectDialog-test.js" configurationId="mocha-javascript-test-runner" />
+    <history-entry file="ServerConnector_removeProject_default - 2017.08.25 at 16h 42m 14s.xml">
+      <configuration name="ServerConnector.removeProject.default" configurationId="mocha-javascript-test-runner" />
     </history-entry>
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="34858000" />
+    <option name="totallyTimeSpent" value="37066000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="-8" y="-8" width="1936" height="1176" extended-state="6" />
@@ -715,10 +707,8 @@
       <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18020834" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
       <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.5679475" sideWeight="0.33802083" order="7" side_tool="true" content_ui="tabs" />
-      <window_info id="Inspection Results" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3298969" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
-      <window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.33833176" sideWeight="0.49791667" order="10" side_tool="false" content_ui="tabs" x="-170" y="502" width="1920" height="493" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33833176" sideWeight="0.49791667" order="10" side_tool="false" content_ui="tabs" x="-170" y="502" width="1920" height="493" />
       <window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
@@ -729,6 +719,8 @@
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Inspection Results" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3298969" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="V8 CPU Profiling" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.34489223" sideWeight="0.66197914" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
     </layout>
@@ -765,31 +757,10 @@
     <watches-manager />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/main/js/gui/topMenu/TopMenu.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="553">
-          <caret line="226" column="20" lean-forward="false" selection-start-line="226" selection-start-column="20" selection-end-line="226" selection-end-column="20" />
-          <folding>
-            <marker date="1503565170451" expanded="true" signature="2288:2340" ph="..." />
-            <marker date="1503565170451" expanded="true" signature="3951:3983" ph="..." />
-            <marker date="1503565170451" expanded="true" signature="4385:4437" ph="..." />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/js/gui/leftPanel/LeftPanel.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="252">
-          <caret line="165" column="97" lean-forward="false" selection-start-line="165" selection-start-column="97" selection-end-line="165" selection-end-column="97" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/test/js/gui/leftPanel/LeftPanel-test.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="580">
           <caret line="59" column="0" lean-forward="false" selection-start-line="59" selection-start-column="0" selection-end-line="59" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -797,7 +768,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="-7">
           <caret line="41" column="0" lean-forward="false" selection-start-line="41" selection-start-column="0" selection-end-line="41" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -805,7 +775,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="-7">
           <caret line="49" column="0" lean-forward="false" selection-start-line="49" selection-start-column="0" selection-end-line="49" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -813,7 +782,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="229">
           <caret line="15" column="11" lean-forward="false" selection-start-line="15" selection-start-column="11" selection-end-line="15" selection-end-column="11" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -821,12 +789,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="551">
           <caret line="359" column="2" lean-forward="false" selection-start-line="359" selection-start-column="2" selection-end-line="359" selection-end-column="2" />
-          <folding>
-            <marker date="1503581361599" expanded="true" signature="3451:3457" ph=" " />
-            <marker date="1503581361599" expanded="true" signature="4227:4233" ph=" " />
-            <marker date="1503581361599" expanded="true" signature="4736:4742" ph=" " />
-            <marker date="1503581361599" expanded="true" signature="5047:5053" ph=" " />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -834,7 +796,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="331">
           <caret line="123" column="32" lean-forward="false" selection-start-line="123" selection-start-column="32" selection-end-line="123" selection-end-column="32" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -842,7 +803,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="323">
           <caret line="70" column="36" lean-forward="false" selection-start-line="70" selection-start-column="36" selection-end-line="70" selection-end-column="36" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -850,7 +810,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="187">
           <caret line="11" column="18" lean-forward="false" selection-start-line="11" selection-start-column="18" selection-end-line="11" selection-end-column="18" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -858,7 +817,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="341">
           <caret line="503" column="37" lean-forward="false" selection-start-line="503" selection-start-column="37" selection-end-line="503" selection-end-column="37" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -890,7 +848,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="0">
           <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -898,7 +855,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="218">
           <caret line="64" column="0" lean-forward="false" selection-start-line="64" selection-start-column="0" selection-end-line="64" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -906,7 +862,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="255">
           <caret line="15" column="5" lean-forward="true" selection-start-line="15" selection-start-column="5" selection-end-line="15" selection-end-column="5" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -914,7 +869,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="349">
           <caret line="36" column="0" lean-forward="false" selection-start-line="33" selection-start-column="0" selection-end-line="36" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -922,7 +876,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="170">
           <caret line="10" column="9" lean-forward="false" selection-start-line="10" selection-start-column="9" selection-end-line="10" selection-end-column="9" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -930,7 +883,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="65">
           <caret line="6" column="47" lean-forward="false" selection-start-line="6" selection-start-column="47" selection-end-line="6" selection-end-column="47" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -938,7 +890,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="234">
           <caret line="89" column="0" lean-forward="true" selection-start-line="89" selection-start-column="0" selection-end-line="89" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -946,7 +897,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="119">
           <caret line="7" column="34" lean-forward="true" selection-start-line="7" selection-start-column="34" selection-end-line="7" selection-end-column="34" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -958,30 +908,10 @@
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/isolate-0000000000455D70-v8-2017-08-24_16-56-20-.log" />
-    <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/CommentsAdminPanel.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="233">
-          <caret line="120" column="0" lean-forward="false" selection-start-line="120" selection-start-column="0" selection-end-line="120" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/MapsAdminPanel.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="206">
-          <caret line="126" column="0" lean-forward="false" selection-start-line="126" selection-start-column="0" selection-end-line="126" selection-end-column="0" />
-          <folding>
-            <marker date="1503586944911" expanded="true" signature="1612:1618" ph=" " />
-            <marker date="1503586944911" expanded="true" signature="1922:1928" ph=" " />
-          </folding>
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/main/js/Admin.js">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="335">
           <caret line="150" column="0" lean-forward="false" selection-start-line="150" selection-start-column="0" selection-end-line="150" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -996,7 +926,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="187">
           <caret line="11" column="23" lean-forward="false" selection-start-line="11" selection-start-column="23" selection-end-line="11" selection-end-column="23" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1004,7 +933,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="1428">
           <caret line="84" column="40" lean-forward="false" selection-start-line="84" selection-start-column="40" selection-end-line="84" selection-end-column="40" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1012,7 +940,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="269">
           <caret line="451" column="23" lean-forward="false" selection-start-line="451" selection-start-column="9" selection-end-line="451" selection-end-column="23" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1020,7 +947,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="311">
           <caret line="361" column="24" lean-forward="false" selection-start-line="361" selection-start-column="24" selection-end-line="361" selection-end-column="24" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1028,7 +954,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="255">
           <caret line="581" column="32" lean-forward="false" selection-start-line="581" selection-start-column="32" selection-end-line="581" selection-end-column="32" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1036,7 +961,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="243">
           <caret line="28" column="0" lean-forward="true" selection-start-line="27" selection-start-column="0" selection-end-line="28" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1044,7 +968,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="5525">
           <caret line="325" column="75" lean-forward="false" selection-start-line="325" selection-start-column="75" selection-end-line="325" selection-end-column="75" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1052,7 +975,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="303">
           <caret line="186" column="44" lean-forward="false" selection-start-line="186" selection-start-column="44" selection-end-line="186" selection-end-column="44" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1060,7 +982,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="0">
           <caret line="15" column="8" lean-forward="false" selection-start-line="15" selection-start-column="8" selection-end-line="15" selection-end-column="8" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1068,7 +989,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="102">
           <caret line="6" column="0" lean-forward="true" selection-start-line="5" selection-start-column="0" selection-end-line="6" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1076,7 +996,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="85">
           <caret line="5" column="0" lean-forward="true" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1084,7 +1003,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="0">
           <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1092,7 +1010,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="0">
           <caret line="0" column="6052" lean-forward="false" selection-start-line="0" selection-start-column="6052" selection-end-line="0" selection-end-column="6052" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1100,7 +1017,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="136">
           <caret line="8" column="25" lean-forward="false" selection-start-line="8" selection-start-column="25" selection-end-line="8" selection-end-column="25" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1108,7 +1024,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="306">
           <caret line="42" column="7" lean-forward="false" selection-start-line="42" selection-start-column="7" selection-end-line="42" selection-end-column="7" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1116,7 +1031,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="561">
           <caret line="33" column="21" lean-forward="true" selection-start-line="33" selection-start-column="21" selection-end-line="33" selection-end-column="21" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1124,7 +1038,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="338">
           <caret line="117" column="0" lean-forward="false" selection-start-line="117" selection-start-column="0" selection-end-line="117" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1132,7 +1045,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="-289">
           <caret line="19" column="31" lean-forward="false" selection-start-line="19" selection-start-column="31" selection-end-line="19" selection-end-column="31" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1140,29 +1052,20 @@
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="338">
           <caret line="38" column="4" lean-forward="false" selection-start-line="38" selection-start-column="4" selection-end-line="38" selection-end-column="4" />
-          <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/src/test/js/map/TouchMap-test.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="338">
+        <state relative-caret-position="1547">
           <caret line="91" column="11" lean-forward="false" selection-start-line="91" selection-start-column="11" selection-end-line="91" selection-end-column="11" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/main/js/ServerConnector.js">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-1445">
-          <caret line="66" column="7" lean-forward="false" selection-start-line="66" selection-start-column="7" selection-end-line="66" selection-end-column="7" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/src/main/js/minerva.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="355">
+        <state relative-caret-position="5712">
           <caret line="336" column="11" lean-forward="false" selection-start-line="336" selection-start-column="11" selection-end-line="336" selection-end-column="11" />
           <folding>
             <marker date="1503670069762" expanded="true" signature="16640:16699" ph="..." />
@@ -1182,7 +1085,7 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/src/main/js/GuiConnector.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="897">
+        <state relative-caret-position="3961">
           <caret line="233" column="39" lean-forward="false" selection-start-line="233" selection-start-column="39" selection-end-line="233" selection-end-column="39" />
           <folding />
         </state>
@@ -1190,8 +1093,8 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/AddProjectDialog.js">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="421">
-          <caret line="498" column="56" lean-forward="true" selection-start-line="498" selection-start-column="56" selection-end-line="498" selection-end-column="56" />
+        <state relative-caret-position="221">
+          <caret line="13" column="34" lean-forward="false" selection-start-line="13" selection-start-column="34" selection-end-line="13" selection-end-column="34" />
           <folding>
             <marker date="1503670249417" expanded="true" signature="4888:4894" ph=" " />
             <marker date="1503670249417" expanded="true" signature="5205:5211" ph=" " />
@@ -1199,6 +1102,48 @@
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/CommentsAdminPanel.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2839">
+          <caret line="167" column="19" lean-forward="false" selection-start-line="167" selection-start-column="19" selection-end-line="167" selection-end-column="19" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID&amp;">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="13" lean-forward="false" selection-start-line="0" selection-start-column="13" selection-end-line="0" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/js/gui/admin/MapsAdminPanel.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="4692">
+          <caret line="276" column="34" lean-forward="false" selection-start-line="276" selection-start-column="34" selection-end-line="276" selection-end-column="34" />
+          <folding>
+            <marker date="1503671355126" expanded="true" signature="1540:1546" ph=" " />
+            <marker date="1503671355126" expanded="true" signature="1820:1826" ph=" " />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/js/ServerConnector.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="10506">
+          <caret line="618" column="35" lean-forward="false" selection-start-line="618" selection-start-column="35" selection-end-line="618" selection-end-column="35" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/test/js/ServerConnector-test.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="431">
+          <caret line="161" column="5" lean-forward="true" selection-start-line="161" selection-start-column="5" selection-end-line="161" selection-end-column="5" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
   </component>
   <component name="masterDetails">
     <states>
diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 2a34886a6f..55ad658ff1 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -41,7 +41,7 @@ var ObjectWithListeners = require('./ObjectWithListeners');
  * This object contains methods that will communicate with server.
  */
 var ServerConnector = new ObjectWithListeners();
-ServerConnector.init = function() {
+ServerConnector.init = function () {
   var self = this;
 
   self._configurationParam = [];
@@ -73,16 +73,16 @@ ServerConnector.registerListenerType("onDataLoadStart");
 ServerConnector.registerListenerType("onDataLoadStop");
 ServerConnector.init();
 
-ServerConnector.getMinOverlayColorInt = function() {
+ServerConnector.getMinOverlayColorInt = function () {
   var self = this;
-  return self.getLoggedUser().then(function(user) {
+  return self.getLoggedUser().then(function (user) {
     var userColor = user.getMinColor();
     return self.returnUserOrSystemColor(userColor, self.getConfigurationParam(ConfigurationType.MIN_COLOR_VAL));
   });
 };
 
-ServerConnector.returnUserOrSystemColor = function(userColor, systemPromisedColor) {
-  return systemPromisedColor.then(function(systemColor) {
+ServerConnector.returnUserOrSystemColor = function (userColor, systemPromisedColor) {
+  return systemPromisedColor.then(function (systemColor) {
     var color = userColor;
     if (userColor === null || userColor === undefined || userColor === "") {
       color = systemColor;
@@ -94,31 +94,31 @@ ServerConnector.returnUserOrSystemColor = function(userColor, systemPromisedColo
   });
 };
 
-ServerConnector.getSimpleOverlayColorInt = function() {
+ServerConnector.getSimpleOverlayColorInt = function () {
   var self = this;
-  return self.getLoggedUser().then(function(user) {
+  return self.getLoggedUser().then(function (user) {
     var userColor = user.getSimpleColor();
     return self.returnUserOrSystemColor(userColor, self.getConfigurationParam(ConfigurationType.SIMPLE_COLOR_VAL));
   });
 };
 
-ServerConnector.getMaxOverlayColorInt = function() {
+ServerConnector.getMaxOverlayColorInt = function () {
   var self = this;
-  return self.getLoggedUser().then(function(user) {
+  return self.getLoggedUser().then(function (user) {
     var userColor = user.getMaxColor();
     return self.returnUserOrSystemColor(userColor, self.getConfigurationParam(ConfigurationType.MAX_COLOR_VAL));
   });
 };
 
-ServerConnector.sendGetRequest = function(url, description) {
+ServerConnector.sendGetRequest = function (url, description) {
   return this.sendRequest({
-    url : url,
-    description : description,
-    method : "GET"
+    url: url,
+    description: description,
+    method: "GET"
   });
 };
 
-ServerConnector.sendRequest = function(params) {
+ServerConnector.sendRequest = function (params) {
   var self = this;
 
   if (self.getSessionData().getToken() === undefined) {
@@ -133,31 +133,31 @@ ServerConnector.sendRequest = function(params) {
   }
 
   var content;
-  return self.callListeners("onDataLoadStart", description).then(function() {
+  return self.callListeners("onDataLoadStart", description).then(function () {
     return self._sendRequest(params);
-  }).then(function(result) {
+  }).then(function (result) {
     content = result;
     return self.callListeners("onDataLoadStop", description);
-  }, function(error) {
-    return self.callListeners("onDataLoadStop", description).then(function() {
+  }, function (error) {
+    return self.callListeners("onDataLoadStop", description).then(function () {
       return Promise.reject(error);
     });
-  }).then(function() {
+  }).then(function () {
     return content;
   });
 
 };
 
-ServerConnector._sendRequest = function(params) {
-  return new Promise(function(resolve, reject) {
-    request(params, function(error, response, body) {
+ServerConnector._sendRequest = function (params) {
+  return new Promise(function (resolve, reject) {
+    request(params, function (error, response, body) {
       if (error) {
         reject(error);
       } else if (response.statusCode !== 200) {
         reject(new NetworkError(params.url + " rejected with status code: " + response.statusCode, {
-          content : body,
-          url : params.url,
-          statusCode : response.statusCode
+          content: body,
+          url: params.url,
+          statusCode: response.statusCode
         }));
       } else {
         // for some reason sometimes result is an object not a string
@@ -171,31 +171,31 @@ ServerConnector._sendRequest = function(params) {
   });
 };
 
-ServerConnector.sendPostRequest = function(url, params) {
+ServerConnector.sendPostRequest = function (url, params) {
   return this.sendRequest({
-    method : "POST",
-    url : url,
-    form : params
+    method: "POST",
+    url: url,
+    form: params
   });
 };
 
-ServerConnector.sendDeleteRequest = function(url, json) {
+ServerConnector.sendDeleteRequest = function (url, json) {
   return this.sendRequest({
-    method : "DELETE",
-    url : url,
-    json : json,
+    method: "DELETE",
+    url: url,
+    json: json,
   });
 };
 
-ServerConnector.sendPatchRequest = function(url, json) {
+ServerConnector.sendPatchRequest = function (url, json) {
   return this.sendRequest({
-    method : "PATCH",
-    url : url,
-    json : json,
+    method: "PATCH",
+    url: url,
+    json: json,
   });
 };
 
-ServerConnector.getToken = function() {
+ServerConnector.getToken = function () {
   var self = this;
 
   var token = self.getSessionData(null).getToken();
@@ -205,11 +205,11 @@ ServerConnector.getToken = function() {
     // if the project is not initialized then check if we can download data
     // using current token
     if (self.getSessionData().getProject() === null) {
-      return self.getConfiguration().then(function() {
+      return self.getConfiguration().then(function () {
         return token;
         // if there was an error accessing configuration it means our token is
         // invalid
-      }, function() {
+      }, function () {
         return self.login();
       });
     } else {
@@ -218,11 +218,11 @@ ServerConnector.getToken = function() {
   }
 };
 
-ServerConnector.getApiBaseUrl = function() {
+ServerConnector.getApiBaseUrl = function () {
   return this.getServerBaseUrl() + "/api/";
 };
 
-ServerConnector.getServerBaseUrl = function() {
+ServerConnector.getServerBaseUrl = function () {
   if (this._serverBaseUrl === undefined) {
     var url = "" + window.location.href;
     if (!url.endsWith("/")) {
@@ -233,7 +233,7 @@ ServerConnector.getServerBaseUrl = function() {
   return this._serverBaseUrl;
 };
 
-ServerConnector.createGetParams = function(params, prefix) {
+ServerConnector.createGetParams = function (params, prefix) {
   var sorted = [], key;
 
   for (key in params) {
@@ -269,7 +269,7 @@ ServerConnector.createGetParams = function(params, prefix) {
   return result;
 };
 
-ServerConnector.getApiUrl = function(paramObj) {
+ServerConnector.getApiUrl = function (paramObj) {
   var type = paramObj.type;
   var params = this.createGetParams(paramObj.params);
 
@@ -283,99 +283,99 @@ ServerConnector.getApiUrl = function(paramObj) {
   return result;
 };
 
-ServerConnector.getProjectsUrl = function(queryParams, filterParams) {
+ServerConnector.getProjectsUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    type : "projects/",
-    params : filterParams,
+    type: "projects/",
+    params: filterParams,
   });
 };
 
-ServerConnector.getProjectUrl = function(queryParams, filterParams) {
+ServerConnector.getProjectUrl = function (queryParams, filterParams) {
   var id = this.getIdOrAsterisk(queryParams.projectId);
   return this.getApiUrl({
-    url : this.getProjectsUrl(queryParams) + id + "/",
-    params : filterParams,
+    url: this.getProjectsUrl(queryParams) + id + "/",
+    params: filterParams,
   });
 };
 
-ServerConnector.getProjectStatisticsUrl = function(queryParams, filterParams) {
+ServerConnector.getProjectStatisticsUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getProjectUrl(queryParams) + "statistics/",
-    params : filterParams,
+    url: this.getProjectUrl(queryParams) + "statistics/",
+    params: filterParams,
   });
 };
 
-ServerConnector.getPublicationsUrl = function(queryParams, filterParams) {
+ServerConnector.getPublicationsUrl = function (queryParams, filterParams) {
   filterParams.start = filterParams.start || 0;
   filterParams.length = filterParams.length || 10;
 
   return this.getApiUrl({
-    url : this.getModelsUrl(queryParams) + "publications/",
-    params : filterParams,
+    url: this.getModelsUrl(queryParams) + "publications/",
+    params: filterParams,
   });
 };
 
-ServerConnector.getReferenceGenomeUrl = function(queryParams, filterParams) {
+ServerConnector.getReferenceGenomeUrl = function (queryParams, filterParams) {
   var version = this.getIdOrAsterisk(queryParams.version);
 
   return this.getApiUrl({
-    type : "genomics/taxonomies/" + queryParams.organism + "/genomeTypes/" + queryParams.type + "/versions/" + version
-        + "/",
-    params : filterParams
+    type: "genomics/taxonomies/" + queryParams.organism + "/genomeTypes/" + queryParams.type + "/versions/" + version
+    + "/",
+    params: filterParams
   });
 };
 
-ServerConnector.loginUrl = function() {
+ServerConnector.loginUrl = function () {
   return this.getApiUrl({
-    type : "/doLogin",
+    type: "/doLogin",
   });
 };
 
-ServerConnector.getSuggestedQueryListUrl = function(queryParams, filterParams) {
+ServerConnector.getSuggestedQueryListUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getBioEntitiesUrl(queryParams) + "suggestedQueryList/",
-    params : filterParams,
+    url: this.getBioEntitiesUrl(queryParams) + "suggestedQueryList/",
+    params: filterParams,
   });
 };
 
-ServerConnector.addCommentUrl = function(queryParams) {
+ServerConnector.addCommentUrl = function (queryParams) {
   return this.getApiUrl({
-    url : this.getCommentsUrl(queryParams)
+    url: this.getCommentsUrl(queryParams)
   });
 };
 
-ServerConnector.addOverlayUrl = function(queryParams) {
+ServerConnector.addOverlayUrl = function (queryParams) {
   return this.getApiUrl({
-    url : this.getOverlaysUrl(queryParams)
+    url: this.getOverlaysUrl(queryParams)
   });
 };
 
-ServerConnector.updateOverlayUrl = function(queryParams) {
+ServerConnector.updateOverlayUrl = function (queryParams) {
   return this.getApiUrl({
-    url : this.getOverlayByIdUrl(queryParams)
+    url: this.getOverlayByIdUrl(queryParams)
   });
 };
 
-ServerConnector.deleteOverlayUrl = function(queryParams) {
+ServerConnector.deleteOverlayUrl = function (queryParams) {
   return this.getApiUrl({
-    url : this.getOverlayByIdUrl(queryParams),
+    url: this.getOverlayByIdUrl(queryParams),
   });
 };
 
-ServerConnector.deleteCommentUrl = function(queryParams) {
+ServerConnector.deleteCommentUrl = function (queryParams) {
   return this.getApiUrl({
-    url : this.getProjectUrl(queryParams) + "comments/" + queryParams.commentId + "/",
+    url: this.getProjectUrl(queryParams) + "comments/" + queryParams.commentId + "/",
   });
 };
 
-ServerConnector.getOverlaysUrl = function(queryParams, filterParams) {
+ServerConnector.getOverlaysUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getProjectUrl(queryParams) + "overlays/",
-    params : filterParams,
+    url: this.getProjectUrl(queryParams) + "overlays/",
+    params: filterParams,
   });
 };
 
-ServerConnector.getCommentsUrl = function(queryParams, filterParams) {
+ServerConnector.getCommentsUrl = function (queryParams, filterParams) {
   var modelId = this.getIdOrAsterisk(queryParams.modelId);
   var url = this.getProjectUrl(queryParams) + "comments/models/" + modelId + "/";
   if (queryParams.elementType !== undefined) {
@@ -390,41 +390,41 @@ ServerConnector.getCommentsUrl = function(queryParams, filterParams) {
     }
   }
   return this.getApiUrl({
-    url : url,
-    params : filterParams,
+    url: url,
+    params: filterParams,
   });
 };
 
-ServerConnector.getOverlayByIdUrl = function(queryParams, filterParams) {
+ServerConnector.getOverlayByIdUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getOverlaysUrl(queryParams) + queryParams.overlayId + "/",
-    params : filterParams,
+    url: this.getOverlaysUrl(queryParams) + queryParams.overlayId + "/",
+    params: filterParams,
   });
 
 };
 
-ServerConnector.getOverlayElementsUrl = function(queryParams, filterParams) {
+ServerConnector.getOverlayElementsUrl = function (queryParams, filterParams) {
 
   return this.getApiUrl({
-    url : this.getModelsUrl(queryParams) + "bioEntities/",
-    params : filterParams,
+    url: this.getModelsUrl(queryParams) + "bioEntities/",
+    params: filterParams,
   });
 
 };
 
-ServerConnector.getFullOverlayElementUrl = function(queryParams, filterParams) {
+ServerConnector.getFullOverlayElementUrl = function (queryParams, filterParams) {
 
   return this.getApiUrl({
-    url : this.getAliasesUrl(queryParams) + queryParams.id + "/",
-    params : filterParams,
+    url: this.getAliasesUrl(queryParams) + queryParams.id + "/",
+    params: filterParams,
   });
 
 };
 
-ServerConnector.idsToString = function(ids) {
+ServerConnector.idsToString = function (ids) {
   var result = "";
   if (ids !== undefined) {
-    ids.sort(function(a, b) {
+    ids.sort(function (a, b) {
       return a - b;
     });
     for (var i = 0; i < ids.length; i++) {
@@ -440,11 +440,11 @@ ServerConnector.idsToString = function(ids) {
   return result;
 };
 
-ServerConnector.pointToString = function(point) {
+ServerConnector.pointToString = function (point) {
   return point.x.toFixed(2) + "," + point.y.toFixed(2);
 };
 
-ServerConnector.getModelsUrl = function(queryParams) {
+ServerConnector.getModelsUrl = function (queryParams) {
   var modelId = this.getIdOrAsterisk(queryParams.modelId);
   var overlayId = queryParams.overlayId;
   var url = this.getProjectUrl(queryParams);
@@ -453,17 +453,17 @@ ServerConnector.getModelsUrl = function(queryParams) {
   }
 
   return this.getApiUrl({
-    url : url + "models/" + modelId + "/",
+    url: url + "models/" + modelId + "/",
   });
 };
 
-ServerConnector.getBioEntitiesUrl = function(queryParams) {
+ServerConnector.getBioEntitiesUrl = function (queryParams) {
   return this.getApiUrl({
-    url : this.getModelsUrl(queryParams) + "bioEntities/",
+    url: this.getModelsUrl(queryParams) + "bioEntities/",
   });
 };
 
-ServerConnector.getIdOrAsterisk = function(id) {
+ServerConnector.getIdOrAsterisk = function (id) {
   if (id === undefined || id === "" || id === null) {
     return "*";
   } else {
@@ -471,112 +471,112 @@ ServerConnector.getIdOrAsterisk = function(id) {
   }
 };
 
-ServerConnector.getReactionsUrl = function(queryParams, filterParams) {
+ServerConnector.getReactionsUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getBioEntitiesUrl(queryParams) + "reactions/",
-    params : filterParams,
+    url: this.getBioEntitiesUrl(queryParams) + "reactions/",
+    params: filterParams,
   });
 };
 
-ServerConnector.getAliasesUrl = function(queryParams, filterParams) {
+ServerConnector.getAliasesUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getBioEntitiesUrl(queryParams) + "elements/",
-    params : filterParams,
+    url: this.getBioEntitiesUrl(queryParams) + "elements/",
+    params: filterParams,
   });
 };
 
-ServerConnector.getConfigurationUrl = function(queryParams, filterParams) {
+ServerConnector.getConfigurationUrl = function (queryParams, filterParams) {
   var result = this.getApiUrl({
-    type : "configuration/",
-    params : filterParams
+    type: "configuration/",
+    params: filterParams
   });
   return result;
 };
 
-ServerConnector.getSearchUrl = function(queryParams, filterParams) {
+ServerConnector.getSearchUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getModelsUrl(queryParams) + "bioEntities:search",
-    params : filterParams,
+    url: this.getModelsUrl(queryParams) + "bioEntities:search",
+    params: filterParams,
   });
 };
 
-ServerConnector.getSearchDrugsUrl = function(queryParams, filterParams) {
+ServerConnector.getSearchDrugsUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getProjectUrl(queryParams) + "drugs:search",
-    params : filterParams,
+    url: this.getProjectUrl(queryParams) + "drugs:search",
+    params: filterParams,
   });
 };
 
-ServerConnector.getSearchMiRnasUrl = function(queryParams, filterParams) {
+ServerConnector.getSearchMiRnasUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getProjectUrl(queryParams) + "miRnas:search",
-    params : filterParams,
+    url: this.getProjectUrl(queryParams) + "miRnas:search",
+    params: filterParams,
   });
 };
 
-ServerConnector.getSearchChemicalsUrl = function(queryParams, filterParams) {
+ServerConnector.getSearchChemicalsUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getProjectUrl(queryParams) + "chemicals:search",
-    params : filterParams,
+    url: this.getProjectUrl(queryParams) + "chemicals:search",
+    params: filterParams,
   });
 };
 
-ServerConnector.getOverlaySourceUrl = function(queryParams, filterParams) {
+ServerConnector.getOverlaySourceUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getOverlaysUrl(queryParams) + queryParams.overlayId + ":downloadSource",
-    params : filterParams
+    url: this.getOverlaysUrl(queryParams) + queryParams.overlayId + ":downloadSource",
+    params: filterParams
   });
 };
 
-ServerConnector.getImageUrl = function(queryParams, filterParams) {
+ServerConnector.getImageUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getProjectUrl(queryParams) + "models/" + queryParams.modelId + ":downloadImage",
-    params : filterParams,
+    url: this.getProjectUrl(queryParams) + "models/" + queryParams.modelId + ":downloadImage",
+    params: filterParams,
   });
 };
 
-ServerConnector.getModelPartUrl = function(queryParams, filterParams) {
+ServerConnector.getModelPartUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getProjectUrl(queryParams) + "models/" + queryParams.modelId + ":downloadModel",
-    params : filterParams,
+    url: this.getProjectUrl(queryParams) + "models/" + queryParams.modelId + ":downloadModel",
+    params: filterParams,
   });
 };
 
-ServerConnector.getProjectSourceUrl = function(queryParams, filterParams) {
+ServerConnector.getProjectSourceUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    type : "projects/" + queryParams.projectId + ":downloadSource",
-    params : filterParams
+    type: "projects/" + queryParams.projectId + ":downloadSource",
+    params: filterParams
   });
 };
 
-ServerConnector.getUsersUrl = function(queryParams, filterParams) {
+ServerConnector.getUsersUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    type : "users/",
-    params : filterParams
+    type: "users/",
+    params: filterParams
   });
 };
 
-ServerConnector.getUserUrl = function(queryParams, filterParams) {
+ServerConnector.getUserUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getUsersUrl() + queryParams.login,
-    params : filterParams,
+    url: this.getUsersUrl() + queryParams.login,
+    params: filterParams,
   });
 };
 
-ServerConnector.getUpdateUserPrivilegesUrl = function(queryParams, filterParams) {
+ServerConnector.getUpdateUserPrivilegesUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
-    url : this.getUserUrl(queryParams) + ":updatePrivileges",
-    params : filterParams,
+    url: this.getUserUrl(queryParams) + ":updatePrivileges",
+    params: filterParams,
   });
 };
 
-ServerConnector.getConfiguration = function(params) {
+ServerConnector.getConfiguration = function (params) {
   if (params === undefined) {
     params = {};
   }
   var self = this;
   if (this._configuration === undefined) {
-    return self.sendGetRequest(self.getConfigurationUrl()).then(function(content) {
+    return self.sendGetRequest(self.getConfigurationUrl()).then(function (content) {
       self._configuration = new Configuration(JSON.parse(content));
       return Promise.resolve(self._configuration);
     });
@@ -585,21 +585,21 @@ ServerConnector.getConfiguration = function(params) {
   }
 };
 
-ServerConnector.getConfigurationParam = function(paramId) {
+ServerConnector.getConfigurationParam = function (paramId) {
   var self = this;
-  return self.getConfiguration().then(function(configuration) {
+  return self.getConfiguration().then(function (configuration) {
     return configuration.getOption(paramId);
   });
 };
 
-ServerConnector.getModels = function(projectId) {
+ServerConnector.getModels = function (projectId) {
   var queryParams = {};
   var filterParams = {};
   var self = this;
-  return self.getProjectId(projectId).then(function(result) {
+  return self.getProjectId(projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getModelsUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var models = [];
     var parsedJson = JSON.parse(content);
     for (var i = 0; i < parsedJson.length; i++) {
@@ -609,15 +609,16 @@ ServerConnector.getModels = function(projectId) {
   });
 };
 
-ServerConnector.getProject = function(projectId) {
+ServerConnector.getProject = function (projectId) {
   var queryParams = {};
   var filterParams = {};
   var project;
   var self = this;
-  return self.getProjectId(projectId).then(function(result) {
+  return self.getProjectId(projectId).then(function (result) {
+    projectId = result;
     queryParams.projectId = result;
     return self.sendGetRequest(self.getProjectUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var downloadedProject = new Project(content);
     if (self._projectsById[projectId] !== undefined) {
       self._projectsById[projectId].update(downloadedProject);
@@ -626,27 +627,27 @@ ServerConnector.getProject = function(projectId) {
     }
     project = self._projectsById[projectId];
     return self.getModels(projectId);
-  }).then(function(models) {
+  }).then(function (models) {
     project.setModel(models[0]);
     return self.getLoggedUser();
-  }).then(function(user) {
+  }).then(function (user) {
     return self.getOverlays({
-      projectId : projectId,
-      creator : user.getLogin(),
-      publicOverlay : false,
+      projectId: projectId,
+      creator: user.getLogin(),
+      publicOverlay: false,
     });
-  }).then(function(overlays) {
+  }).then(function (overlays) {
     project.getModel().addLayouts(overlays);
     return project;
-  }).then(null, function(error) {
+  }).then(null, function (error) {
     if ((error instanceof NetworkError)) {
       switch (error.statusCode) {
-      case HttpStatus.NOT_FOUND:
-        return null;
-      case HttpStatus.FORBIDDEN:
-        return Promise.reject(new SecurityError("Access denied."));
-      default:
-        return Promise.reject(error);
+        case HttpStatus.NOT_FOUND:
+          return null;
+        case HttpStatus.FORBIDDEN:
+          return Promise.reject(new SecurityError("Access denied."));
+        default:
+          return Promise.reject(error);
       }
     } else {
       return Promise.reject(error);
@@ -654,25 +655,53 @@ ServerConnector.getProject = function(projectId) {
   });
 };
 
-ServerConnector.updateProject = function(project) {
+ServerConnector.updateProject = function (project) {
   var self = this;
   var queryParams = {
-    projectId : project.getProjectId()
+    projectId: project.getProjectId()
   };
   var filterParams = {
-    project : {
-      name : project.getName(),
-      version : project.getVersion(),
-      notifyEmail : project.getNotifyEmail(),
-      organism : self.serialize(project.getOrganism()),
-      disease : self.serialize(project.getDisease()),
+    project: {
+      name: project.getName(),
+      version: project.getVersion(),
+      notifyEmail: project.getNotifyEmail(),
+      organism: self.serialize(project.getOrganism()),
+      disease: self.serialize(project.getDisease()),
     },
   };
-  return self.sendPatchRequest(self.getProjectUrl(queryParams), filterParams).then(function(content) {
+  return self.sendPatchRequest(self.getProjectUrl(queryParams), filterParams).then(function (content) {
     var downloadedProject = new Project(content);
     project.update(downloadedProject);
     return project;
-  }).then(null, function(error) {
+  }).then(null, function (error) {
+    if ((error instanceof NetworkError)) {
+      switch (error.statusCode) {
+        case HttpStatus.FORBIDDEN:
+          return Promise.reject(new SecurityError("Access denied."));
+        default:
+          return Promise.reject(error);
+      }
+    } else {
+      return Promise.reject(error);
+    }
+  });
+};
+
+ServerConnector.removeProject = function (projectId) {
+  var self = this;
+  var queryParams = {
+    projectId: projectId
+  };
+  return self.sendDeleteRequest(self.getProjectUrl(queryParams)).then(function (content) {
+    var project = new Project(content);
+    if (self._projectsById[project.getProjectId()] !== undefined) {
+      self._projectsById[project.getProjectId()].update(project);
+    } else {
+      throw new Error();
+      self._projectsById[project.getProjectId()] = project;
+    }
+    return self._projectsById[project.getProjectId()];
+  }).then(null, function (error) {
     if ((error instanceof NetworkError)) {
       switch (error.statusCode) {
         case HttpStatus.FORBIDDEN:
@@ -686,12 +715,12 @@ ServerConnector.updateProject = function(project) {
   });
 };
 
-ServerConnector.addProject = function(options) {
+ServerConnector.addProject = function (options) {
   var self = this;
   var queryParams = {
-    projectId : options.projectId
+    projectId: options.projectId
   };
-  return self.sendPostRequest(self.getProjectUrl(queryParams), options).then(function(content) {
+  return self.sendPostRequest(self.getProjectUrl(queryParams), options).then(function (content) {
     var project = new Project(content);
     if (self._projectsById[project.getProjectId()] !== undefined) {
       self._projectsById[project.getProjectId()].update(project);
@@ -699,7 +728,7 @@ ServerConnector.addProject = function(options) {
       self._projectsById[project.getProjectId()] = project;
     }
     return project;
-  }).then(null, function(error) {
+  }).then(null, function (error) {
     if ((error instanceof NetworkError)) {
       switch (error.statusCode) {
         case HttpStatus.FORBIDDEN:
@@ -713,7 +742,7 @@ ServerConnector.addProject = function(options) {
   });
 };
 
-ServerConnector.serialize = function(object) {
+ServerConnector.serialize = function (object) {
   var result = {};
   if (object instanceof Annotation) {
     result.type = object.getType();
@@ -724,12 +753,12 @@ ServerConnector.serialize = function(object) {
   return result;
 };
 
-ServerConnector.getProjects = function(reload) {
+ServerConnector.getProjects = function (reload) {
   var self = this;
   if (self._projects.length > 0 && !reload) {
     return Promise.resolve(self._projects);
   } else {
-    return self.sendGetRequest(self.getProjectsUrl()).then(function(content) {
+    return self.sendGetRequest(self.getProjectsUrl()).then(function (content) {
       var parsedData = JSON.parse(content);
       self._projects.length = 0;
       for (var i = 0; i < parsedData.length; i++) {
@@ -746,42 +775,42 @@ ServerConnector.getProjects = function(reload) {
   }
 };
 
-ServerConnector.getProjectStatistics = function(projectId) {
+ServerConnector.getProjectStatistics = function (projectId) {
   var queryParams = {};
   var filterParams = {};
   var self = this;
   var content;
-  return self.getProjectId(projectId).then(function(result) {
+  return self.getProjectId(projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getProjectStatisticsUrl(queryParams, filterParams));
-  }).then(function(result) {
+  }).then(function (result) {
     content = JSON.parse(result);
     return self.getConfiguration();
-  }).then(function(configuration) {
+  }).then(function (configuration) {
     return new ProjectStatistics(content, configuration);
   });
 };
 
-ServerConnector.getLoggedUser = function() {
+ServerConnector.getLoggedUser = function () {
   var self = this;
   if (self._loggedUser !== undefined) {
     return Promise.resolve(self._loggedUser);
   } else {
-    return self.getUser(self.getSessionData().getLogin()).then(function(user) {
+    return self.getUser(self.getSessionData().getLogin()).then(function (user) {
       self._loggedUser = user;
       return self._loggedUser;
     });
   }
 };
 
-ServerConnector.getUser = function(login) {
+ServerConnector.getUser = function (login) {
   var self = this;
   var queryParams = {
-    login : login,
+    login: login,
   };
   var filterParams = {};
 
-  return self.sendGetRequest(self.getUserUrl(queryParams, filterParams)).then(function(content) {
+  return self.sendGetRequest(self.getUserUrl(queryParams, filterParams)).then(function (content) {
     var obj = JSON.parse(content);
     var user = new User(obj);
     if (self._usersByLogin[user.getLogin()] !== undefined) {
@@ -793,15 +822,15 @@ ServerConnector.getUser = function(login) {
   });
 };
 
-ServerConnector.updateUserPrivileges = function(params) {
+ServerConnector.updateUserPrivileges = function (params) {
   var self = this;
   var queryParams = {
-    login : params.user.getLogin(),
+    login: params.user.getLogin(),
   };
 
   return self.sendPatchRequest(self.getUpdateUserPrivilegesUrl(queryParams), {
-    privileges : params.privileges
-  }).then(function(content) {
+    privileges: params.privileges
+  }).then(function (content) {
     var obj = JSON.parse(content);
     var user = new User(obj);
     if (self._usersByLogin[user.getLogin()] !== undefined) {
@@ -813,13 +842,13 @@ ServerConnector.updateUserPrivileges = function(params) {
   });
 };
 
-ServerConnector.getUsers = function(forceRefresh) {
+ServerConnector.getUsers = function (forceRefresh) {
   var self = this;
 
   if (self._users.length > 0 && !forceRefresh) {
     return Promise.resolve(self._users);
   } else {
-    return self.sendGetRequest(self.getUsersUrl()).then(function(content) {
+    return self.sendGetRequest(self.getUsersUrl()).then(function (content) {
       var parsedData = JSON.parse(content);
       self._users.length = 0;
       for (var i = 0; i < parsedData.length; i++) {
@@ -837,21 +866,21 @@ ServerConnector.getUsers = function(forceRefresh) {
 
 };
 
-ServerConnector.getOverlays = function(params) {
+ServerConnector.getOverlays = function (params) {
   var self = this;
   if (params === undefined) {
     params = {};
   }
   var queryParams = {};
   var filterParams = {
-    creator : params.creator,
-    publicOverlay : params.publicOverlay,
+    creator: params.creator,
+    publicOverlay: params.publicOverlay,
   };
-  return new Promise(function(resolve, reject) {
-    self.getProjectId(params.projectId).then(function(result) {
+  return new Promise(function (resolve, reject) {
+    self.getProjectId(params.projectId).then(function (result) {
       queryParams.projectId = result;
       return self.sendGetRequest(self.getOverlaysUrl(queryParams, filterParams));
-    }).then(function(content) {
+    }).then(function (content) {
       var arr = JSON.parse(content);
       var result = [];
       for (var i = 0; i < arr.length; i++) {
@@ -863,20 +892,20 @@ ServerConnector.getOverlays = function(params) {
   });
 };
 
-ServerConnector.getOverlayElements = function(overlayId, projectId) {
+ServerConnector.getOverlayElements = function (overlayId, projectId) {
   var self = this;
   if (overlayId === undefined) {
     throw new Error("Layout id must be defined");
   }
   var queryParams = {
-    overlayId : overlayId,
-    modelId : "*",
+    overlayId: overlayId,
+    modelId: "*",
   };
   var filterParams = {};
-  return self.getProjectId(projectId).then(function(result) {
+  return self.getProjectId(projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getOverlayElementsUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var arr = JSON.parse(content);
     var result = [];
     for (var i = 0; i < arr.length; i++) {
@@ -893,20 +922,20 @@ ServerConnector.getOverlayElements = function(overlayId, projectId) {
   });
 };
 
-ServerConnector.getFullOverlayElement = function(params) {
+ServerConnector.getFullOverlayElement = function (params) {
   var self = this;
 
   var queryParams = {
-    overlayId : params.overlay.getId(),
-    modelId : params.element.getModelId(),
-    id : params.element.getId(),
+    overlayId: params.overlay.getId(),
+    modelId: params.element.getModelId(),
+    id: params.element.getId(),
   };
   var filterParams = {};
 
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getFullOverlayElementUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var element = JSON.parse(content);
     var result = null;
     if (element.type === "REACTION") {
@@ -920,7 +949,7 @@ ServerConnector.getFullOverlayElement = function(params) {
   });
 };
 
-ServerConnector.getProjectId = function(projectId) {
+ServerConnector.getProjectId = function (projectId) {
   var self = this;
   if (projectId !== undefined && projectId !== null && projectId !== "") {
     return Promise.resolve(projectId);
@@ -931,33 +960,33 @@ ServerConnector.getProjectId = function(projectId) {
   }
 };
 
-ServerConnector.getLogoImg = function() {
+ServerConnector.getLogoImg = function () {
   return this.getConfigurationParam(ConfigurationType.LOGO_IMG);
 };
 
-ServerConnector.getLogoLink = function() {
+ServerConnector.getLogoLink = function () {
   return this.getConfigurationParam(ConfigurationType.LOGO_LINK);
 };
 
-ServerConnector.getMaxSearchDistance = function() {
+ServerConnector.getMaxSearchDistance = function () {
   return this.getConfigurationParam(ConfigurationType.SEARCH_DISTANCE);
 };
 
-ServerConnector.getOverlayById = function(overlayId, projectId) {
+ServerConnector.getOverlayById = function (overlayId, projectId) {
   var self = this;
   var queryParams = {
-    overlayId : overlayId
+    overlayId: overlayId
   };
   var filterParams = {};
-  return self.getProjectId(projectId).then(function(data) {
+  return self.getProjectId(projectId).then(function (data) {
     queryParams.projectId = data;
     return self.sendGetRequest(self.getOverlayByIdUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     return new LayoutData(JSON.parse(content));
   });
 };
 
-ServerConnector.getReactions = function(params) {
+ServerConnector.getReactions = function (params) {
   var self = this;
   var queryParams = {};
   if (params.ids === undefined) {
@@ -967,11 +996,11 @@ ServerConnector.getReactions = function(params) {
     params.participantId = [];
   }
   var filterParams = {
-    id : params.ids,
-    columns : params.columns,
-    participantId : params.participantId,
+    id: params.ids,
+    columns: params.columns,
+    participantId: params.participantId,
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     if (filterParams.id.length > 100 || filterParams.participantId.length > 100) {
       return self.sendPostRequest(self.getReactionsUrl(queryParams), filterParams);
@@ -979,7 +1008,7 @@ ServerConnector.getReactions = function(params) {
       return self.sendGetRequest(self.getReactionsUrl(queryParams, filterParams));
     }
 
-  }).then(function(content) {
+  }).then(function (content) {
     var array = JSON.parse(content);
     var result = [];
     for (var i = 0; i < array.length; i++) {
@@ -989,10 +1018,10 @@ ServerConnector.getReactions = function(params) {
   });
 };
 
-ServerConnector.getAliases = function(params) {
+ServerConnector.getAliases = function (params) {
   var self = this;
   var queryParams = {
-    modelId : params.modelId,
+    modelId: params.modelId,
   };
   if (params.ids === undefined) {
     params.ids = [];
@@ -1004,21 +1033,21 @@ ServerConnector.getAliases = function(params) {
     params.excludedCompartmentIds = [];
   }
   var filterParams = {
-    id : params.ids,
-    columns : params.columns,
-    type : params.type,
-    excludedCompartmentIds : params.excludedCompartmentIds,
-    includedCompartmentIds : params.includedCompartmentIds,
+    id: params.ids,
+    columns: params.columns,
+    type: params.type,
+    excludedCompartmentIds: params.excludedCompartmentIds,
+    includedCompartmentIds: params.includedCompartmentIds,
 
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     if (filterParams.id.length > 100) {
       return self.sendPostRequest(self.getAliasesUrl(queryParams), filterParams);
     } else {
       return self.sendGetRequest(self.getAliasesUrl(queryParams, filterParams));
     }
-  }).then(function(content) {
+  }).then(function (content) {
     var array = JSON.parse(content);
     var result = [];
     for (var i = 0; i < array.length; i++) {
@@ -1028,25 +1057,25 @@ ServerConnector.getAliases = function(params) {
   });
 };
 
-ServerConnector.getLightComments = function(params) {
-  params.columns = [ "id", "elementId", "modelId", "type", "icon", "removed", "pinned" ];
+ServerConnector.getLightComments = function (params) {
+  params.columns = ["id", "elementId", "modelId", "type", "icon", "removed", "pinned"];
   return this.getComments(params);
 };
 
-ServerConnector.getComments = function(params) {
+ServerConnector.getComments = function (params) {
   var self = this;
   var queryParams = {
-    elementId : params.elementId,
-    elementType : params.elementType,
-    coordinates : params.coordinates,
+    elementId: params.elementId,
+    elementType: params.elementType,
+    coordinates: params.coordinates,
   };
   var filterParams = {
-    columns : params.columns
+    columns: params.columns
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getCommentsUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var array = JSON.parse(content);
     var result = [];
     for (var i = 0; i < array.length; i++) {
@@ -1056,7 +1085,7 @@ ServerConnector.getComments = function(params) {
   });
 };
 
-ServerConnector.getSessionData = function(project) {
+ServerConnector.getSessionData = function (project) {
   if (this._sessionData === undefined) {
     this._sessionData = new SessionData(project);
   }
@@ -1066,19 +1095,19 @@ ServerConnector.getSessionData = function(project) {
   return this._sessionData;
 };
 
-ServerConnector.getClosestElementsByCoordinates = function(params) {
+ServerConnector.getClosestElementsByCoordinates = function (params) {
   var self = this;
   var queryParams = {
-    modelId : params.modelId
+    modelId: params.modelId
   };
   var filterParams = {
-    coordinates : params.coordinates,
-    count : params.count,
+    coordinates: params.coordinates,
+    count: params.count,
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getSearchUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var array = JSON.parse(content);
     var result = [];
     for (var i = 0; i < array.length; i++) {
@@ -1088,7 +1117,7 @@ ServerConnector.getClosestElementsByCoordinates = function(params) {
   });
 };
 
-ServerConnector.login = function(login, password) {
+ServerConnector.login = function (login, password) {
   var self = this;
   var params = {};
   if (login !== undefined) {
@@ -1098,10 +1127,10 @@ ServerConnector.login = function(login, password) {
     params.login = "anonymous";
   }
   self.getSessionData().setToken("");
-  return self.sendPostRequest(self.loginUrl(), params).then(function() {
+  return self.sendPostRequest(self.loginUrl(), params).then(function () {
     self.getSessionData().setLogin(params.login);
     return Promise.resolve(self.getSessionData().getToken());
-  }, function(error) {
+  }, function (error) {
     if (error instanceof NetworkError && error.statusCode === HttpStatus.FORBIDDEN) {
       throw new InvalidCredentialsError("Invalid credentials");
     } else {
@@ -1110,27 +1139,27 @@ ServerConnector.login = function(login, password) {
   });
 };
 
-ServerConnector.logout = function() {
+ServerConnector.logout = function () {
   var self = this;
   self.getSessionData().setToken(undefined);
   self.getSessionData().setLogin(undefined);
   return Promise.resolve();
 };
 
-ServerConnector.getElementsByQuery = function(params) {
+ServerConnector.getElementsByQuery = function (params) {
   var self = this;
   var queryParams = {
-    modelId : params.modelId
+    modelId: params.modelId
   };
   var filterParams = {
-    query : params.query,
-    perfectMatch : params.perfectMatch,
+    query: params.query,
+    perfectMatch: params.perfectMatch,
   };
 
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getSearchUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var array = JSON.parse(content);
     var result = [];
     for (var i = 0; i < array.length; i++) {
@@ -1140,16 +1169,16 @@ ServerConnector.getElementsByQuery = function(params) {
   });
 };
 
-ServerConnector.getDrugsByQuery = function(params) {
+ServerConnector.getDrugsByQuery = function (params) {
   var self = this;
   var queryParams = {};
   var filterParams = {
-    query : params.query
+    query: params.query
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getSearchDrugsUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var array = JSON.parse(content);
     var result = [];
     for (var i = 0; i < array.length; i++) {
@@ -1159,16 +1188,16 @@ ServerConnector.getDrugsByQuery = function(params) {
   });
 };
 
-ServerConnector.getMiRnasByQuery = function(params) {
+ServerConnector.getMiRnasByQuery = function (params) {
   var self = this;
   var queryParams = {};
   var filterParams = {
-    query : params.query
+    query: params.query
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getSearchMiRnasUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var array = JSON.parse(content);
     var result = [];
     for (var i = 0; i < array.length; i++) {
@@ -1178,16 +1207,16 @@ ServerConnector.getMiRnasByQuery = function(params) {
   });
 };
 
-ServerConnector.getChemicalsByQuery = function(params) {
+ServerConnector.getChemicalsByQuery = function (params) {
   var self = this;
   var queryParams = {};
   var filterParams = {
-    query : params.query
+    query: params.query
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getSearchChemicalsUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var array = JSON.parse(content);
     var result = [];
     for (var i = 0; i < array.length; i++) {
@@ -1197,96 +1226,96 @@ ServerConnector.getChemicalsByQuery = function(params) {
   });
 };
 
-ServerConnector.getOverlaySourceDownloadUrl = function(params) {
+ServerConnector.getOverlaySourceDownloadUrl = function (params) {
   var self = this;
   var queryParams = {
-    overlayId : params.overlayId
+    overlayId: params.overlayId
   };
   var filterParams = {};
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.getOverlaySourceUrl(queryParams, filterParams);
   });
 };
 
-ServerConnector.getImageDownloadUrl = function(params) {
+ServerConnector.getImageDownloadUrl = function (params) {
   var self = this;
   var queryParams = {
-    projectId : params.projectId,
-    modelId : params.modelId,
+    projectId: params.projectId,
+    modelId: params.modelId,
   };
   var filterParams = {
-    token : params.token,
-    polygonString : params.polygonString,
-    handlerClass : params.handlerClass,
-    backgroundOverlayId : params.backgroundOverlayId,
-    zoomLevel : params.zoomLevel,
-    overlayIds : this.idsToString(params.overlayIds),
+    token: params.token,
+    polygonString: params.polygonString,
+    handlerClass: params.handlerClass,
+    backgroundOverlayId: params.backgroundOverlayId,
+    zoomLevel: params.zoomLevel,
+    overlayIds: this.idsToString(params.overlayIds),
   };
 
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.getImageUrl(queryParams, filterParams);
   });
 };
 
-ServerConnector.getModelDownloadUrl = function(params) {
+ServerConnector.getModelDownloadUrl = function (params) {
   var self = this;
   var queryParams = {
-    projectId : params.projectId,
-    modelId : params.modelId,
+    projectId: params.projectId,
+    modelId: params.modelId,
   };
   var filterParams = {
-    token : params.token,
-    polygonString : params.polygonString,
-    handlerClass : params.handlerClass,
-    backgroundOverlayId : params.backgroundOverlayId,
-    zoomLevel : params.zoomLevel,
-    overlayIds : this.idsToString(params.overlayIds),
+    token: params.token,
+    polygonString: params.polygonString,
+    handlerClass: params.handlerClass,
+    backgroundOverlayId: params.backgroundOverlayId,
+    zoomLevel: params.zoomLevel,
+    overlayIds: this.idsToString(params.overlayIds),
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.getModelPartUrl(queryParams, filterParams);
   });
 };
 
-ServerConnector.getImageConverters = function() {
+ServerConnector.getImageConverters = function () {
   var self = this;
-  return self.getConfiguration().then(function(configuration) {
+  return self.getConfiguration().then(function (configuration) {
     return configuration.getImageConverters();
   });
 };
-ServerConnector.getModelConverters = function() {
+ServerConnector.getModelConverters = function () {
   var self = this;
-  return self.getConfiguration().then(function(configuration) {
+  return self.getConfiguration().then(function (configuration) {
     return configuration.getModelConverters();
   });
 };
 
-ServerConnector.getProjectSourceDownloadUrl = function(params) {
+ServerConnector.getProjectSourceDownloadUrl = function (params) {
   if (params === undefined) {
     params = {};
   }
   var queryParams = {};
   var filterParams = {};
   var self = this;
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.getProjectSourceUrl(queryParams, filterParams);
   });
 };
 
-ServerConnector.getDrugNamesByTarget = function(params) {
+ServerConnector.getDrugNamesByTarget = function (params) {
   var self = this;
   var queryParams = {};
   var filterParams = {
-    columns : [ "name" ],
-    target : params.target.getType() + ":" + params.target.getId()
+    columns: ["name"],
+    target: params.target.getType() + ":" + params.target.getId()
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getSearchDrugsUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var result = [];
     var object = JSON.parse(content);
     for (var i = 0; i < object.length; i++) {
@@ -1296,17 +1325,17 @@ ServerConnector.getDrugNamesByTarget = function(params) {
   });
 };
 
-ServerConnector.getMiRnaNamesByTarget = function(params) {
+ServerConnector.getMiRnaNamesByTarget = function (params) {
   var self = this;
   var queryParams = {};
   var filterParams = {
-    columns : [ "name" ],
-    target : params.target.getType() + ":" + params.target.getId()
+    columns: ["name"],
+    target: params.target.getType() + ":" + params.target.getId()
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getSearchMiRnasUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var result = [];
     var object = JSON.parse(content);
     for (var i = 0; i < object.length; i++) {
@@ -1316,17 +1345,17 @@ ServerConnector.getMiRnaNamesByTarget = function(params) {
   });
 };
 
-ServerConnector.getChemicalNamesByTarget = function(params) {
+ServerConnector.getChemicalNamesByTarget = function (params) {
   var self = this;
   var queryParams = {};
   var filterParams = {
-    columns : [ "name" ],
-    target : params.target.getType() + ":" + params.target.getId()
+    columns: ["name"],
+    target: params.target.getType() + ":" + params.target.getId()
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getSearchChemicalsUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     var result = [];
     var object = JSON.parse(content);
     for (var i = 0; i < object.length; i++) {
@@ -1336,13 +1365,13 @@ ServerConnector.getChemicalNamesByTarget = function(params) {
   });
 };
 
-ServerConnector.addComment = function(params) {
+ServerConnector.addComment = function (params) {
   var self = this;
   var queryParams = {
-    elementId : params.elementId,
-    elementType : params.elementType,
-    coordinates : self.pointToString(params.coordinates),
-    modelId : params.modelId,
+    elementId: params.elementId,
+    elementType: params.elementType,
+    coordinates: self.pointToString(params.coordinates),
+    modelId: params.modelId,
   };
   var filterParams = params;
   delete filterParams.elementId;
@@ -1353,16 +1382,16 @@ ServerConnector.addComment = function(params) {
     filterParams.coordinates = self.pointToString(params.coordinates);
   }
   delete filterParams.modelId;
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendPostRequest(self.addCommentUrl(queryParams), filterParams);
-  }).then(function(content) {
+  }).then(function (content) {
     var response = JSON.parse(content);
     return new Comment(response);
   });
 };
 
-ServerConnector.addOverlay = function(params) {
+ServerConnector.addOverlay = function (params) {
   var overlay = params.overlay;
   if (!(overlay instanceof LayoutData)) {
     throw new Error("Invalid overlay: " + overlay);
@@ -1370,79 +1399,79 @@ ServerConnector.addOverlay = function(params) {
   var self = this;
   var queryParams = {};
   var data = {
-    name : overlay.getName(),
-    description : overlay.getDescription(),
-    content : overlay.getContent(),
-    filename : overlay.getFilename(),
+    name: overlay.getName(),
+    description: overlay.getDescription(),
+    content: overlay.getContent(),
+    filename: overlay.getFilename(),
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendPostRequest(self.addOverlayUrl(queryParams), data);
-  }).then(function(content) {
+  }).then(function (content) {
     return new LayoutData(JSON.parse(content));
   });
 };
 
-ServerConnector.updateOverlay = function(overlay) {
+ServerConnector.updateOverlay = function (overlay) {
   var self = this;
   var queryParams = {
-    overlayId : overlay.getId(),
+    overlayId: overlay.getId(),
   };
   var filterParams = {
-    overlay : {
-      name : overlay.getName(),
-      description : overlay.getDescription(),
-      creator : overlay.getCreator(),
-      publicOverlay : overlay.getPublicOverlay(),
+    overlay: {
+      name: overlay.getName(),
+      description: overlay.getDescription(),
+      creator: overlay.getCreator(),
+      publicOverlay: overlay.getPublicOverlay(),
     }
   };
   return self.sendPatchRequest(self.updateOverlayUrl(queryParams), filterParams);
 };
 
-ServerConnector.removeOverlay = function(params) {
+ServerConnector.removeOverlay = function (params) {
   var self = this;
   var queryParams = {
-    overlayId : params.overlayId
+    overlayId: params.overlayId
   };
   var filterParams = {};
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendDeleteRequest(self.deleteOverlayUrl(queryParams), filterParams);
   });
 };
 
-ServerConnector.removeComment = function(params) {
+ServerConnector.removeComment = function (params) {
   var self = this;
   var queryParams = {
-    commentId : params.commentId
+    commentId: params.commentId
   };
   var filterParams = {};
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendDeleteRequest(self.deleteCommentUrl(queryParams), filterParams);
   });
 };
 
-ServerConnector.getSuggestedQueryList = function(projectId) {
+ServerConnector.getSuggestedQueryList = function (projectId) {
   var self = this;
-  return self.getProjectId(projectId).then(function(result) {
+  return self.getProjectId(projectId).then(function (result) {
     projectId = result;
     return self.sendGetRequest(self.getSuggestedQueryListUrl({
-      projectId : projectId
+      projectId: projectId
     }));
-  }).then(function(content) {
+  }).then(function (content) {
     return JSON.parse(content);
   });
 };
 
-ServerConnector.getOverlayTypes = function() {
+ServerConnector.getOverlayTypes = function () {
   var self = this;
-  return self.getConfiguration().then(function(configuration) {
+  return self.getConfiguration().then(function (configuration) {
     return configuration.getOverlayTypes();
   });
 };
 
-ServerConnector.getPublications = function(params) {
+ServerConnector.getPublications = function (params) {
   var self = this;
   if (params === undefined) {
     params = {};
@@ -1450,24 +1479,24 @@ ServerConnector.getPublications = function(params) {
 
   var queryParams = {};
   var filterParams = {
-    start : params.start,
-    length : params.length,
-    sortColumn : params.sortColumn,
-    sortOrder : params.sortOrder,
-    search : params.search,
+    start: params.start,
+    length: params.length,
+    sortColumn: params.sortColumn,
+    sortOrder: params.sortOrder,
+    search: params.search,
   };
-  return self.getProjectId(params.projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function (result) {
     queryParams.projectId = result;
     return self.sendGetRequest(self.getPublicationsUrl(queryParams, filterParams));
-  }).then(function(content) {
+  }).then(function (content) {
     return JSON.parse(content);
   });
 };
 
-ServerConnector.getReferenceGenome = function(params) {
+ServerConnector.getReferenceGenome = function (params) {
   var self = this;
   var filterParams = {};
-  return self.sendGetRequest(self.getReferenceGenomeUrl(params, filterParams)).then(function(content) {
+  return self.sendGetRequest(self.getReferenceGenomeUrl(params, filterParams)).then(function (content) {
     return new ReferenceGenome(JSON.parse(content));
   });
 };
diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
index fbc215fbe7..7bc7d1d163 100644
--- a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
@@ -13,11 +13,11 @@ var GuiConnector = require('../../GuiConnector');
 var Promise = require("bluebird");
 
 function MapsAdminPanel(params) {
-    var self = this;
-    AbstractAdminPanel.call(self, params);
-    self._createGui();
+  var self = this;
+  AbstractAdminPanel.call(self, params);
+  self._createGui();
 
-    $(self.getElement()).addClass("minerva-projects-tab");
+  $(self.getElement()).addClass("minerva-projects-tab");
 
 }
 
@@ -25,256 +25,264 @@ MapsAdminPanel.prototype = Object.create(AbstractAdminPanel.prototype);
 MapsAdminPanel.prototype.constructor = MapsAdminPanel;
 
 MapsAdminPanel.prototype._createGui = function () {
-    var self = this;
-    var projectsDiv = Functions.createElement({
-        type: "div",
-    });
-    self.getElement().appendChild(projectsDiv);
-
-    var dataDiv = Functions.createElement({
-        type: "div",
-        style: "display:table; width:100%",
-    });
-    projectsDiv.appendChild(dataDiv);
-
-    dataDiv.appendChild(self._createMenuRow());
-    dataDiv.appendChild(self._createProjectTableRow());
-    dataDiv.appendChild(self._createMenuRow());
+  var self = this;
+  var projectsDiv = Functions.createElement({
+    type: "div",
+  });
+  self.getElement().appendChild(projectsDiv);
+
+  var dataDiv = Functions.createElement({
+    type: "div",
+    style: "display:table; width:100%",
+  });
+  projectsDiv.appendChild(dataDiv);
+
+  dataDiv.appendChild(self._createMenuRow());
+  dataDiv.appendChild(self._createProjectTableRow());
+  dataDiv.appendChild(self._createMenuRow());
 
 };
 
 MapsAdminPanel.prototype._createMenuRow = function () {
-    var self = this;
-    var menuRow = Functions.createElement({
-        type: "div",
-        className: "minerva-menu-row",
-        style: "display:table-row; margin:10px",
-    });
-
-    var addProjectButton = Functions.createElement({
-        type: "button",
-        name: "addProject",
-        content: '<span class="ui-icon ui-icon-circle-plus"></span>&nbsp;ADD PROJECT',
-        onclick: function () {
-            return self.onAddClicked().then(null, GuiConnector.alert);
-        },
-    });
-    var refreshButton = Functions.createElement({
-        type: "button",
-        name: "refreshProject",
-        content: '<span class="ui-icon ui-icon-refresh"></span>&nbsp;REFRESH',
-        onclick: function () {
-            return self.onRefreshClicked().then(null, GuiConnector.alert);
-        },
-    });
-    menuRow.appendChild(addProjectButton);
-    menuRow.appendChild(refreshButton);
-    return menuRow;
+  var self = this;
+  var menuRow = Functions.createElement({
+    type: "div",
+    className: "minerva-menu-row",
+    style: "display:table-row; margin:10px",
+  });
+
+  var addProjectButton = Functions.createElement({
+    type: "button",
+    name: "addProject",
+    content: '<span class="ui-icon ui-icon-circle-plus"></span>&nbsp;ADD PROJECT',
+    onclick: function () {
+      return self.onAddClicked().then(null, GuiConnector.alert);
+    },
+  });
+  var refreshButton = Functions.createElement({
+    type: "button",
+    name: "refreshProject",
+    content: '<span class="ui-icon ui-icon-refresh"></span>&nbsp;REFRESH',
+    onclick: function () {
+      return self.onRefreshClicked().then(null, GuiConnector.alert);
+    },
+  });
+  menuRow.appendChild(addProjectButton);
+  menuRow.appendChild(refreshButton);
+  return menuRow;
 };
 
 MapsAdminPanel.prototype._createProjectTableRow = function () {
-    var self = this;
-    var projectsRow = Functions.createElement({
-        type: "div",
-        style: "display:table-row; width:100%",
-    });
-
-    var projectsTable = Functions.createElement({
-        type: "table",
-        name: "projectsTable",
-        className: "display",
-        style: "width:100%",
-    });
-    projectsRow.appendChild(projectsTable);
-
-    $(projectsTable).DataTable({
-        fnRowCallback: function (nRow, aData) {
-            nRow.setAttribute('id', aData[0]);
-        },
-        columns: [{
-            title: 'ProjectId',
-        }, {
-            title: 'Name',
-        }, {
-            title: 'Disease',
-        }, {
-            title: 'Organism',
-        }, {
-            title: 'Status',
-        }, {
-            title: 'Edit',
-        }, {
-            title: 'Remove',
-        },],
-    });
-    $(projectsTable).on("click", "[name='removeProject']", function () {
-        var button = this;
-        return self.removeProject($(button).attr("data")).then(null, GuiConnector.alert);
-    });
-
-    $(projectsTable).on("click", "[name='showEditDialog']", function () {
-        var button = this;
-        return self.showEditDialog($(button).attr("data")).then(null, GuiConnector.alert);
-    });
-
-    return projectsRow;
+  var self = this;
+  var projectsRow = Functions.createElement({
+    type: "div",
+    style: "display:table-row; width:100%",
+  });
+
+  var projectsTable = Functions.createElement({
+    type: "table",
+    name: "projectsTable",
+    className: "display",
+    style: "width:100%",
+  });
+  projectsRow.appendChild(projectsTable);
+
+  $(projectsTable).DataTable({
+    fnRowCallback: function (nRow, aData) {
+      nRow.setAttribute('id', aData[0]);
+    },
+    columns: [{
+      title: 'ProjectId',
+    }, {
+      title: 'Name',
+    }, {
+      title: 'Disease',
+    }, {
+      title: 'Organism',
+    }, {
+      title: 'Status',
+    }, {
+      title: 'Edit',
+    }, {
+      title: 'Remove',
+    },],
+  });
+  $(projectsTable).on("click", "[name='removeProject']", function () {
+    var button = this;
+    return self.removeProject($(button).attr("data")).then(null, GuiConnector.alert);
+  });
+
+  $(projectsTable).on("click", "[name='showEditDialog']", function () {
+    var button = this;
+    return self.showEditDialog($(button).attr("data")).then(null, GuiConnector.alert);
+  });
+
+  return projectsRow;
 };
 
 MapsAdminPanel.prototype.init = function () {
-    var self = this;
-    return ServerConnector.getProjects().then(function (projects) {
-        return self.setProjects(projects);
-    });
+  var self = this;
+  return ServerConnector.getProjects().then(function (projects) {
+    return self.setProjects(projects);
+  });
 };
 
 MapsAdminPanel.prototype.projectToTableRow = function (project, row) {
-    var self = this;
-    var disease = self.getHtmlStringLink(project.getDisease());
-    var organism = self.getHtmlStringLink(project.getOrganism());
-
-    if (row === undefined) {
-        row = [];
-    }
-    row[0] = project.getProjectId();
-    row[1] = project.getName();
-    row[2] = disease;
-    row[3] = organism;
-    row[4] = project.getStatus();
-    row[5] = "<button name='showEditDialog' data='" + project.getProjectId() + "'>EDIT</button>";
-    row[6] = "<button name='removeProject' data='" + project.getProjectId() + "'>REMOVE</button>";
-
-    return row;
+  var self = this;
+  var disease = self.getHtmlStringLink(project.getDisease());
+  var organism = self.getHtmlStringLink(project.getOrganism());
+
+  if (row === undefined) {
+    row = [];
+  }
+  var projectId = project.getProjectId();
+  var formattedProjectId;
+  if (project.getStatus().toLowerCase() === "ok") {
+    formattedProjectId = "<a href='" + "index.xhtml?id=" + projectId + "' target='" + projectId + "'>" + projectId + "</a>";
+  } else {
+    formattedProjectId = projectId
+  }
+
+  row[0] = formattedProjectId;
+  row[1] = project.getName();
+  row[2] = disease;
+  row[3] = organism;
+  row[4] = project.getStatus();
+  row[5] = "<button name='showEditDialog' data='" + project.getProjectId() + "'>EDIT</button>";
+  row[6] = "<button name='removeProject' data='" + project.getProjectId() + "'>REMOVE</button>";
+
+  return row;
 };
 
 MapsAdminPanel.prototype.getHtmlStringLink = function (annotation) {
-    var self = this;
-    if (annotation !== undefined && annotation !== null) {
-        var link = self.getGuiUtils().createAnnotationLink(annotation, true);
-        var tmp = document.createElement("div");
-        tmp.appendChild(link);
-        return tmp.innerHTML;
-    } else {
-        return "N/A";
-    }
+  var self = this;
+  if (annotation !== undefined && annotation !== null) {
+    var link = self.getGuiUtils().createAnnotationLink(annotation, true);
+    var tmp = document.createElement("div");
+    tmp.appendChild(link);
+    return tmp.innerHTML;
+  } else {
+    return "N/A";
+  }
 
 };
 
 MapsAdminPanel.prototype.setProjects = function (projects) {
-    var self = this;
-    var dataTable = $($("[name='projectsTable']", self.getElement())[0]).DataTable();
-    var data = [];
-    for (var i = 0; i < projects.length; i++) {
-        var project = projects[i];
-        var rowData = self.projectToTableRow(project);
-        self.addUpdateListener(project, rowData);
-        data.push(rowData);
-    }
-    dataTable.clear().rows.add(data).draw();
+  var self = this;
+  var dataTable = $($("[name='projectsTable']", self.getElement())[0]).DataTable();
+  var data = [];
+  for (var i = 0; i < projects.length; i++) {
+    var project = projects[i];
+    var rowData = self.projectToTableRow(project);
+    self.addUpdateListener(project, rowData);
+    data.push(rowData);
+  }
+  dataTable.clear().rows.add(data).draw();
 };
 
 MapsAdminPanel.prototype.addUpdateListener = function (project, dataTableRow) {
-    var self = this;
-
-    var listenerName = "PROJECT_LIST_LISTENER";
-    var listeners = project.getListeners("onreload");
-    for (var i = 0; i < listeners.length; i++) {
-        if (listeners[i].listenerName === listenerName) {
-            project.removeListener("onreload", listeners[i]);
-        }
+  var self = this;
+
+  var listenerName = "PROJECT_LIST_LISTENER";
+  var listeners = project.getListeners("onreload");
+  for (var i = 0; i < listeners.length; i++) {
+    if (listeners[i].listenerName === listenerName) {
+      project.removeListener("onreload", listeners[i]);
+    }
+  }
+  var listener = function () {
+    self.projectToTableRow(project, dataTableRow);
+    var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId());
+    if (row.length > 0) {
+      row.data(dataTableRow).draw();
     }
-    var listener = function () {
-        self.projectToTableRow(project, dataTableRow);
-        var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId());
-        if (row.length > 0) {
-            row.data(dataTableRow).draw();
-        }
-
-    };
-    listener.listenerName = listenerName;
-    project.addListener("onreload", listener);
+
+  };
+  listener.listenerName = listenerName;
+  project.addListener("onreload", listener);
 };
 
 MapsAdminPanel.prototype.onAddClicked = function () {
-    var self = this;
-    var dialog = self._addDialog;
-    if (dialog === undefined) {
-        dialog = new AddProjectDialog({
-            element: Functions.createElement({
-                type: "div"
-            }),
-            customMap: null,
-        });
-        self._addDialog = dialog;
-        return dialog.init().then(function () {
-            return dialog.open();
-        });
-    } else {
-        dialog.clear();
-        dialog.open();
-        return Promise.resolve();
-    }
+  var self = this;
+  var dialog = self._addDialog;
+  if (dialog === undefined) {
+    dialog = new AddProjectDialog({
+      element: Functions.createElement({
+        type: "div"
+      }),
+      customMap: null,
+    });
+    self._addDialog = dialog;
+    return dialog.init().then(function () {
+      return dialog.open();
+    });
+  } else {
+    dialog.clear();
+    dialog.open();
+    return Promise.resolve();
+  }
 };
 
 MapsAdminPanel.prototype.destroy = function () {
-    var self = this;
-    var dialog = self._addDialog;
-    if (dialog !== undefined) {
-        dialog.destroy();
-    }
-    var table = $("[name='projectsTable']", self.getElement())[0];
-    if ($.fn.DataTable.isDataTable(table)) {
-        $(table).DataTable().destroy();
-    }
+  var self = this;
+  var dialog = self._addDialog;
+  if (dialog !== undefined) {
+    dialog.destroy();
+  }
+  var table = $("[name='projectsTable']", self.getElement())[0];
+  if ($.fn.DataTable.isDataTable(table)) {
+    $(table).DataTable().destroy();
+  }
 
 };
 
 MapsAdminPanel.prototype.onRefreshClicked = function () {
-    var self = this;
-    return ServerConnector.getProjects(true).then(function (projects) {
-        return self.setProjects(projects);
-    });
+  var self = this;
+  return ServerConnector.getProjects(true).then(function (projects) {
+    return self.setProjects(projects);
+  });
 };
 
 MapsAdminPanel.prototype.getDialog = function (project) {
-    var self = this;
-    if (self._dialogs === undefined) {
-        self._dialogs = [];
-    }
-    var dialog = self._dialogs[project.getProjectId()];
-    if (dialog === undefined) {
-        dialog = new EditProjectDialog({
-            element: Functions.createElement({
-                type: "div"
-            }),
-            project: project,
-            customMap: null,
-        });
-        self._dialogs[project.getProjectId()] = dialog;
-        return dialog.init().then(function () {
-            return dialog;
-        });
-    } else {
-        return Promise.resolve(dialog);
-    }
+  var self = this;
+  if (self._dialogs === undefined) {
+    self._dialogs = [];
+  }
+  var dialog = self._dialogs[project.getProjectId()];
+  if (dialog === undefined) {
+    dialog = new EditProjectDialog({
+      element: Functions.createElement({
+        type: "div"
+      }),
+      project: project,
+      customMap: null,
+    });
+    self._dialogs[project.getProjectId()] = dialog;
+    return dialog.init().then(function () {
+      return dialog;
+    });
+  } else {
+    return Promise.resolve(dialog);
+  }
 };
 
 MapsAdminPanel.prototype.showEditDialog = function (id) {
-    var self = this;
-    GuiConnector.showProcessing();
-    return ServerConnector.getProject(id).then(function (project) {
-        return self.getDialog(project);
-    }).then(function (dialog) {
-
-        dialog.open();
-        GuiConnector.hideProcessing();
-    }).then(null, function (error) {
-        GuiConnector.hideProcessing();
-        return Promise.reject(error);
-    });
+  var self = this;
+  GuiConnector.showProcessing();
+  return ServerConnector.getProject(id).then(function (project) {
+    return self.getDialog(project);
+  }).then(function (dialog) {
+
+    dialog.open();
+    GuiConnector.hideProcessing();
+  }).then(null, function (error) {
+    GuiConnector.hideProcessing();
+    return Promise.reject(error);
+  });
 };
 
 MapsAdminPanel.prototype.removeProject = function (id) {
-    return Promise.reject(new Error("Not implemented"));
+  return ServerConnector.removeProject(id);
 };
 
 module.exports = MapsAdminPanel;
diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js
index 773b5829e4..cfc907e0f3 100644
--- a/frontend-js/src/test/js/ServerConnector-test.js
+++ b/frontend-js/src/test/js/ServerConnector-test.js
@@ -60,6 +60,17 @@ describe('ServerConnector', function() {
       });
     });
   });
+  describe('removeProject', function() {
+    it('default', function() {
+      var project;
+      return ServerConnector.getProject().then(function(result) {
+        project = result;
+        return ServerConnector.removeProject(project.getProjectId());
+      }).then(function(result) {
+        assert.ok(project === result);
+      });
+    });
+  });
 
   it('getModels', function() {
     return ServerConnector.getModels("sample").then(function(models) {
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000..d8aff0348e
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/DELETE_token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+{"version":"0","disease":{"resource":"D010300","link":"http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300","id":1104479,"type":"MESH_2012"},"organism":{"resource":"1570291","link":"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=1570291","id":1104480,"type":"TAXONOMY"},"idObject":14898,"status":"Ok","progress":100.0,"name":"UNKNOWN DISEASE MAP","projectId":"sample","overviewImageViews":[],"topOverviewImage":null}
\ No newline at end of file
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java
index eb4bfd9d6c..793084e98a 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java
@@ -71,6 +71,15 @@ public class ProjectController extends BaseController {
 
 	}
 
+	@RequestMapping(value = "/projects/{projectId:.+}", method = { RequestMethod.DELETE }, produces = { MediaType.APPLICATION_JSON_VALUE })
+	public ProjectMetaData removeProject(//
+			@PathVariable(value = "projectId") String projectId, //
+			@CookieValue(value = Configuration.AUTH_TOKEN) String token //
+	) throws SecurityException, IOException, QueryException {
+		return projectController.removeProject(token, projectId, context.getRealPath("/"));
+
+	}
+
 	@RequestMapping(value = "/projects/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
 	public List<ProjectMetaData> getProjects(//
 			@CookieValue(value = Configuration.AUTH_TOKEN) String token //
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java
index 265fb97e79..652a49ce9e 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java
@@ -544,4 +544,11 @@ public class ProjectRestImpl extends BaseRestImpl {
 		return null;
 	}
 
+	public ProjectMetaData removeProject(String token, String projectId, String path) throws ObjectNotFoundException, SecurityException {
+		AuthenticationToken authenticationToken = getUserService().getToken(token);
+		Project project = getProjectService().getProjectByProjectId(projectId, authenticationToken);
+		getProjectService().removeProject(project, path, true, authenticationToken);
+		return getProject(projectId, token);
+	}
+
 }
diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
index 21ccc3f302..173b6102c2 100644
--- a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java
@@ -50,6 +50,7 @@ import lcsb.mapviewer.model.user.UserAnnotationSchema;
 import lcsb.mapviewer.model.user.UserClassAnnotators;
 import lcsb.mapviewer.model.user.UserClassValidAnnotations;
 import lcsb.mapviewer.persist.dao.map.species.ElementDao;
+import lcsb.mapviewer.services.SecurityException;
 import lcsb.mapviewer.services.ServiceTestFunctions;
 import lcsb.mapviewer.services.UserAccessException;
 import lcsb.mapviewer.services.overlay.AnnotatedObjectTreeRow;
@@ -692,7 +693,7 @@ public class ProjectServiceTest extends ServiceTestFunctions {
 		}
 	}
 
-	protected Project createComplexProject(String projectId, String filename) throws IOException, UserAccessException {
+	protected Project createComplexProject(String projectId, String filename) throws IOException, SecurityException {
 		CreateProjectParams params = new CreateProjectParams();
 
 		ZipFile zipFile = new ZipFile(filename);
diff --git a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java
index 4f3bf0c8d8..2dc3e22ad0 100644
--- a/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java
+++ b/web/src/main/java/lcsb/mapviewer/bean/ProjectBean.java
@@ -54,6 +54,7 @@ import lcsb.mapviewer.model.map.model.SubmodelType;
 import lcsb.mapviewer.model.user.ConfigurationElementType;
 import lcsb.mapviewer.model.user.PrivilegeType;
 import lcsb.mapviewer.model.user.User;
+import lcsb.mapviewer.services.SecurityException;
 import lcsb.mapviewer.services.UserAccessException;
 import lcsb.mapviewer.services.interfaces.IConfigurationService;
 import lcsb.mapviewer.services.interfaces.IModelService;
@@ -623,9 +624,9 @@ public class ProjectBean extends AbstractManagedBean implements Serializable {
 	 * 
 	 * @param file
 	 *          file with the model in CellDesigner format
-	 * @throws UserAccessException
+	 * @throws SecurityException 
 	 */
-	protected void generateProject(final File file) throws UserAccessException {
+	protected void generateProject(final File file) throws SecurityException {
 		// if project with this name already exists then add random suffix
 		String projectId = getNewProjectId();
 		if (projectService.projectExists(getNewProjectId())) {
-- 
GitLab