From 9b70177fe97bd7c251263529e8410b8ce5679fe0 Mon Sep 17 00:00:00 2001
From: juanf <juanf>
Date: Mon, 12 May 2014 12:24:38 +0000
Subject: [PATCH] SSDM-179: ELN UI - Navigation widget from spaces to
 experiments

SVN: 31484
---
 .../newbrowser/html/js/config/Profile.js      | 76 ++++++++++++++++++-
 .../html/js/controllers/MainController.js     | 55 +++++++-------
 .../newbrowser/html/js/views/MainMenu.js      | 11 +--
 .../html/js/widgets/BrowserWidget.js          | 56 +-------------
 4 files changed, 108 insertions(+), 90 deletions(-)

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 fcf249f4bd5..cb687cb9126 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 91dd8400a3c..fccf9ae4467 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 105845da866..13f167e7ab8 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 f33bb3eb190..922b42896b4 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();
 	}
 	
-- 
GitLab