From 9a5d7e7b012aa7e39aa91abbdc88a24a8e8ea28f Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 6 Jun 2017 15:07:08 +0200
Subject: [PATCH] new api call format for removing overlay

---
 .../17296/DELETE_token=MOCK_TOKEN_ID&}        |  0
 pom.xml                                       |  3 +
 rest-api/.classpath                           | 66 +++++++++++--------
 .../org.eclipse.core.resources.prefs          |  2 +
 .../org.eclipse.wst.common.component          |  1 -
 rest-api/pom.xml                              | 12 ++++
 .../lcsb/mapviewer/api/BaseController.java    |  3 +
 .../java/lcsb/mapviewer/api/BaseRestImpl.java |  1 -
 .../api/ObjectNotFoundException.java          | 13 ++++
 .../projects/overlays/OverlayController.java  | 66 +++++++++++--------
 .../projects/overlays/OverlayRestImpl.java    |  7 +-
 .../api/projects/AllProjectTests.java         |  2 +
 .../projects/overlays/AllOverlaysTests.java   | 11 ++++
 .../overlays/OverlayControllerTest.java       | 43 ++++++++++++
 14 files changed, 168 insertions(+), 62 deletions(-)
 rename frontend-js/testFiles/apiCalls/{overlay/removeOverlay/POST_overlayId=17296&projectId=sample&token=MOCK_TOKEN_ID& => projects/sample/overlays/17296/DELETE_token=MOCK_TOKEN_ID&} (100%)
 create mode 100644 rest-api/src/main/java/lcsb/mapviewer/api/ObjectNotFoundException.java
 create mode 100644 rest-api/src/test/java/lcsb/mapviewer/api/projects/overlays/AllOverlaysTests.java
 create mode 100644 rest-api/src/test/java/lcsb/mapviewer/api/projects/overlays/OverlayControllerTest.java

diff --git a/frontend-js/testFiles/apiCalls/overlay/removeOverlay/POST_overlayId=17296&projectId=sample&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/overlays/17296/DELETE_token=MOCK_TOKEN_ID&
similarity index 100%
rename from frontend-js/testFiles/apiCalls/overlay/removeOverlay/POST_overlayId=17296&projectId=sample&token=MOCK_TOKEN_ID&
rename to frontend-js/testFiles/apiCalls/projects/sample/overlays/17296/DELETE_token=MOCK_TOKEN_ID&
diff --git a/pom.xml b/pom.xml
index 7e0e056d56..c4ae7d49e1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,9 @@
 		<jersey.version>1.18.1</jersey.version>
 		<rs-jax.version>1.1.1</rs-jax.version>
 
+		<jackson.version>2.8.8</jackson.version>
+
+
 		<log4j.version>1.2.17</log4j.version>
 		
 		<apache.commons-lang3.version>3.1</apache.commons-lang3.version>
diff --git a/rest-api/.classpath b/rest-api/.classpath
index f2b9c43c7c..3783d3d93c 100644
--- a/rest-api/.classpath
+++ b/rest-api/.classpath
@@ -1,29 +1,37 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" output="target/classes" path="src/main/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="src/main/resources"/>
-	<classpathentry kind="src" path="src/test/resources"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="org.eclipse.jst.component.nondependency" value=""/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+			<attribute name="org.eclipse.jst.component.nondependency" value=""/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/rest-api/.settings/org.eclipse.core.resources.prefs b/rest-api/.settings/org.eclipse.core.resources.prefs
index 4c28b1a898..04cfa2c1a8 100644
--- a/rest-api/.settings/org.eclipse.core.resources.prefs
+++ b/rest-api/.settings/org.eclipse.core.resources.prefs
@@ -1,4 +1,6 @@
 eclipse.preferences.version=1
 encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
 encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
 encoding/<project>=UTF-8
diff --git a/rest-api/.settings/org.eclipse.wst.common.component b/rest-api/.settings/org.eclipse.wst.common.component
index e049d3a484..30ef6cd5dc 100644
--- a/rest-api/.settings/org.eclipse.wst.common.component
+++ b/rest-api/.settings/org.eclipse.wst.common.component
@@ -2,6 +2,5 @@
     <wb-module deploy-name="MapViewer-rest-api">
         <wb-resource deploy-path="/" source-path="/src/main/java"/>
         <wb-resource deploy-path="/" source-path="/src/main/resources"/>
-        <wb-resource deploy-path="/" source-path="/src/test/resources"/>
     </wb-module>
 </project-modules>
diff --git a/rest-api/pom.xml b/rest-api/pom.xml
index cb185247b6..6898343897 100644
--- a/rest-api/pom.xml
+++ b/rest-api/pom.xml
@@ -48,6 +48,18 @@
 			<artifactId>spring-faces</artifactId>
 			<version>${springframework.webflow.version}</version>
 		</dependency>
