From 034a714d55a808772b746bc969a60cb1da718865 Mon Sep 17 00:00:00 2001 From: Philip ABBET <philip.abbet@idiap.ch> Date: Thu, 24 Nov 2016 11:35:56 +0100 Subject: [PATCH] [website] Only propose environments compatible with the selected algorithm on the experiment setup page --- beat/web/backend/static/backend/js/models.js | 46 +++++++++++++++++++ .../static/experiments/js/panels.js | 29 ++++++++---- 2 files changed, 66 insertions(+), 9 deletions(-) diff --git a/beat/web/backend/static/backend/js/models.js b/beat/web/backend/static/backend/js/models.js index 18deadbe8..33ef15c74 100644 --- a/beat/web/backend/static/backend/js/models.js +++ b/beat/web/backend/static/backend/js/models.js @@ -56,6 +56,7 @@ beat.backend.models.EnvironmentsList = function(declaration) var environment = { name: declaration[i].name, version: declaration[i].version, + languages: declaration[i].languages, queues: [], }; @@ -127,6 +128,51 @@ beat.backend.models.EnvironmentsList.prototype.contains = function(name, version } +//---------------------------------------------------------------------------------------- +// Retrieve a list of environments supporting a specific language +//---------------------------------------------------------------------------------------- +beat.backend.models.EnvironmentsList.prototype.filter = function(language) +{ + var result = new beat.backend.models.EnvironmentsList([]); + + for (var i = 0; i < this.data.length; i++) + { + var environment = this.data[i]; + + if (environment.languages.indexOf(language) >= 0) + result.data.push(JSON.parse(JSON.stringify(environment))); + } + + result.length = result.data.length; + + return result; +} + + +//---------------------------------------------------------------------------------------- +// Retrieve the list of supported languages across all the environments +//---------------------------------------------------------------------------------------- +beat.backend.models.EnvironmentsList.prototype.languages = function() +{ + var languages = []; + + for (var i = 0; i < this.data.length; i++) + { + var environment = this.data[i]; + + for (var j = 0; j < environment.languages.length; j++) + { + var language = environment.languages[j]; + + if (languages.indexOf(language) < 0) + languages.push(language); + } + } + + return languages; +} + + //---------------------------------------------------------------------------------------- // Returns an iterator over the environments //---------------------------------------------------------------------------------------- diff --git a/beat/web/experiments/static/experiments/js/panels.js b/beat/web/experiments/static/experiments/js/panels.js index 9e0f1fd5b..82bb88b30 100644 --- a/beat/web/experiments/static/experiments/js/panels.js +++ b/beat/web/experiments/static/experiments/js/panels.js @@ -48,6 +48,7 @@ beat.experiments.panels.Settings = function(panel_id, toolchain_name, this.algorithms = null; this.dataformats = null; this.environments = null; + this.environments_all = null; this.smart_datasets = null; this.algorithm_mapping = algorithm_mapping; this.url_prefix = url_prefix; @@ -183,12 +184,22 @@ beat.experiments.panels.Settings.prototype.initialize = function(toolchain, conf dataformats, datasets, algorithms, environments) { - this.toolchain = toolchain; - this.configuration = configuration; - this.dataformats = dataformats; - this.datasets = datasets; - this.environments = environments; - this.algorithms = algorithms; + this.toolchain = toolchain; + this.configuration = configuration; + this.dataformats = dataformats; + this.datasets = datasets; + this.environments_all = environments; + this.algorithms = algorithms; + + // Separate the environments by languages + this.environments = {}; + + var languages = environments.languages(); + for (var i = 0; i < languages.length; ++i) + { + var language = languages[i]; + this.environments[language] = environments.filter(language); + } // Update the environments var components = [].concat(this.toolchain.blocks, this.toolchain.analyzers); @@ -200,8 +211,8 @@ beat.experiments.panels.Settings.prototype.initialize = function(toolchain, conf if ((configuration != null) && (configuration.environment != null)) { - if (!this.environments.contains(configuration.environment.name, configuration.environment.version)) - this.configuration.setBlockEnvironment(component.name, this.environments.get(configuration.environment.name)); + if (!this.environments_all.contains(configuration.environment.name, configuration.environment.version)) + this.configuration.setBlockEnvironment(component.name, this.environments_all.get(configuration.environment.name)); } } @@ -1078,7 +1089,7 @@ beat.experiments.panels.Settings.prototype._displayParametersControls = function this.configuration, block_entry.block.name, block_entry.algorithm, - this.environments + this.environments[block_entry.algorithm.language] ); $(block_entry.reset_button).show(); -- GitLab