From 09848158ced693617a0966c16b3eaf3299dc2ec7 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Wed, 25 Jan 2017 14:44:50 +0100
Subject: [PATCH] error handling added

---
 .../java/lcsb/mapviewer/api/BaseController.java     |  2 +-
 .../lcsb/mapviewer/api/overlay/OverlayRestImpl.java | 13 +++++++++++--
 .../lcsb/mapviewer/services/impl/LayoutService.java |  3 +++
 3 files changed, 15 insertions(+), 3 deletions(-)

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 2e4fb4f7f5..5b22b3c2ed 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/BaseController.java
@@ -17,7 +17,7 @@ public abstract class BaseController {
 			return new ResponseEntity<Object>("{\"error\" : \"Access denied.\",\"reason\":\"" + e.getMessage() + "\"}", new HttpHeaders(), HttpStatus.FORBIDDEN);
 		} else if (e instanceof QueryException) {
 			return new ResponseEntity<Object>(
-					"{\"error\" : \"Query server error.\",\"reason\":\"" + e.getMessage() + "\"}", new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR);
+					"{\"error\" : \"Query server error.\",\"reason\":\"" + e.getMessage() + "\"}", new HttpHeaders(), HttpStatus.BAD_REQUEST);
 		} else {
 			return new ResponseEntity<Object>(
 					"{\"error\" : \"Internal server error.\",\"reason\":\"" + e.getMessage() + "\"}", new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR);
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/overlay/OverlayRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/overlay/OverlayRestImpl.java
index 1851bc9eeb..d13401b4b9 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/overlay/OverlayRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/overlay/OverlayRestImpl.java
@@ -9,8 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
 import lcsb.mapviewer.api.QueryException;
-import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.cache.FileEntry;
+import lcsb.mapviewer.model.map.layout.Layout;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.services.SecurityException;
 import lcsb.mapviewer.services.interfaces.ILayoutService;
@@ -135,7 +135,16 @@ public class OverlayRestImpl {
 		if (model == null) {
 			throw new QueryException("Project with given id doesn't exist");
 		}
-		return layoutService.getLayoutDataById(Integer.valueOf(overlayId), authenticationToken).getInputData();
+		try {
+			Integer id = Integer.valueOf(overlayId);
+			Layout layout = layoutService.getLayoutDataById(id, authenticationToken);
+			if (layout == null) {
+				throw new QueryException("Invalid overlay id");
+			}
+			return layout.getInputData();
+		} catch (NumberFormatException e) {
+			throw new QueryException("Invalid overlay id");
+		}
 	}
 
 }
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java
index d5637d2e94..6de79f3787 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java
@@ -917,6 +917,9 @@ public class LayoutService implements ILayoutService {
 
 	private Layout getLayoutById(int layoutId, AuthenticationToken token) throws SecurityException {
 		Layout layout = layoutDao.getById(layoutId);
+		if (layout == null) {
+			return null;
+		}
 		User user = userService.getUserByToken(token);
 		if (!userCanViewOverlay(layout, user)) {
 			throw new SecurityException("User doesn't have access to overlay");
-- 
GitLab