Skip to content
Snippets Groups Projects
Commit dca5cc70 authored by Jaden Diefenbaugh's avatar Jaden Diefenbaugh
Browse files

1 group can only have 1 analyzer in it

parent d41bcd01
No related branches found
No related tags found
1 merge request!223Reports overhaul
...@@ -27,10 +27,22 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer ...@@ -27,10 +27,22 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer
vm.test = 'test'; vm.test = 'test';
vm.report = $scope.report; vm.report = $scope.report;
const getAnalyzerFromExpName = (expName) => {
let analyzer_block = vm.report.all_experiments[expName].declaration.analyzers.analysis
|| vm.report.all_experiments[expName].declaration.analyzers.analyzer_private;
return analyzer_block.algorithm;
};
// ReportService stuff to be used directly in ui // ReportService stuff to be used directly in ui
vm.groups = ReportService.groups; vm.groups = ReportService.groups;
vm.removeExperimentFromGroup = ReportService.removeExperimentFromGroup; vm.removeExperimentFromGroup = ReportService.removeExperimentFromGroup;
vm.addExperimentToGroup = ReportService.addExperimentToGroup; vm.addExperimentToGroup = (expName, groupName) => {
let analyzer = getAnalyzerFromExpName(expName);
ReportService.addExperimentToGroup(expName, groupName);
ReportService.groups.find(g => g.name === groupName).analyzer = analyzer;
};
vm.createGroup = function(name) { vm.createGroup = function(name) {
ReportService.createGroup(name); ReportService.createGroup(name);
vm.newGroupName = ''; vm.newGroupName = '';
...@@ -41,6 +53,16 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer ...@@ -41,6 +53,16 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer
vm.newGroupName = ''; vm.newGroupName = '';
// report's experiments // report's experiments
vm.experiments = $scope.report_experiments; vm.experiments = $scope.report_experiments;
// same analyzer
vm.compatibleExperiments = (analyzer) => {
if(!vm.report.all_experiments){
return {};
}
return Object.entries(vm.report.all_experiments)
.filter(([eName, e]) => analyzer === '' || getAnalyzerFromExpName(eName) === analyzer)
.reduce((o, [eName, e]) => Object.assign(o, { [eName]: e }), {});
};
// a group panel's classes // a group panel's classes
// one panel is the active group ('panel-success') // one panel is the active group ('panel-success')
......
...@@ -37,6 +37,7 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){ ...@@ -37,6 +37,7 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){
class Group { class Group {
constructor (name) { constructor (name) {
this._name = name; this._name = name;
this._analyzer = '';
this._experimentNames = new Set(); this._experimentNames = new Set();
this._reportItemIds = new Set(); this._reportItemIds = new Set();
} }
...@@ -56,6 +57,16 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){ ...@@ -56,6 +57,16 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){
return this._name; return this._name;
} }
// get the analyzer of the experiments in this group
get analyzer () {
return this._analyzer;
}
set analyzer (analyzer) {
console.log(`setting anayzler = ${analyzer}`);
this._analyzer = analyzer;
}
// add an exp to this group // add an exp to this group
addExperiment (expName) { addExperiment (expName) {
return this._experimentNames.add(expName); return this._experimentNames.add(expName);
...@@ -84,7 +95,7 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){ ...@@ -84,7 +95,7 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){
// serializes groups as an object with form: // serializes groups as an object with form:
// { // {
// <group name 1>: <array of exp names for group 1>, // <group name 1>: { experiments: [], reportItemIds: [], analyzer: '' },
// ... // ...
// } // }
reportServiceInstance.serializeGroups = () => { reportServiceInstance.serializeGroups = () => {
...@@ -92,7 +103,8 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){ ...@@ -92,7 +103,8 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){
.map(g => { return { .map(g => { return {
[g.name]: { [g.name]: {
experiments: g.experiments, experiments: g.experiments,
reportItemIds: g.reportItemIds reportItemIds: g.reportItemIds,
analyzer: g.analyzer
} }
}; };
}) })
...@@ -129,20 +141,27 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){ ...@@ -129,20 +141,27 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){
// load group info from the serialized format: // load group info from the serialized format:
// { // {
// <group name 1>: <array of exp names for group 1>, // <group name 1>: { experiments: [], reportItemIds: [], analyzer: '' },
// ... // ...
// } // }
reportServiceInstance.loadGroups = (data) => { reportServiceInstance.loadGroups = (data) => {
if(!data){
return;
}
// wipe data and load groups // wipe data and load groups
groupData.splice(0, groupData.length); groupData.splice(0, groupData.length);
// if there's no group data, create a default one
if(!data || Object.keys(data).length === 0){
reportServiceInstance.createGroup('default');
return;
}
Object.entries(data) Object.entries(data)
.forEach(([groupName, groupData]) => { // sometimes we get an empty string for name for some reason
.filter(([groupName, gData]) => groupName.length > 0)
.forEach(([groupName, gData]) => {
let g = reportServiceInstance.createGroup(groupName); let g = reportServiceInstance.createGroup(groupName);
groupData.experiments.forEach(n => g.addExperiment(n)); g.analyzer = gData.analyzer;
groupData.reportItemIds.forEach(id => g.addReportItem(id)); gData.experiments.forEach(n => g.addExperiment(n));
gData.reportItemIds.forEach(id => g.addReportItem(id));
}); });
}; };
...@@ -152,11 +171,11 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){ ...@@ -152,11 +171,11 @@ angular.module('reportApp').factory('ReportService', ['$http', function($http){
}; };
// add experiment to group // add experiment to group
reportServiceInstance.addExperimentToGroup = (expName, groupName) => { reportServiceInstance.addExperimentToGroup = (expName, groupName, analyzer) => {
checkForGroup(groupName); checkForGroup(groupName);
let group = groupData.find(g => g.name === groupName); let group = groupData.find(g => g.name === groupName);
return group.addExperiment(expName); return group.addExperiment(expName, analyzer);
}; };
// rm experiment from group // rm experiment from group
......
...@@ -102,11 +102,12 @@ ...@@ -102,11 +102,12 @@
<span class="caret"></span> <span class="caret"></span>
</button> </button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li ng-click='groups.addExperimentToGroup(expName, group.name)' ng-repeat='(expName, exp) in groups.experiments'> <li ng-click='groups.addExperimentToGroup(expName, group.name)' ng-repeat='(expName, exp) in groups.compatibleExperiments(group.analyzer)'>
<a href='#'>{$ expName $}</a> <a href='#'>{$ expName $}</a>
</li> </li>
</ul> </ul>
</div> </div>
<p>Group Analyzer: {$ group.analyzer $}</p>
<p>Saved Report Items Associated to Group</p> <p>Saved Report Items Associated to Group</p>
<ul class='list-group' style='margin-top: 1em'> <ul class='list-group' style='margin-top: 1em'>
<li class='list-group-item' ng-repeat='id in group.reportItemIds'> <li class='list-group-item' ng-repeat='id in group.reportItemIds'>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment