diff --git a/frontend-js/src/main/js/Configuration.js b/frontend-js/src/main/js/Configuration.js new file mode 100644 index 0000000000000000000000000000000000000000..36624baf5c6f9c1e7c6ee0df8fdcb9504f04ebfc --- /dev/null +++ b/frontend-js/src/main/js/Configuration.js @@ -0,0 +1,74 @@ +"use strict"; + +/* exported logger */ + +var logger = require('./logger'); + +var ConfigurationType = require('./ConfigurationType'); + +function Configuration(json) { + var self = this; + + self._options = []; + + for (var i = 0; i < json.options.length; i++) { + var conf = json.options[i]; + var type = conf.type; + var value = conf.value; + self.setOption(type, value); + } + + var legendFiles = []; + if (self.getOption("LENGEND_FILE_1") !== undefined) { + legendFiles.push(self.getOption("LENGEND_FILE_1")); + } + if (self.getOption("LENGEND_FILE_2") !== undefined) { + legendFiles.push(self.getOption("LENGEND_FILE_2")); + } + if (self.getOption("LENGEND_FILE_3") !== undefined) { + legendFiles.push(self.getOption("LENGEND_FILE_3")); + } + if (self.getOption("LENGEND_FILE_4") !== undefined) { + legendFiles.push(self.getOption("LENGEND_FILE_4")); + } + self.setOption(ConfigurationType.LEGEND_FILES, legendFiles); + + var overlayTypes = []; + for (var i = 0; i < json.overlayTypes.length; i++) { + overlayTypes.push(json.overlayTypes[i].name); + } + self.setOverlayTypes(overlayTypes); + + self.setImageConverters(json.imageFormats); + self.setModelConverters(json.modelFormats); +} + +Configuration.prototype.setOption = function(type, value) { + this._options[type] = value; +}; +Configuration.prototype.getOption = function(type) { + return this._options[type]; +}; + +Configuration.prototype.setOverlayTypes = function(overlayTypes) { + this._overlayTypes = overlayTypes; +}; +Configuration.prototype.getOverlayTypes = function() { + return this._overlayTypes; +}; + +Configuration.prototype.setImageConverters = function(imageConverters) { + this._imageConverters = imageConverters; +}; +Configuration.prototype.getImageConverters = function() { + return this._imageConverters; +}; + +Configuration.prototype.setModelConverters = function(modelConverters) { + this._modelConverters = modelConverters; +}; +Configuration.prototype.getModelConverters = function() { + return this._modelConverters; +}; + +module.exports = Configuration; diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index 029b3a579204258d9d4240629228aed163a31673..f22c773e489b5205e1bad719f66e1ba8d1da29d5 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -11,6 +11,7 @@ var request = require('request'); var Alias = require('./map/data/Alias'); var Chemical = require('./map/data/Chemical'); var Comment = require('./map/data/Comment'); +var Configuration = require('./Configuration'); var Drug = require('./map/data/Drug'); var ConfigurationType = require('./ConfigurationType'); var IdentifiedElement = require('./map/data/IdentifiedElement'); @@ -271,25 +272,6 @@ ServerConnector.getProjectsUrl = function(queryParams, filterParams) { }); }; -ServerConnector.getImageConvertersUrl = function(params) { - return this.getApiUrl({ - type : "configuration", - method : "getImageFormats", - params : { - token : params.token, - }, - }); -}; -ServerConnector.getModelConvertersUrl = function(params) { - return this.getApiUrl({ - type : "configuration", - method : "getModelFormats", - params : { - token : params.token, - }, - }); -}; - ServerConnector.getPublicationsUrl = function(queryParams, filterParams) { filterParams.start = filterParams.start || 0; filterParams.length = filterParams.length || 10; @@ -359,16 +341,6 @@ ServerConnector.getOverlaysUrl = function(queryParams, filterParams) { }); }; -ServerConnector.getOverlayTypesUrl = function(params) { - return this.getApiUrl({ - type : "configuration", - method : "overlayTypes", - params : { - token : params.token, - }, - }); -}; - ServerConnector.getCommentsUrl = function(params) { var elementId = params.elementId; var elementType = params.elementType; @@ -498,13 +470,10 @@ ServerConnector.getAliasesUrl = function(queryParams, filterParams) { }); }; -ServerConnector.getConfigurationUrl = function(token) { +ServerConnector.getConfigurationUrl = function(queryParams, filterParams) { var result = this.getApiUrl({ - type : "configuration", - method : "getAllValues", - params : { - token : token, - }, + type : "configuration/", + params : filterParams }); return result; }; @@ -728,45 +697,29 @@ ServerConnector.isValidTokenUrl = function(params) { }); }; -ServerConnector.getConfigurationParam = function(paramId) { +ServerConnector.getConfiguration = function() { var self = this; - if (paramId === undefined) { - return Promise.reject(new Error("Invalid param identifier")); - } else if (self._configurationParam[paramId] !== undefined) { - return Promise.resolve(self._configurationParam[paramId]); - } else { + if (this._configuration === undefined) { return self.getToken().then(function(token) { - return self.readFile(self.getConfigurationUrl(token)); - }).then(function(content) { - var configs = JSON.parse(content); - for (var i = 0; i < configs.length; i++) { - var conf = configs[i]; - var type = conf.type; - var value = conf.value; - self._configurationParam[type] = value; - } - - self._configurationParam[ConfigurationType.LEGEND_FILES] = []; - if (self._configurationParam["LENGEND_FILE_1"] !== undefined) { - self._configurationParam[ConfigurationType.LEGEND_FILES].push(self._configurationParam["LENGEND_FILE_1"]); - } - if (self._configurationParam["LENGEND_FILE_2"] !== undefined) { - self._configurationParam[ConfigurationType.LEGEND_FILES].push(self._configurationParam["LENGEND_FILE_2"]); - } - if (self._configurationParam["LENGEND_FILE_3"] !== undefined) { - self._configurationParam[ConfigurationType.LEGEND_FILES].push(self._configurationParam["LENGEND_FILE_3"]); - } - if (self._configurationParam["LENGEND_FILE_4"] !== undefined) { - self._configurationParam[ConfigurationType.LEGEND_FILES].push(self._configurationParam["LENGEND_FILE_4"]); - } - if (self._configurationParam[paramId] === undefined) { - Promise.reject(new Error("Cannot find param config: " + paramId)); - } - return self._configurationParam[paramId]; + return self.readFile(self.getConfigurationUrl(null, { + token : token + })); + }).then(function(content){ + self._configuration = new Configuration(JSON.parse(content)); + return Promise.resolve(self._configuration); }); + } else { + return Promise.resolve(self._configuration); } }; +ServerConnector.getConfigurationParam = function(paramId) { + var self = this; + return self.getConfiguration().then(function(configuration) { + return configuration.getOption(paramId); + }); +}; + ServerConnector.getProject = function(projectId) { var queryParams = {}; var filterParams = {}; @@ -1209,27 +1162,15 @@ ServerConnector.getModelDownloadUrl = function(params) { }; ServerConnector.getImageConverters = function(params) { - if (params === undefined) { - params = {}; - } var self = this; - return self.getToken().then(function(token) { - params.token = token; - return self.readFile(self.getImageConvertersUrl(params)); - }).then(function(content) { - return JSON.parse(content); + return self.getConfiguration().then(function(configuration) { + return configuration.getImageConverters(); }); }; ServerConnector.getModelConverters = function(params) { - if (params === undefined) { - params = {}; - } var self = this; - return self.getToken().then(function(token) { - params.token = token; - return self.readFile(self.getModelConvertersUrl(params)); - }).then(function(content) { - return JSON.parse(content); + return self.getConfiguration().then(function(configuration) { + return configuration.getModelConverters(); }); }; @@ -1398,17 +1339,8 @@ ServerConnector.getSuggestedQueryList = function(projectId) { ServerConnector.getOverlayTypes = function() { var self = this; - return self.getToken().then(function(token) { - return self.readFile(self.getOverlayTypesUrl({ - token : token - })); - }).then(function(content) { - var obj = JSON.parse(content); - var result = []; - for (var i = 0; i < obj.length; i++) { - result.push(obj[i].name); - } - return result; + return self.getConfiguration().then(function(configuration) { + return configuration.getOverlayTypes(); }); }; diff --git a/frontend-js/testFiles/apiCalls/configuration/getAllValues/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/getAllValues/token=MOCK_TOKEN_ID& deleted file mode 100644 index a027ad2bf1a9ed163cee0f993694a3ff681139f0..0000000000000000000000000000000000000000 --- a/frontend-js/testFiles/apiCalls/configuration/getAllValues/token=MOCK_TOKEN_ID& +++ /dev/null @@ -1 +0,0 @@ -[{"type":"EMAIL_ADDRESS","value":"your.account@domain.com","idObject":9},{"type":"EMAIL_LOGIN","value":"your@login","idObject":10},{"type":"EMAIL_PASSWORD","value":"email.secret.password","idObject":11},{"type":"EMAIL_IMAP_SERVER","value":"your.imap.domain.com","idObject":13},{"type":"EMAIL_SMTP_SERVER","value":"your.smtp.domain.com","idObject":12},{"type":"EMAIL_SMTP_PORT","value":"25","idObject":14},{"type":"DEFAULT_MAP","value":"sample","idObject":6},{"type":"LOGO_IMG","value":"udl.png","idObject":4},{"type":"LOGO_LINK","value":"http://wwwen.uni.lu/","idObject":3},{"type":"SEARCH_DISTANCE","value":"10","idObject":7},{"type":"REQUEST_ACCOUNT_EMAIL","value":"your.email@domain.com","idObject":1},{"type":"SEARCH_RESULT_NUMBER","value":"100","idObject":8},{"type":"GOOGLE_ANALYTICS_IDENTIFIER","value":"google_analytics_id","idObject":2},{"type":"LOGO_TEXT","value":"University of Luxembourg","idObject":5},{"type":"X_FRAME_DOMAIN","value":"http://localhost:8080/","idObject":56},{"type":"BIG_FILE_STORAGE_DIR","value":"minerva-big/","idObject":131},{"type":"LENGEND_FILE_1","value":"resources/images/legend_a.png","idObject":138},{"type":"LENGEND_FILE_2","value":"resources/images/legend_b.png","idObject":139},{"type":"LENGEND_FILE_3","value":"resources/images/legend_c.png","idObject":140},{"type":"LENGEND_FILE_4","value":"resources/images/legend_d.png","idObject":141},{"type":"USER_MANUAL_FILE","value":"resources/other/user_guide.pdf","idObject":142},{"type":"MIN_COLOR_VAL","value":"FF0000","idObject":205},{"type":"MAX_COLOR_VAL","value":"fbff00","idObject":206}] \ No newline at end of file diff --git a/frontend-js/testFiles/apiCalls/configuration/getImageFormats/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/getImageFormats/token=MOCK_TOKEN_ID& deleted file mode 100644 index 72573aadef036520aba0d3c9537467a882ab9e39..0000000000000000000000000000000000000000 --- a/frontend-js/testFiles/apiCalls/configuration/getImageFormats/token=MOCK_TOKEN_ID& +++ /dev/null @@ -1 +0,0 @@ -[{"handler":"lcsb.mapviewer.converter.graphics.PngImageGenerator","name":"PNG image"},{"handler":"lcsb.mapviewer.converter.graphics.PdfImageGenerator","name":"PDF"}] \ No newline at end of file diff --git a/frontend-js/testFiles/apiCalls/configuration/getModelFormats/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/getModelFormats/token=MOCK_TOKEN_ID& deleted file mode 100644 index 72ccb394d6f8afdf66768b691d2e0ba7f616e530..0000000000000000000000000000000000000000 --- a/frontend-js/testFiles/apiCalls/configuration/getModelFormats/token=MOCK_TOKEN_ID& +++ /dev/null @@ -1 +0,0 @@ -[{"handler":"lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser","name":"CellDesigner SBML"},{"handler":"lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter","name":"SBGN-ML"}] \ No newline at end of file diff --git a/frontend-js/testFiles/apiCalls/configuration/overlayTypes/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/overlayTypes/token=MOCK_TOKEN_ID& deleted file mode 100644 index ad78fc8339659ed0731bb9b3896a5bdbad239f28..0000000000000000000000000000000000000000 --- a/frontend-js/testFiles/apiCalls/configuration/overlayTypes/token=MOCK_TOKEN_ID& +++ /dev/null @@ -1,8 +0,0 @@ -[ - { - "name": "GENERIC" - }, - { - "name": "GENETIC_VARIANT" - } -] \ No newline at end of file diff --git a/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID& new file mode 100644 index 0000000000000000000000000000000000000000..0ce74643e1400a4a870c959c2757e4fa5b1b43e1 --- /dev/null +++ b/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID& @@ -0,0 +1 @@ +{"modelFormats":[{"handler":"lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser","name":"CellDesigner SBML"},{"handler":"lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter","name":"SBGN-ML"}],"imageFormats":[{"handler":"lcsb.mapviewer.converter.graphics.PngImageGenerator","name":"PNG image"},{"handler":"lcsb.mapviewer.converter.graphics.PdfImageGenerator","name":"PDF"}],"options":[{"idObject":9,"type":"EMAIL_ADDRESS","value":"your.account@domain.com"},{"idObject":10,"type":"EMAIL_LOGIN","value":"your@login"},{"idObject":11,"type":"EMAIL_PASSWORD","value":"email.secret.password"},{"idObject":13,"type":"EMAIL_IMAP_SERVER","value":"your.imap.domain.com"},{"idObject":12,"type":"EMAIL_SMTP_SERVER","value":"your.smtp.domain.com"},{"idObject":14,"type":"EMAIL_SMTP_PORT","value":"25"},{"idObject":6,"type":"DEFAULT_MAP","value":"sample"},{"idObject":4,"type":"LOGO_IMG","value":"udl.png"},{"idObject":3,"type":"LOGO_LINK","value":"http://wwwen.uni.lu/"},{"idObject":7,"type":"SEARCH_DISTANCE","value":"10"},{"idObject":1,"type":"REQUEST_ACCOUNT_EMAIL","value":"your.email@domain.com"},{"idObject":8,"type":"SEARCH_RESULT_NUMBER","value":"100"},{"idObject":2,"type":"GOOGLE_ANALYTICS_IDENTIFIER","value":""},{"idObject":5,"type":"LOGO_TEXT","value":"University of Luxembourg"},{"idObject":56,"type":"X_FRAME_DOMAIN","value":"http://localhost:8080/"},{"idObject":131,"type":"BIG_FILE_STORAGE_DIR","value":"minerva-big/"},{"idObject":138,"type":"LENGEND_FILE_1","value":"resources/images/legend_a.png"},{"idObject":139,"type":"LENGEND_FILE_2","value":"resources/images/legend_b.png"},{"idObject":140,"type":"LENGEND_FILE_3","value":"resources/images/legend_c.png"},{"idObject":141,"type":"LENGEND_FILE_4","value":"resources/images/legend_d.png"},{"idObject":142,"type":"USER_MANUAL_FILE","value":"resources/other/user_guide.pdf"},{"idObject":205,"type":"MIN_COLOR_VAL","value":"FF0000"},{"idObject":206,"type":"MAX_COLOR_VAL","value":"fbff00"}],"overlayTypes":[{"name":"GENERIC"},{"name":"GENETIC_VARIANT"}]} \ No newline at end of file diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java index 14654a4ee1c539b6833bc04e0209b1df425f2310..0fa37ef4440bbcb8cfd40bfd35fcd29b6c232770 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java @@ -1,5 +1,6 @@ package lcsb.mapviewer.api.configuration; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -11,7 +12,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import lcsb.mapviewer.api.BaseController; -import lcsb.mapviewer.api.QueryException; import lcsb.mapviewer.services.SecurityException; import lcsb.mapviewer.services.view.ConfigurationView; @@ -21,26 +21,30 @@ public class ConfigurationController extends BaseController { private ConfigurationRestImpl configurationController; @RequestMapping(value = "/configuration/getAllValues", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE }) - public List<ConfigurationView> getAllValues(@RequestParam(value = "token") String token) - throws SecurityException { + public List<ConfigurationView> getAllValues(@RequestParam(value = "token") String token) throws SecurityException { return configurationController.getAllValues(token); } - @RequestMapping(value = "/configuration/getImageFormats", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE }) - public List<Map<String, Object>> getImageFormats(@RequestParam(value = "token") String token) - throws SecurityException { + @RequestMapping(value = "/configuration/getImageFormats", method = { RequestMethod.GET, RequestMethod.POST }, + produces = { MediaType.APPLICATION_JSON_VALUE }) + public List<Map<String, Object>> getImageFormats(@RequestParam(value = "token") String token) throws SecurityException { return configurationController.getImageFormats(token); } - @RequestMapping(value = "/configuration/getModelFormats", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE }) - public List<Map<String, Object>> getModelFormats(@RequestParam(value = "token") String token) - throws SecurityException { + @RequestMapping(value = "/configuration/getModelFormats", method = { RequestMethod.GET, RequestMethod.POST }, + produces = { MediaType.APPLICATION_JSON_VALUE }) + public List<Map<String, Object>> getModelFormats(@RequestParam(value = "token") String token) throws SecurityException { return configurationController.getModelFormats(token); } - @RequestMapping(value = "/configuration/overlayTypes", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) - public List<Map<String, Object>> getOverlayTypes(@RequestParam(value = "token") String token) throws SecurityException { - return configurationController.getOverlayTypes(token); + @RequestMapping(value = "/configuration/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public Map<String, Object> getOverlayTypes(@RequestParam(value = "token") String token) throws SecurityException { + Map<String, Object> result = new HashMap<>(); + result.put("options", configurationController.getAllValues(token)); + result.put("imageFormats", configurationController.getImageFormats(token)); + result.put("modelFormats", configurationController.getModelFormats(token)); + result.put("overlayTypes", configurationController.getOverlayTypes(token)); + return result; } /** @@ -52,7 +56,8 @@ public class ConfigurationController extends BaseController { } /** - * @param configurationController the configurationController to set + * @param configurationController + * the configurationController to set * @see #configurationController */ public void setConfigurationController(ConfigurationRestImpl configurationController) {