diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/config/Profile.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/config/Profile.js index fcf249f4bd566ea84fea231a36af435ff63f38f3..cb687cb9126dd35b12ac0f5d1dfbd9e3c27d71a8 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/config/Profile.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/config/Profile.js @@ -34,6 +34,8 @@ $.extend(DefaultProfile.prototype, { this.ELNExperiments = ["SYSTEM_EXPERIMENT"]; this.notShowTypes = ["SYSTEM_EXPERIMENT"]; this.inventoryStructure = []; + this.experimentsStructure = {}; + this.sampleTypeDefinitionsExtension = { } this.searchType = { @@ -314,7 +316,72 @@ $.extend(DefaultProfile.prototype, { ); } - this.initMenuStructure = function() { + this.initExperimentsStructure = function(callback) { + var _this = this; + this.serverFacade.listSpacesWithProjectsAndRoleAssignments(null, function(dataWithSpacesAndProjects) { + // + // 1 + // + var spaces = dataWithSpacesAndProjects.result; + var projects = []; + var projectsAsMap = {}; + for(var i = 0; i < spaces.length; i++) { + var space = spaces[i]; + for(var j = 0; j < space.projects.length; j++) { + var project = space.projects[i]; + delete project["@id"]; + delete project["@type"]; + projects.push(project); + projectsAsMap[project.code] = project; + } + } + + // + // 2 + // + _this.serverFacade.listExperiments(projects, function(experiments) { + for(var i = 0; i < experiments.result.length; i++) { + var experiment = experiments.result[i]; + var identifier = experiment.identifier.split("/"); + var project = projectsAsMap[identifier[2]]; + if(!project.experiments) { + project.experiments = []; + } + project.experiments.push(experiment); + } + + // + // 3 + // + for(var i = 0; i < spaces.length; i++) { + var space = spaces[i]; + var projects = {}; + if(space.projects) { + for(var j = 0; j < space.projects.length; j++) { + var project = space.projects[j]; + var experiments = {}; + if(project.experiments) { + for(var k = 0; k < project.experiments.length; k++) { + var experiment = project.experiments[k]; + experiments[experiment.code] = new BrowserExperiment("showViewExperiment", experiment.identifier, experiment.code); + } + } + projects[project.code] = new BrowserProject(project.code, project.code, experiments); + } + } + _this.experimentsStructure[space.code] = new BrowserSpace(space.code, space.code, projects); + } + + // + // 4 + // + callback(); + } + ); + }); + + } + this.initInventoryStructure = function() { // // Build menu into an in memory structure (Can be used to render it in different manners Menu+Drop Down) // @@ -359,7 +426,7 @@ $.extend(DefaultProfile.prototype, { // // Initializes the Others list with all sampleType codes that are neither in typeGroups or notShowTypes // - this.init = function() { + this.init = function(callbackWhenDone) { for(var i = 0; i < this.allTypes.length; i++) { var sampleType = this.allTypes[i]; if($.inArray(sampleType.code, this.notShowTypes) === -1) { @@ -371,7 +438,8 @@ $.extend(DefaultProfile.prototype, { this.initPropertyTypes(); this.initVocabulariesForSampleTypes(); - this.initMenuStructure(); + this.initInventoryStructure(); + this.initExperimentsStructure(callbackWhenDone); } } }); @@ -1120,7 +1188,7 @@ $.extend(LSILabProfile.prototype, DefaultProfile.prototype, { return ""; } - this.initMenuStructure = function() { + this.initInventoryStructure = function() { for(typeGroupCode in this.typeGroups) { groupOfMenuItems = new GroupOfMenuItems(typeGroupCode,this.typeGroups[typeGroupCode]["DISPLAY_NAME"],[]); diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/controllers/MainController.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/controllers/MainController.js index 91dd8400a3cc965f3189910f4f3bf1d0c0fdfd2e..fccf9ae4467404e46d49748ea83d826af457a626 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/controllers/MainController.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/controllers/MainController.js @@ -77,40 +77,41 @@ function MainController(profile) { //Get Metadata from all sample types before showing the main menu var localReference = this; - this.serverFacade.listSampleTypes( + this.serverFacade.listSampleTypes ( function(result) { //Load Sample Types localReference.profile.allTypes = result.result; //Init profile - localReference.profile.init(); - - //Start App - localReference.inspector = new Inspector(localReference.serverFacade, "mainContainer", localReference.profile); - localReference.navigationBar = new NavigationBar(localReference, "sectionsContainer", null, localReference.profile.inventoryStructure); - localReference.navigationBar.repaint(); - - localReference.changeView("showMainMenu", null); - Util.unblockUI(); - - var openNewSampleTab = Util.queryString.samplePermId; - - if(openNewSampleTab) { - localReference.changeView("showViewSamplePageFromPermId", openNewSampleTab); - } - //Get datastores for automatic DSS configuration, the first one will be used - localReference.serverFacade.listDataStores( - function(dataStores) { - localReference.profile.allDataStores = dataStores.result; - } - ); + localReference.profile.init(function() { + //Start App + localReference.inspector = new Inspector(localReference.serverFacade, "mainContainer", localReference.profile); + localReference.navigationBar = new NavigationBar(localReference, "sectionsContainer", null, localReference.profile.inventoryStructure); + localReference.navigationBar.repaint(); - //Get display settings - localReference.serverFacade.getUserDisplaySettings( function(response) { - if(response.result) { - localReference.profile.displaySettings = response.result; + localReference.changeView("showMainMenu", null); + Util.unblockUI(); + + var openNewSampleTab = Util.queryString.samplePermId; + + if(openNewSampleTab) { + localReference.changeView("showViewSamplePageFromPermId", openNewSampleTab); } + + //Get datastores for automatic DSS configuration, the first one will be used + localReference.serverFacade.listDataStores( + function(dataStores) { + localReference.profile.allDataStores = dataStores.result; + } + ); + + //Get display settings + localReference.serverFacade.getUserDisplaySettings( function(response) { + if(response.result) { + localReference.profile.displaySettings = response.result; + } + }); }); } ); @@ -214,7 +215,7 @@ function MainController(profile) { this.navigationBar.updateBreadCrumbPage(breadCrumbPage); //Show Main menu - var mainMenu = new MainMenu(this, "mainContainer", this.profile.inventoryStructure, this.profile.mainMenuContentExtra()); + var mainMenu = new MainMenu(this, "mainContainer", this.profile.inventoryStructure, this.profile.experimentsStructure, this.profile.mainMenuContentExtra()); mainMenu.init(); this.currentView = mainMenu; diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/MainMenu.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/MainMenu.js index 105845da866da4c396420f19a0315c8249b28cc8..13f167e7ab8e7fc802ec4bd43cb80f4f39374731 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/MainMenu.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/MainMenu.js @@ -20,12 +20,13 @@ * @constructor * @this {MainMenu} * @param {string} containerId The Container where the Inspector DOM will be atached. - * @param {List<GroupOfMenuItems>} menuStructure The menu structure. + * @param {List<GroupOfMenuItems>} inventoryStructure The menu structure. */ -function MainMenu(mainController, containerId, menuStructure, mainMenuContentExtra) { +function MainMenu(mainController, containerId, inventoryStructure, experimentsStructure, mainMenuContentExtra) { this.mainController = mainController; this.containerId = containerId; - this.menuStructure = menuStructure; + this.inventoryStructure = inventoryStructure; + this.experimentsStructure = experimentsStructure; this.mainMenuContentExtra = mainMenuContentExtra; this.inventoryWidget = null; @@ -51,11 +52,11 @@ function MainMenu(mainController, containerId, menuStructure, mainMenuContentExt mainMenuWrapper.append($mainMenuExtra); //Browser Widget - this.browserWidget = new BrowserWidget("browserWidgetContainer", this.mainController, this.mainController.serverFacade); + this.browserWidget = new BrowserWidget(this.mainController, "browserWidgetContainer", this.experimentsStructure); this.browserWidget.init(); //Inventory Widget - this.inventoryWidget = new InventoryWidget(this.mainController, "inventoryWidgetContainer", this.menuStructure); + this.inventoryWidget = new InventoryWidget(this.mainController, "inventoryWidgetContainer", this.inventoryStructure); this.inventoryWidget.init(); } } \ No newline at end of file diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/widgets/BrowserWidget.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/widgets/BrowserWidget.js index f33bb3eb190538e38867c54f3fb354316967e024..922b42896b40220951700d90635f5fd790f80ebd 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/widgets/BrowserWidget.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/widgets/BrowserWidget.js @@ -1,61 +1,9 @@ -function BrowserWidget(containerId, mainController, serverFacade) { +function BrowserWidget(mainController, containerId, structure) { this.containerId = containerId; this.mainController = mainController; - this.serverFacade = serverFacade; - this.structure = {}; + this.structure = structure; this.init = function() { - var _this = this; - this.serverFacade.listSpacesWithProjectsAndRoleAssignments(null, function(dataWithSpacesAndProjects) { - var spaces = dataWithSpacesAndProjects.result; - var projects = []; - var projectsAsMap = {}; - for(var i = 0; i < spaces.length; i++) { - var space = spaces[i]; - for(var j = 0; j < space.projects.length; j++) { - var project = space.projects[i]; - delete project["@id"]; - delete project["@type"]; - projects.push(project); - projectsAsMap[project.code] = project; - } - } - - _this.serverFacade.listExperiments(projects, function(experiments) { - for(var i = 0; i < experiments.result.length; i++) { - var experiment = experiments.result[i]; - var identifier = experiment.identifier.split("/"); - var project = projectsAsMap[identifier[2]]; - if(!project.experiments) { - project.experiments = []; - } - project.experiments.push(experiment); - } - _this._initStructure(spaces); - } - ); - }); - } - - this._initStructure = function(spaces) { - for(var i = 0; i < spaces.length; i++) { - var space = spaces[i]; - var projects = {}; - if(space.projects) { - for(var j = 0; j < space.projects.length; j++) { - var project = space.projects[j]; - var experiments = {}; - if(project.experiments) { - for(var k = 0; k < project.experiments.length; k++) { - var experiment = project.experiments[k]; - experiments[experiment.code] = new BrowserExperiment("showViewExperiment", experiment.identifier, experiment.code); - } - } - projects[project.code] = new BrowserProject(project.code, project.code, experiments); - } - } - this.structure[space.code] = new BrowserSpace(space.code, space.code, projects); - } this.repaint(); }