+		
+		<dependency>
+	    <groupId>com.fasterxml.jackson.core</groupId>
+	    <artifactId>jackson-core</artifactId>
+    	<version>${jackson.version}</version>
+		</dependency>		
+
+		<dependency>
+	    <groupId>com.fasterxml.jackson.core</groupId>
+	    <artifactId>jackson-databind</artifactId>
+    	<version>${jackson.version}</version>
+		</dependency>		
 
 		<dependency>
 			<groupId>org.mockito</groupId>
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java b/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java
index d7f6e3c8fe..6d7382eb32 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java
@@ -18,6 +18,9 @@ public abstract class BaseController {
 		logger.error(e, e);
 		if (e instanceof SecurityException) {
 			return new ResponseEntity<Object>("{\"error\" : \"Access denied.\",\"reason\":\"" + e.getMessage() + "\"}", new HttpHeaders(), HttpStatus.FORBIDDEN);
+		} else if (e instanceof ObjectNotFoundException) {
+			return new ResponseEntity<Object>(
+					"{\"error\" : \"Object not found.\",\"reason\":\"" + e.getMessage() + "\"}", new HttpHeaders(), HttpStatus.NOT_FOUND);
 		} else if (e instanceof QueryException) {
 			return new ResponseEntity<Object>(
 					"{\"error\" : \"Query server error.\",\"reason\":\"" + e.getMessage() + "\"}", new HttpHeaders(), HttpStatus.BAD_REQUEST);
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
index 8cfea323f1..272e3998a2 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
@@ -26,7 +26,6 @@ public abstract class BaseRestImpl {
 
 	protected Map<String, Object> okStatus() {
 		Map<String, Object> result = new HashMap<>();
-		result.put("status", "OK");
 		return result;
 	}
 
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/ObjectNotFoundException.java b/rest-api/src/main/java/lcsb/mapviewer/api/ObjectNotFoundException.java
new file mode 100644
index 0000000000..907d839df8
--- /dev/null
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/ObjectNotFoundException.java
@@ -0,0 +1,13 @@
+package lcsb.mapviewer.api;
+
+public class ObjectNotFoundException extends QueryException {
+
+	public ObjectNotFoundException(String message) {
+		super(message);
+	}
+
+	public ObjectNotFoundException(String message, Exception reason) {
+		super(message, reason);
+	}
+
+}
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayController.java
index fec3dc8f94..0b74eab909 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayController.java
@@ -4,17 +4,20 @@ import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
-import javax.ws.rs.PathParam;
-
+import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
 import lcsb.mapviewer.api.BaseController;
 import lcsb.mapviewer.api.QueryException;
 import lcsb.mapviewer.model.cache.FileEntry;
@@ -24,15 +27,19 @@ import lcsb.mapviewer.services.view.LayoutView;
 @RestController
 public class OverlayController extends BaseController {
 
+	private Logger					logger = Logger.getLogger(OverlayController.class);
+
 	@Autowired
-	private OverlayRestImpl overlayController;
+	private OverlayRestImpl	overlayRestImp;
+
+	private ObjectMapper		mapper = new ObjectMapper();
 
 	@RequestMapping(value = "/projects/{projectId}/overlays/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
 	public List<LayoutView> getOverlayList(//
 			@RequestParam(value = "token") String token, //
 			@PathVariable(value = "projectId") String projectId //
 	) throws SecurityException, QueryException {
-		return overlayController.getOverlayList(token, projectId);
+		return overlayRestImp.getOverlayList(token, projectId);
 	}
 
 	@RequestMapping(value = "/projects/{projectId}/overlays/{overlayId}/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
@@ -41,7 +48,7 @@ public class OverlayController extends BaseController {
 			@PathVariable(value = "projectId") String projectId, //
 			@PathVariable(value = "overlayId") String overlayId//
 	) throws SecurityException, QueryException {
-		return overlayController.getOverlayById(token, projectId, overlayId);
+		return overlayRestImp.getOverlayById(token, projectId, overlayId);
 	}
 
 	@RequestMapping(value = "/projects/{projectId}/overlays/{overlayId}/models/{modelId}/bioEntities/", method = { RequestMethod.GET },
@@ -51,7 +58,7 @@ public class OverlayController extends BaseController {
 			@PathVariable(value = "projectId") String projectId, //
 			@PathVariable(value = "overlayId") String overlayId, @RequestParam(value = "columns", defaultValue = "") String columns)
 			throws SecurityException, QueryException {
-		return overlayController.getOverlayElements(token, projectId, Integer.valueOf(overlayId), columns);
+		return overlayRestImp.getOverlayElements(token, projectId, Integer.valueOf(overlayId), columns);
 	}
 
 	@RequestMapping(value = "/projects/{projectId}/overlays/{overlayId}/models/{modelId}/bioEntities/reactions/{reactionId}/", method = { RequestMethod.GET },
@@ -64,7 +71,7 @@ public class OverlayController extends BaseController {
 			@PathVariable(value = "reactionId") String reactionId, //
 			@RequestParam(value = "columns", defaultValue = "") String columns //
 	) throws SecurityException, QueryException {
-		return overlayController
+		return overlayRestImp
 				.getOverlayElement(token, projectId, Integer.valueOf(modelId), Integer.valueOf(overlayId), Integer.valueOf(reactionId), "REACTION", columns);
 	}
 
@@ -78,7 +85,7 @@ public class OverlayController extends BaseController {
 			@PathVariable(value = "elementId") String reactionId, //
 			@RequestParam(value = "columns", defaultValue = "") String columns //
 	) throws SecurityException, QueryException {
-		return overlayController
+		return overlayRestImp
 				.getOverlayElement(token, projectId, Integer.valueOf(modelId), Integer.valueOf(overlayId), Integer.valueOf(reactionId), "ALIAS", columns);
 	}
 
@@ -92,12 +99,22 @@ public class OverlayController extends BaseController {
 			@RequestParam(value = "filename") String filename, //
 			@RequestParam(value = "type", defaultValue = "") String type //
 	) throws SecurityException, QueryException, IOException {
-		return overlayController.addOverlay(token, projectId, name, description, content, filename, type);
+		return overlayRestImp.addOverlay(token, projectId, name, description, content, filename, type);
+	}
+
+	@RequestMapping(value = "/projects/{projectId}/overlays/{overlayId}", method = { RequestMethod.DELETE }, produces = { MediaType.APPLICATION_JSON_VALUE })
+	public Map<String, Object> removeOverlay( //
+			@RequestBody String body, //
+			@PathVariable(value = "projectId") String projectId, //
+			@PathVariable(value = "overlayId") String overlayId //
+	) throws SecurityException, QueryException, IOException {
+		ObjectNode node = mapper.readValue(body, ObjectNode.class);
+		return overlayRestImp.removeOverlay(node.get("token").asText(), projectId, overlayId);
 	}
 
 	@RequestMapping(value = "/overlay/getOverlayTypes", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
 	public List<Map<String, Object>> getOverlayTypes(@RequestParam(value = "token") String token) throws SecurityException, QueryException {
-		return overlayController.getOverlayTypes(token);
+		return overlayRestImp.getOverlayTypes(token);
 	}
 
 	@RequestMapping(value = "/overlay/updateOverlay", method = { RequestMethod.GET, RequestMethod.PUT, RequestMethod.POST },
@@ -105,21 +122,14 @@ public class OverlayController extends BaseController {
 	public Map<String, Object> updateOverlay(@RequestParam(value = "token") String token, @RequestParam(value = "projectId") String projectId,
 			@RequestParam(value = "overlayId") String overlayId, @RequestParam(value = "name") String name, @RequestParam(value = "description") String description)
 			throws SecurityException, QueryException {
-		return overlayController.updateOverlay(token, projectId, overlayId, name, description);
-	}
-
-	@RequestMapping(value = "/overlay/removeOverlay", method = { RequestMethod.GET, RequestMethod.DELETE, RequestMethod.POST },
-			produces = { MediaType.APPLICATION_JSON_VALUE })
-	public Map<String, Object> removeOverlay(@RequestParam(value = "token") String token, @RequestParam(value = "projectId") String projectId,
-			@RequestParam(value = "overlayId") String overlayId) throws SecurityException, QueryException, IOException {
-		return overlayController.removeOverlay(token, projectId, overlayId);
+		return overlayRestImp.updateOverlay(token, projectId, overlayId, name, description);
 	}
 
 	@RequestMapping(value = "/overlay/getOverlaySource", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
 	public ResponseEntity<byte[]> getOverlaySource(@RequestParam(value = "token") String token, @RequestParam(value = "projectId") String projectId,
 			@RequestParam(value = "overlayId") String overlayId) throws SecurityException, QueryException {
 
-		FileEntry file = overlayController.getOverlaySource(token, projectId, overlayId);
+		FileEntry file = overlayRestImp.getOverlaySource(token, projectId, overlayId);
 		MediaType type = MediaType.TEXT_PLAIN;
 		if (file.getOriginalFileName().endsWith("xml")) {
 			type = MediaType.APPLICATION_XML;
@@ -130,20 +140,20 @@ public class OverlayController extends BaseController {
 	}
 
 	/**
-	 * @return the overlayController
-	 * @see #overlayController
+	 * @return the overlayRestImp
+	 * @see #overlayRestImp
 	 */
-	public OverlayRestImpl getOverlayController() {
-		return overlayController;
+	public OverlayRestImpl getOverlayRestImp() {
+		return overlayRestImp;
 	}
 
 	/**
-	 * @param overlayController
-	 *          the overlayController to set
-	 * @see #overlayController
+	 * @param overlayRestImp
+	 *          the overlayRestImp to set
+	 * @see #overlayRestImp
 	 */
-	public void setOverlayController(OverlayRestImpl overlayController) {
-		this.overlayController = overlayController;
+	public void setOverlayRestImp(OverlayRestImpl overlayRestImp) {
+		this.overlayRestImp = overlayRestImp;
 	}
 
 }
\ No newline at end of file
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java
index aef38648ff..72c881ef10 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/overlays/OverlayRestImpl.java
@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
 import lcsb.mapviewer.api.BaseRestImpl;
+import lcsb.mapviewer.api.ObjectNotFoundException;
 import lcsb.mapviewer.api.QueryException;
 import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.model.cache.FileEntry;
@@ -194,17 +195,17 @@ public class OverlayRestImpl extends BaseRestImpl {
 		AuthenticationToken authenticationToken = userService.getToken(token);
 		Model model = modelService.getLastModelByProjectId(projectId, authenticationToken);
 		if (model == null) {
-			throw new QueryException("Project with given id doesn't exist");
+			throw new ObjectNotFoundException("Project with given id doesn't exist");
 		}
 		try {
 			Integer id = Integer.valueOf(overlayId);
 			LayoutView layout = layoutService.getLayoutById(model, id, authenticationToken);
 			if (layout == null) {
-				throw new QueryException("Invalid overlay id");
+				throw new ObjectNotFoundException("Overlay doesn't exist");
 			}
 			layoutService.removeLayout(layout, null);
 		} catch (NumberFormatException e) {
-			throw new QueryException("Invalid overlay id");
+			throw new QueryException("Invalid overlay id: " + overlayId);
 		}
 		return okStatus();
 	}
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/AllProjectTests.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/AllProjectTests.java
index 61b2ebdb62..708c0ebd98 100644
--- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/AllProjectTests.java
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/AllProjectTests.java
@@ -5,9 +5,11 @@ import org.junit.runners.Suite;
 import org.junit.runners.Suite.SuiteClasses;
 
 import lcsb.mapviewer.api.projects.models.AllModelsTests;
+import lcsb.mapviewer.api.projects.overlays.AllOverlaysTests;
 
 @RunWith(Suite.class)
 @SuiteClasses({ AllModelsTests.class, //
+	AllOverlaysTests.class, //
 		ModelMetaDataTest.class, //
 		ProjectRestImplTest.class })
 public class AllProjectTests {
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/overlays/AllOverlaysTests.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/overlays/AllOverlaysTests.java
new file mode 100644
index 0000000000..7ab3216f8e
--- /dev/null
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/overlays/AllOverlaysTests.java
@@ -0,0 +1,11 @@
+package lcsb.mapviewer.api.projects.overlays;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith(Suite.class)
+@SuiteClasses({ OverlayControllerTest.class })
+public class AllOverlaysTests {
+
+}
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/overlays/OverlayControllerTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/overlays/OverlayControllerTest.java
new file mode 100644
index 0000000000..53d680c49f
--- /dev/null
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/overlays/OverlayControllerTest.java
@@ -0,0 +1,43 @@
+package lcsb.mapviewer.api.projects.overlays;
+
+import static org.junit.Assert.fail;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import lcsb.mapviewer.api.RestTestFunctions;
+import lcsb.mapviewer.services.InvalidTokenException;
+
+public class OverlayControllerTest extends RestTestFunctions {
+	OverlayController	controller = new OverlayController();
+
+	@Autowired
+	OverlayRestImpl		overlayRestImp;
+
+	@AfterClass
+	public static void tearDownAfterClass() throws Exception {
+	}
+
+	@Before
+	public void setUp() throws Exception {
+		controller.setOverlayRestImp(overlayRestImp);
+	}
+
+	@After
+	public void tearDown() throws Exception {
+	}
+
+	@Test
+	public void testTokenParsing() throws Exception {
+		String body = "{\"token\":\"" + token + "\"}";
+		try {
+			controller.removeOverlay(body, "p_id", "-1");
+			fail("Exception expected");
+		} catch (InvalidTokenException e) {
+		}
+	}
+
+}
-- 
GitLab