diff --git a/CHANGELOG b/CHANGELOG index effe44434596dd2c4040092edcea460f1e5fb9cf..91b962f77884865c8ebc5a50afcc9828e9094b4a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,8 @@ minerva (14.0.0~alpha.1) unstable; urgency=low * Small improvement: debian package can be installed on debian:buster (#879) * Bug fix: REST API bioEntities:search method didn't limit results to the submodel id (#880) + * Bug fix: Empty Overlay colours were not preserved during export to + CellDesigner (#714) -- Piotr Gawron <piotr.gawron@uni.lu> Mon, 12 Aug 2019 10:00:00 +0200 diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java index de89361e932972474b2adc890549ed18a9e8e98e..a2b31124c8dd31c7cddd5d9f874f70a2c325fb05 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java @@ -94,6 +94,7 @@ public class ModelController extends BaseController { @PathVariable(value = "modelId") String modelId, @RequestParam(value = "handlerClass") String handlerClass, @RequestParam(value = "overlayIds", defaultValue = "") String overlayIds, + @RequestParam(value = "backgroundOverlayId", defaultValue = "") String backgroundOverlayId, @RequestParam(value = "polygonString", defaultValue = "") String polygonString, @RequestParam(value = "elementIds", defaultValue = "") String elementIds, @RequestParam(value = "reactionIds", defaultValue = "") String reactionIds) @@ -101,7 +102,7 @@ public class ModelController extends BaseController { ConverterException, InconsistentModelException { User user = userService.getUserByLogin(authentication.getName()); FileEntry file = modelController.getModelAsModelFile( - projectId, modelId, handlerClass, overlayIds, polygonString, elementIds, reactionIds, user); + projectId, modelId, handlerClass, overlayIds, polygonString, elementIds, reactionIds, user, backgroundOverlayId); return ResponseEntity.ok().contentLength(file.getFileContent().length) .contentType(MediaType.APPLICATION_OCTET_STREAM) .header("Content-Disposition", "attachment; filename=" + file.getOriginalFileName()) diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java index da7ac0174e87f935951793507aacaec67e4c6570..43c25bce79f8d9f1420014eb479ee9b11fbbd382 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java @@ -170,9 +170,12 @@ public class ModelRestImpl extends BaseRestImpl { public FileEntry getModelAsModelFile(String projectId, String modelId, String handlerClass, String overlayIds, String polygonString, String elementIds, - String reactionIds, User user) + String reactionIds, User user, String backgroundOverlayId) throws QueryException, IOException, InvalidColorSchemaException, CommandExecutionException, ConverterException, InconsistentModelException { + + Project project = getProjectService().getProjectByProjectId(projectId); + Model originalModel = getModelByModelId(projectId, modelId); Path2D polygon = stringToPolygon(polygonString, originalModel); @@ -188,10 +191,24 @@ public class ModelRestImpl extends BaseRestImpl { String[] overlayIdsList = stringListToArray(overlayIds); // Remove all colors if (overlayIdsList.length > 0) { - for (Element element : part.getElements()) { - element.setColor(Color.WHITE); + new ClearColorModelCommand(part).execute(); + } + + if (!backgroundOverlayId.equals("")) { + Layout overlay = project.getLayoutByIdentifier(Integer.valueOf(backgroundOverlayId)); + + if (overlay == null) { + throw new ObjectNotFoundException("Unknown overlay in model. Layout.id=" + backgroundOverlayId); } + if (overlay.getTitle().equals(BuildInLayout.CLEAN.getTitle())) { + // this might not return true if we change CLEAN.title in future... + + // if it's clean then remove coloring + new ClearColorModelCommand(part).execute(); + } } + + // Color with overlays for (String overlayId : overlayIdsList) { Layout overlay = layoutService.getLayoutById(Integer.parseInt(overlayId.trim())); diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java index 0c494545f71472102125b1a720c6dbba08a300b6..b16271efa93f1998bf8cd6005d7e8821491f7521 100644 --- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java +++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java @@ -108,20 +108,20 @@ public class ModelRestImplTest extends RestTestFunctions { @Test(expected = QueryException.class) public void testGetModelAsFileModel() throws Exception { ModelRestImpl modelRest = createMockProjectRest("testFiles/model/sample.xml"); - modelRest.getModelAsModelFile("sample", "0", "", "", "", null, null, null); + modelRest.getModelAsModelFile("sample", "0", "", "", "", null, null, null, ""); } @Test public void testGetModelAsFileModel2() throws Exception { ModelRestImpl modelRest = createMockProjectRest("testFiles/model/sample.xml"); modelRest.getModelAsModelFile("sample", "0", CellDesignerXmlParser.class.getCanonicalName(), "", - "0,0;90,0;90,90;90,0", null, null, null); + "0,0;90,0;90,90;90,0", null, null, null, ""); } @Test(expected = QueryException.class) public void testGetModelAsFileModel3() throws Exception { ModelRestImpl modelRest = createMockProjectRest("testFiles/model/sample.xml"); - modelRest.getModelAsModelFile("sample", "0", "", "", "0,0;90,0;90,90;90,0", null, null, null); + modelRest.getModelAsModelFile("sample", "0", "", "", "0,0;90,0;90,90;90,0", null, null, null, ""); } @Test