From ce277f61bc09b1f846daed3b377c0b7a4e60da97 Mon Sep 17 00:00:00 2001
From: Jaden Diefenbaugh <blakcap@users.noreply.github.com>
Date: Thu, 2 Mar 2017 11:32:59 +0100
Subject: [PATCH] reset addReportItem directive in anticipation of removing it
 later

---
 .../reports/app/directives/addReportItem.js   | 205 ++++++++++++------
 1 file changed, 136 insertions(+), 69 deletions(-)

diff --git a/beat/web/reports/static/reports/app/directives/addReportItem.js b/beat/web/reports/static/reports/app/directives/addReportItem.js
index b21c31b1f..4e57c6a54 100644
--- a/beat/web/reports/static/reports/app/directives/addReportItem.js
+++ b/beat/web/reports/static/reports/app/directives/addReportItem.js
@@ -21,9 +21,8 @@
  */
 //Directive for opening smart_selector list on "Add a report item" button click that displays options
 
-angular.module('reportApp').directive("addreportitem", ['$compile', 'GroupsService', function($compile, GroupsService){
+angular.module('reportApp').directive("addreportitem", function($compile){
 	return function(scope, element, attrs){
-		console.log(scope);
 		scope.$on("addSavedElement", function(event, id_content, type){
 			let num_tables_in_content = 0;
 			let num_figures_in_content = 0;
@@ -342,42 +341,20 @@ angular.module('reportApp').directive("addreportitem", ['$compile', 'GroupsServi
 
 					});
 
-					// get the possible plot data
-					let possiblePlots = GroupsService
-					// only look at plots from exps in active group
-					.getGroupExperiments(GroupsService.activeGroup)
-					// get the obj with the exp's possible plots
-					.map(expName => Object.entries(scope.report.all_experiments[expName].results.analysis)
-						.filter(([res_name, obj]) => res_name !== 'out_data')
-						.map(([res_name, obj]) => {
-							return {
-								identifier: res_name,
-								name: res_name,
-								description: obj.type
-							};
-						})
-					)
-					// flatten the array of arrays generated above
-					.reduce((a, as) => a.concat(as), [])
-					// only keep plots that are possible from all the entries
-					.reduce((aKeep, v, i, a) => {
-						console.log(v);
-						let plotTypeCount = a.filter(o => o.description === v.description).length;
-						// if every exp couldnt do this plot, dont keep it
-						if(plotTypeCount < GroupsService.getGroupExperiments(GroupsService.activeGroup).length){
-							console.log(`break less than`);
-							return aKeep;
-						}
-						// if this value is already kept, dont keep it
-						if(aKeep.find(o => o.description === v.description)){
-							console.log(`break already`);
-							console.log(aKeep);
-							return aKeep;
-						}
-						return aKeep.concat(v);
-					}, [])
+					//Results block are the same for all experiments from same analyzer.
+					//So just grab information from one of them for smart_selector items
+					let single_experiment = scope.report.experiments[0];
+
+					//create smart_selector items
+					angular.forEach(scope.report_experiments[single_experiment].plottable_blocks, function(value_plottable, key_plottable){
+						let plot_type = scope.report_experiments[single_experiment].results[scope.report_experiments[single_experiment].analyzer_block][value_plottable].type;
+						let item_dict = {};
+						item_dict["identifier"] = value_plottable;
+						item_dict["name"] = value_plottable;
+						item_dict["description"] = plot_type;
 
-					next_content_items = possiblePlots;
+						next_content_items.push(item_dict);
+					});
 					break;
 			}
 
@@ -518,7 +495,7 @@ angular.module('reportApp').directive("addreportitem", ['$compile', 'GroupsServi
 		}
 
 		//Retrieve chart from api and display on proper item
-		function _retrieve_chart(scope, sub_content, container){
+		function _get_chart(scope, sub_content, content_type, chart_id){
 			let required_plotter = [];
 			let set_plotter = '';
 			if(sub_content.selected_plotter != undefined){
@@ -580,23 +557,129 @@ angular.module('reportApp').directive("addreportitem", ['$compile', 'GroupsServi
 
 			let legend_experiments = '';
 			let alias_experiments = [];
+			for(let i = 0; i < scope.report.experiments.length; i++){
+				if(i == 0)
+					legend_experiments = scope.report_experiments_alias[scope.report.experiments[i]];
+				else
+					legend_experiments = legend_experiments+ "&" +scope.report_experiments_alias[scope.report.experiments[i]];
 
-			let reportItemGroupExps;
-			let existGroup = GroupsService.getReportItemGroup(container.id);
-			if(existGroup){
-				reportItemGroupExps = existGroup.experiments;
-			} else {
-				GroupsService.addReportItemToGroup(container.id, GroupsService.activeGroup);
-				reportItemGroupExps = GroupsService.getReportItemGroup(container.id).experiments;
+				alias_experiments.push(scope.report_experiments_alias[scope.report.experiments[i]]);
 			}
 
-			for(let i = 0; i < scope.report.experiments.length; i++){
-				// if this exp isn't in the active group's exp list, dont look at it
-				if(!reportItemGroupExps.includes(scope.report.experiments[i])){
-					continue;
+			let request_data = {
+				experiment:   alias_experiments,
+				analyzer:     [scope.report.analyzer],
+				output:       [chart_name],
+				plotter:      set_plotter,
+				legend:       legend_experiments,
+				report_number:  scope.report.number,
+				//height:       300,
+				//width:        400,
+			};
+
+			base_url = scope.report.url_prefix;
+
+			let plot_detail = {};
+			plot_detail["required_plotter"] = required_plotter;
+			plot_detail["data"] =  {
+				analyzer:     [scope.report.analyzer],
+				output:       [chart_name],
+				plotter:      set_plotter,
+			};
+
+			if(sub_content.selected_template != undefined){// && sub_content.selected_template != "Default")
+				plot_detail["selected_template"] = sub_content.selected_template;
+				request_data.parameter = plot_detail["selected_template"];
+			}
+			else{
+				plot_detail["selected_template"] = sub_content.defaultplotter.parameter;
+				request_data.parameter = plot_detail["selected_template"];
+			}
+
+			if(sub_content.merged != undefined){// && sub_content.selected_template != "Default")
+				plot_detail["merged"] = sub_content.merged;
+				request_data.merged = plot_detail["merged"];
+			}
+			else{
+				plot_detail["merged"] = true;
+				request_data.merged = plot_detail["merged"];
+			}
+
+			beat.experiments.utils.getPlotData(base_url,
+				request_data, required_plotter, plotterparameter, content_type,
+				function(r_image_data, selected_content_type) {
+					download(r_image_data, chart_id + "." + content_type.toLowerCase(), selected_content_type);
 				}
+			);
+		}
+
 
-				if(legend_experiments.length == 0)
+		//Retrieve chart from api and display on proper item
+		function _retrieve_chart(scope, sub_content, container){
+			let required_plotter = [];
+			let set_plotter = '';
+			if(sub_content.selected_plotter != undefined){
+				//required_plotter.push(sub_content.selected_plotter);
+				set_plotter = sub_content.selected_plotter;
+				let requested_dataformat = '';
+				//Get other plotters for required dataformat
+				for (let i = 0; i < scope.report.plotters.length; i++){
+					if(scope.report.plotters[i].name == sub_content.selected_plotter){
+						requested_dataformat = scope.report.plotters[i].dataformat;
+						break;
+					}
+				}
+
+				//Get default plotter for required dataformat
+				for (let i = 0; i < scope.report.defaultplotters.length; i++){
+					if(scope.report.defaultplotters[i].dataformat == requested_dataformat){
+						sub_content.defaultplotter = scope.report.defaultplotters[i];
+						break;
+					}
+				}
+
+				required_plotter.push(sub_content.defaultplotter.plotter);
+
+				//Get other plotters for required dataformat
+				for (let i = 0; i < scope.report.plotters.length; i++){
+					if(scope.report.plotters[i].dataformat == requested_dataformat && scope.report.plotters[i].name != sub_content.defaultplotter.plotter){
+						required_plotter.push(scope.report.plotters[i].name);
+					}
+				}
+			}
+			else{
+				//Get default plotter for required dataformat
+				for (let i = 0; i < scope.report.defaultplotters.length; i++){
+					if(scope.report.defaultplotters[i].dataformat == sub_content.description){
+						sub_content.defaultplotter = scope.report.defaultplotters[i];
+						break;
+					}
+				}
+
+				required_plotter.push(sub_content.defaultplotter.plotter);
+				set_plotter = sub_content.defaultplotter.plotter;
+
+				//Get other plotters for required dataformat
+				for (let i = 0; i < scope.report.plotters.length; i++){
+					if(scope.report.plotters[i].dataformat == sub_content.description && scope.report.plotters[i].name != sub_content.defaultplotter.plotter){
+						required_plotter.push(scope.report.plotters[i].name);
+					}
+				}
+			}
+
+			let plotterparameter = [];
+			//Get other plotterparameter
+			for (let i = 0; i < scope.report.plotterparameter.length; i++){
+				plotterparameter.push(scope.report.plotterparameter[i].name);
+			}
+
+			let chart_name = sub_content.name;
+
+			let legend_experiments = '';
+			let alias_experiments = [];
+
+			for(let i = 0; i < scope.report.experiments.length; i++){
+				if(i == 0)
 					legend_experiments = scope.report_experiments_alias[scope.report.experiments[i]];
 				else
 					legend_experiments = legend_experiments+ "&" +scope.report_experiments_alias[scope.report.experiments[i]];
@@ -607,20 +690,9 @@ angular.module('reportApp').directive("addreportitem", ['$compile', 'GroupsServi
 					alias_experiments.push(scope.report_experiments_alias_from_content[scope.report.experiments[i]]);
 			}
 
-			let getAnalyzerFromExpName = (expName) => {
-				if(!scope.report.all_experiments){
-					return null;
-				}
-				let e = scope.report.all_experiments[expName];
-				if(!e){
-					return null;
-				}
-				return e.declaration.analyzers.analysis.algorithm;
-			};
-
 			let request_data = {
 				experiment:   alias_experiments,
-				analyzer:     [getAnalyzerFromExpName(reportItemGroupExps[0])],
+				analyzer:     [scope.report.analyzer],
 				output:       [chart_name],
 				plotter:      set_plotter,
 				legend:       legend_experiments,
@@ -632,15 +704,10 @@ angular.module('reportApp').directive("addreportitem", ['$compile', 'GroupsServi
 			base_url = scope.report.url_prefix;
 			//scope.plots_details[container.id];
 
-			let analyzers = [scope.report.analyzer];
-			analyzers = reportItemGroupExps
-			.map(expName => getAnalyzerFromExpName(expName))
-			.filter(a => a);
-
 			let plot_detail = {};
 			plot_detail["required_plotter"] = required_plotter;
 			plot_detail["data"] =  {
-				analyzer:     analyzers,
+				analyzer:     [scope.report.analyzer],
 				output:       [chart_name],
 				plotter:      set_plotter,
 			};
@@ -707,5 +774,5 @@ angular.module('reportApp').directive("addreportitem", ['$compile', 'GroupsServi
 		}
 
 	};
-}]);
+});
 
-- 
GitLab