From 0feaefcf7f1399a09daf1d6f483f7b74cc737533 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Wed, 10 Apr 2019 14:42:35 +0200 Subject: [PATCH] select provides options for root and mapping types --- .../src/main/js/gui/admin/AddProjectDialog.js | 64 ++++++++++++++----- frontend-js/src/main/js/gui/admin/ZipEntry.js | 6 +- .../api/projects/ProjectRestImpl.java | 20 +++++- .../api/projects/ProjectRestImplTest.java | 19 ++++++ 4 files changed, 89 insertions(+), 20 deletions(-) diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js index ff8a559935..7b98ba22ae 100644 --- a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js +++ b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js @@ -566,12 +566,25 @@ AddProjectDialog.prototype.createSubmapsTabContent = function () { var filename = $(input).attr("data"); var configuration = self.getConfiguration(); var mapTypes = configuration.getMapTypes(); + + var selectedId = $(input).val(); + + var data = self.getEntryByFilename(filename).getData(); + data.type = undefined; + data.root = false; + data.mapping = false; for (var j = 0; j < mapTypes.length; j++) { var mapType = mapTypes[j]; - if (mapType.id === $(input).val()) { - self.getEntryByFilename(filename).getData().type = mapType; + if (mapType.id === selectedId) { + data.type = mapType; } } + if (selectedId === "ROOT") { + data.root = true; + } + if (selectedId === "MAPPING") { + data.mapping = true; + } }); self.addListener("onZipFileUpload", function () { @@ -582,17 +595,34 @@ AddProjectDialog.prototype.createSubmapsTabContent = function () { for (var i = 0; i < entries.length; i++) { var entry = entries[i]; if (entry.getType() === "MAP") { - var row = []; + var row = [], selected; var typeSelect = "<select data='" + entry.getFilename() + "' name='submapType'>"; - typeSelect += "<option value='" + entry.getData().type.id + "' selected>" + entry.getData().type.name + "</option>"; var mapTypes = configuration.getMapTypes(); for (var j = 0; j < mapTypes.length; j++) { var mapType = mapTypes[j]; - if (mapType !== entry.getData().type) { - typeSelect += "<option value='" + mapType.id + "' >" + mapType.name + "</option>"; + if (mapType === entry.getData().type) { + selected = " selected"; + } else { + selected = ""; } + typeSelect += "<option value='" + mapType.id + "' " + selected + ">" + mapType.name + "</option>"; + } + + if (entry.getData().root) { + selected = " selected"; + } else { + selected = ""; } + typeSelect += "<option value='ROOT' " + selected + ">ROOT</option>"; + + if (entry.getData().mapping) { + selected = " selected"; + } else { + selected = ""; + } + typeSelect += "<option value='MAPPING' " + selected + ">MAPPING</option>"; + typeSelect += "</select>"; @@ -1200,10 +1230,10 @@ AddProjectDialog.prototype.checkValidity = function () { var mappingExist = 0; for (i = 0; i < self.getZipEntries().length; i++) { if (self.getZipEntries()[i].getData().mapping) { - mappingExist ++; + mappingExist++; } } - if (mappingExist>1) { + if (mappingExist > 1) { error += "<li>only one mapping map can be selected</li>"; isValid = false; } @@ -1360,15 +1390,17 @@ AddProjectDialog.prototype.createZipEntry = function (jsZipEntry, zipObject) { } data.name = name; }).then(function () { - var configuration = self.getConfiguration(); - var mapTypes = configuration.getMapTypes(); - for (var i = 0; i < mapTypes.length; i++) { - if (mapTypes[i].id === "UNKNOWN") { - data.type = mapTypes[i]; + if (!data.root && !data.mapping) { + var configuration = self.getConfiguration(); + var mapTypes = configuration.getMapTypes(); + for (var i = 0; i < mapTypes.length; i++) { + if (mapTypes[i].id === "UNKNOWN") { + data.type = mapTypes[i]; + } + } + if (data.type === undefined) { + data.type = mapTypes[0]; } - } - if (data.type === undefined) { - data.type = mapTypes[0]; } }); } diff --git a/frontend-js/src/main/js/gui/admin/ZipEntry.js b/frontend-js/src/main/js/gui/admin/ZipEntry.js index 9a4c40d851..92546fd6c9 100644 --- a/frontend-js/src/main/js/gui/admin/ZipEntry.js +++ b/frontend-js/src/main/js/gui/admin/ZipEntry.js @@ -7,7 +7,7 @@ var types = ["IMAGE", "OVERLAY", "MAP"]; * @param {Object} params * @param {string} params.type * @param {string} params.filename - * @param {string} params.data + * @param {Object} params.data * @constructor */ function ZipEntry(params) { @@ -54,7 +54,7 @@ ZipEntry.prototype.getFilename = function () { /** * - * @param {string} data + * @param {Object} data */ ZipEntry.prototype.setData = function (data) { this._data = data; @@ -62,7 +62,7 @@ ZipEntry.prototype.setData = function (data) { /** * - * @returns {string} + * @returns {{type: MapType, root:boolean, mapping: boolean}} */ ZipEntry.prototype.getData = function () { return this._data; 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 43c39d1351..85b4297df0 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 @@ -440,7 +440,10 @@ public class ProjectRestImpl extends BaseRestImpl { String submodelTypeKey = "zip-entries[" + fileIndex + "][_data][type][id]"; String rootKey = "zip-entries[" + fileIndex + "][_data][root]"; String mappingKey = "zip-entries[" + fileIndex + "][_data][mapping]"; - SubmodelType mapType = SubmodelType.valueOf((String) data.get(submodelTypeKey).get(0)); + + String mapTypeString = getStringValue(data.get(submodelTypeKey), SubmodelType.UNKNOWN.name()); + SubmodelType mapType = SubmodelType.valueOf(mapTypeString); + String name = (String) data.get("zip-entries[" + fileIndex + "][_data][name]").get(0); Boolean root = getBoolValue(data.get(rootKey), false); Boolean mapping = getBoolValue(data.get(mappingKey), false); @@ -474,6 +477,21 @@ public class ProjectRestImpl extends BaseRestImpl { } } + private String getStringValue(List<Object> list, String defaultValue) { + if (list == null) { + return defaultValue; + } + if (list.size() == 0) { + return defaultValue; + } + Object obj = list.get(0); + if (obj instanceof String) { + return (String) list.get(0); + } else { + return obj.toString(); + } + } + /** * Method that computes md5 hash for a given {@link String}. * diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/ProjectRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/ProjectRestImplTest.java index 202f5047d2..50143516ac 100644 --- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/ProjectRestImplTest.java +++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/ProjectRestImplTest.java @@ -236,6 +236,25 @@ public class ProjectRestImplTest extends RestTestFunctions { } } + @Test + public void testExtractZipEntriesWithNoMapType() throws Exception { + try { + MultiValueMap<String, Object> data = new LinkedMultiValueMap<>(); + data.put("zip-entries[0][_type]", createLinkedList("MAP")); + data.put("zip-entries[0][_filename]", createLinkedList("main.xml")); + data.put("zip-entries[0][_data][root]", createLinkedList("true")); + data.put("zip-entries[0][_data][name]", createLinkedList("main")); + List<ZipEntryFile> result = _projectRestImpl.extractZipEntries(data); + assertNotNull(result); + assertEquals(1, result.size()); + assertTrue(result.get(0) instanceof ModelZipEntryFile); + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + private LinkedList<Object> createLinkedList(Object string) { LinkedList<Object> result = new LinkedList<>(); result.add(string); -- GitLab