Merge "Adds SwaggerUI"
[releng.git] / utils / test / reporting / pages / app / scripts / controllers / table.controller.js
index 8ca1e47..8d494c3 100644 (file)
  * Controller of the opnfvdashBoardAngularApp
  */
 angular.module('opnfvApp')
-    .controller('TableController', ['$scope', '$state', '$stateParams', 'TableFactory', function ($scope, $state, $stateParams, TableFactory) {
-
-        $scope.filterlist = [];
-        $scope.selection = [];
-        $scope.statusList = ["Success", "Warning", "Danger"];
-        $scope.projectList = ["Deployment", "Functest", "Yardstick"];
-        $scope.installerList = ["apex", "compass", "fuel", "joid"];
-        $scope.versionlist = ["Colorado", "Master"];
-        $scope.loopci = ["Daily", "Weekly", "Monthly"];
-        $scope.time = ["10 days", "1 Month"];
-        $scope.tableDataAll = {};
-        $scope.tableInfoAll = {};
-
-
-
-        $scope.scenario =
-            {
-                "scenarios": {
-                    "os-nosdn-kvm-noha": {
-                        "status": "Success",
-                        "installers": {
-                            "apex": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS",
-
-
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "null",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ],
-                            "compass": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ],
-                            "fuel": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ],
-                            "joid": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ]
-                        }
-                    },
-                    "os-nosdn-ovs-ha": {
-                        "status": "Danger",
-                        "installers": {
-                            "apex": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS",
-
-
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ],
-                            "compass": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ],
-                            "fuel": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ],
-                            "joid": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ]
-                        }
-                    },
-                    "os-nosdn-ovs-noha": {
-                        "status": "Warning",
-                        "installers": {
-                            "apex": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS",
-
-
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ],
-                            "compass": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ],
-                            "fuel": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ],
-                            "joid": [
-                                {
-                                    "project": "Deployment",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Functest",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                },
-                                {
-                                    "project": "Yardstick",
-                                    "score": "13/14",
-                                    "status": "SUCCESS"
-                                }
-                            ]
-                        }
+    .controller('TableController', ['$scope', '$state', '$stateParams', '$http', 'TableFactory', '$timeout',
+        function($scope, $state, $stateParams, $http, TableFactory, $timeout) {
+
+            init();
+
+            function init() {
+                $scope.filterlist = [];
+                $scope.selection = [];
+
+                $scope.statusList = [];
+                $scope.projectList = [];
+                $scope.installerList = [];
+                $scope.versionlist = [];
+                $scope.loopList = [];
+                $scope.timeList = [];
+
+                $scope.selectStatus = [];
+                $scope.selectProjects = [];
+                $scope.selectInstallers = [];
+                $scope.selectVersion = null;
+                $scope.selectLoop = null;
+                $scope.selectTime = null;
+
+                $scope.statusClicked = false;
+                $scope.installerClicked = false;
+                $scope.projectClicked = false;
+
+                $scope.scenarios = {};
+
+                $scope.VersionConfig = {
+                    create: true,
+                    valueField: 'title',
+                    labelField: 'title',
+                    delimiter: '|',
+                    maxItems: 1,
+                    placeholder: 'Version',
+                    onChange: function(value) {
+                        $scope.selectVersion = value;
+
+                        getScenarioData();
+
                     }
                 }
-            };
-
-        // var headData = Object.keys($scope.scenario.scenarios.os_nosdn_kvm_noha.installers);
-        // $scope.headData = headData;
-        //construct json
-        function constructJson() {
-
-            var colspan;
-            var InstallerData;
-            var projectsInfo;
-            $scope.tableDataAll["scenario"] = [];
-
-
-            for (var item in $scope.scenario.scenarios) {
-
 
+                $scope.LoopConfig = {
+                    create: true,
+                    valueField: 'title',
+                    labelField: 'title',
+                    delimiter: '|',
+                    maxItems: 1,
+                    placeholder: 'Loop',
+                    onChange: function(value) {
+                        $scope.selectLoop = value;
 
+                        getScenarioData();
 
-                var headData = Object.keys($scope.scenario.scenarios[item].installers);
-                var scenarioStatus = $scope.scenario.scenarios[item].status;
-
-
-                InstallerData = headData;
-                var projectData = [];
-                var datadisplay = [];
-                var projects = [];
-
-
-                for (var j = 0; j < headData.length; j++) {
-
-                    projectData.push($scope.scenario.scenarios[item].installers[headData[j]]);
+                    }
                 }
-                for (var j = 0; j < projectData.length; j++) {
-
-                    for (var k = 0; k < projectData[j].length; k++) {
-                        projects.push(projectData[j][k].project);
-                        var temArray = [];
-                        temArray.push(projectData[j][k].score);
-                        temArray.push(projectData[j][k].project);
-                        temArray.push(headData[j]);
-                        datadisplay.push(temArray);
 
+                $scope.TimeConfig = {
+                    create: true,
+                    valueField: 'title',
+                    labelField: 'title',
+                    delimiter: '|',
+                    maxItems: 1,
+                    placeholder: 'Time',
+                    onChange: function(value) {
+                        $scope.selectTime = value;
+
+                        getScenarioData();
                     }
-
                 }
 
-                colspan = projects.length / headData.length;
-
-                var tabledata = {
-                    scenarioName: item, Installer: InstallerData, projectData: projectData, projects: projects,
-                    datadisplay: datadisplay, colspan: colspan, status: scenarioStatus
-                };
-
-                JSON.stringify(tabledata);
-                $scope.tableDataAll.scenario.push(tabledata);
-
+                getFilters();
             }
 
-
-            projectsInfo = $scope.tableDataAll.scenario[0].projects;
-
-            var tempHeadData = [];
-
-
-
-            for (var i = 0; i < InstallerData.length; i++) {
-                for (var j = 0; j < colspan; j++) {
-                    tempHeadData.push(InstallerData[i]);
-                }
+            function getFilters() {
+                TableFactory.getFilter().get({
+                }).$promise.then(function(response) {
+                    if (response != null) {
+                        $scope.statusList = response.filters.status;
+                        $scope.projectList = response.filters.projects;
+                        $scope.installerList = response.filters.installers;
+                        $scope.versionList = toSelectList(response.filters.version);
+                        $scope.loopList = toSelectList(response.filters.loops);
+                        $scope.timeList = toSelectList(response.filters.time);
+
+                        $scope.selectStatus = copy($scope.statusList);
+                        $scope.selectInstallers = copy($scope.installerList);
+                        $scope.selectProjects = copy($scope.projectList);
+                        $scope.selectVersion = response.filters.version[0];
+                        $scope.selectLoop = response.filters.loops[0];
+                        $scope.selectTime = response.filters.time[0];
+
+                        getScenarioData();
+
+                    } else {
+                    }
+                });
             }
 
-            console.log(tempHeadData);
-
-            var projectsInfoAll = [];
-
-            for (var i = 0; i < projectsInfo.length; i++) {
-                var tempA = [];
-                tempA.push(projectsInfo[i]);
-                tempA.push(tempHeadData[i]);
-                projectsInfoAll.push(tempA);
-
+            function toSelectList(arr){
+                var tempList = [];
+                angular.forEach(arr, function(ele){
+                    tempList.push({'title': ele});
+                });
+                return tempList;
             }
-            console.log(projectsInfoAll);
-
-            $scope.tableDataAll["colspan"] = colspan;
-            $scope.tableDataAll["Installer"] = InstallerData;
-            $scope.tableDataAll["Projects"] = projectsInfoAll;
 
-            console.log($scope.tableDataAll);
-
-        }
-
-        //get json element size
-        function getSize(jsondata) {
-            var size = 0;
-            for (var item in jsondata) {
-                size++;
+            function copy(arr){
+                var tempList = [];
+                angular.forEach(arr, function(ele){
+                    tempList.push(ele);
+                });
+                return tempList;
             }
-            return size;
-        }
 
-        init();
-        function init() {
-            $scope.toggleSelection = toggleSelection;
-
-            constructJson();
-
-        }
-
-        // $scope.test=false;
-
-        var statusListString = $scope.statusList.toString();
-        var projectListString = $scope.projectList.toString();
-        var installerListString = $scope.installerList.toString();
+            function getScenarioData() {
 
+                var data = {
+                    'status': $scope.selectStatus,
+                    'projects': $scope.selectProjects,
+                    'installers': $scope.selectInstallers,
+                    'version': $scope.selectVersion,
+                    'loops': $scope.selectLoop,
+                    'time': $scope.selectTime
+                };
 
-        $scope.colspan=$scope.tableDataAll.colspan;
-        //filter function
-        function filterData() {
+                TableFactory.getScenario(data).then(function(response) {
+                    if (response.status == 200) {
+                        $scope.scenarios = response.data.scenarios;
+                        getScenario();
+                    }
 
+                }, function(error) {
+                });
 
-            $scope.selectInstallers = [];
-            $scope.selectProjects = [];
-            $scope.selectStatus = [];
-            for (var i = 0; i < $scope.selection.length; i++) {
-                if (statusListString.indexOf($scope.selection[i]) > -1) {
-                    $scope.selectStatus.push($scope.selection[i]);
-                }
-                if (projectListString.indexOf($scope.selection[i]) > -1) {
-                    $scope.selectProjects.push($scope.selection[i]);
-                }
-                if (installerListString.indexOf($scope.selection[i]) > -1) {
-                    $scope.selectInstallers.push($scope.selection[i]);
-                }
             }
 
-            $scope.colspan=$scope.selectProjects.length;
-            //when some selection is empty, we set it full
-            if($scope.selectInstallers.length==0){
-                $scope.selectInstallers=$scope.installerList;
+            function getScenario(){
 
+                $scope.project_row = [];
+                angular.forEach($scope.selectInstallers, function(installer){
+                    angular.forEach($scope.selectProjects, function(project){
+                        var temp = {
+                            'installer': installer,
+                            'project': project
+                        }
+                        $scope.project_row.push(temp);
+
+                    });
+                });
+
+
+                $scope.scenario_rows = [];
+                angular.forEach($scope.scenarios, function(scenario, name){
+                    var scenario_row = {
+                        'name': null,
+                        'status': null,
+                        'statusDisplay': null,
+                        'datadisplay': [],
+                    };
+                    scenario_row.name = name;
+                    scenario_row.status = scenario.status;
+
+                    var scenarioStatusDisplay;
+                    if (scenario.status == "success") {
+                        scenarioStatusDisplay = "navy";
+                    } else if (scenario.status == "danger") {
+                        scenarioStatusDisplay = "danger";
+                    } else if (scenario.status == "warning") {
+                        scenarioStatusDisplay = "warning";
+                    }
+                    scenario_row.statusDisplay = scenarioStatusDisplay;
+
+                    angular.forEach($scope.selectInstallers, function(installer){
+                        angular.forEach($scope.selectProjects, function(project){
+                            var datadisplay = {
+                                'installer': null,
+                                'project': null,
+                                'value': null,
+                                'label': null,
+                                'label_value': null
+                            };
+                            datadisplay.installer = installer;
+                            datadisplay.project = project;
+                            datadisplay.value = scenario.installers[installer][project].score;
+
+                            var single_status = scenario.installers[installer][project].status;
+                            if (single_status == "platinium") {
+                                datadisplay.label = 'primary';
+                                datadisplay.label_value = 'P';
+                            } else if (single_status == "gold") {
+                                datadisplay.label = 'danger';
+                                datadisplay.label_value = 'G';
+                            } else if (single_status == "silver") {
+                                datadisplay.label = 'warning';
+                                datadisplay.label_value = 'S';
+                            } else if (single_status == null) {
+                            }
+                            scenario_row.datadisplay.push(datadisplay);
+
+                        });
+                    });
+                    $scope.scenario_rows.push(scenario_row);
+                });
             }
-            if($scope.selectProjects.length==0){
-                $scope.selectProjects=$scope.projectList;
-                $scope.colspan=$scope.tableDataAll.colspan;
-            }
-            if($scope.selectStatus.length==0){
-                $scope.selectStatus=$scope.statusList
-            }
-        }
 
 
-        //find all same element index
-        function getSameElementIndex(array, element) {
-            var indices = [];
-            var idx = array.indexOf(element);
-            while (idx != -1) {
-                indices.push(idx);
-                idx = array.indexOf(element, idx + 1);
+            function clickBase(eleList, ele){
+                var idx = eleList.indexOf(ele);
+                if(idx > -1){
+                    eleList.splice(idx, 1);
+                }else{
+                    eleList.push(ele);
+                }
             }
-            //return indices;
-            var result = { element: element, index: indices };
-            JSON.stringify(result);
-            return result;
-        }
-
-        //delete element in array
-        function deletElement(array, index) {
-            array.splice(index, 1);
 
-        }
+            $scope.clickStatus = function(status){
+                if($scope.selectStatus.length == $scope.statusList.length && $scope.statusClicked == false){
+                    $scope.selectStatus = [];
+                    $scope.statusClicked = true;
+                }
 
+                clickBase($scope.selectStatus, status);
 
-        $scope.VersionOption = [
-            { title: 'Colorado' },
-            { title: 'Master' }
-        ];
-        $scope.VersionConfig = {
-            create: true,
-            valueField: 'title',
-            labelField: 'title',
-            delimiter: '|',
-            maxItems: 1,
-            placeholder: 'Version',
-            onChange: function (value) {
-                checkElementArrayValue($scope.selection, $scope.VersionOption);
-                $scope.selection.push(value);
-                // console.log($scope.selection);
+                if($scope.selectStatus.length == 0 && $scope.statusClicked == true){
+                    $scope.selectStatus = copy($scope.statusList);
+                    $scope.statusClicked = false;
+                }
 
+                getScenarioData();
             }
 
-        }
-
-        $scope.LoopOption = [
-            { title: 'Daily' },
-            { title: 'Weekly' },
-            { title: 'Monthly' }
-        ];
-        $scope.LoopConfig = {
-            create: true,
-            valueField: 'title',
-            labelField: 'title',
-            delimiter: '|',
-            maxItems: 1,
-            placeholder: 'Loop',
-            onChange: function (value) {
-                checkElementArrayValue($scope.selection, $scope.LoopOption);
-                $scope.selection.push(value);
-                // console.log($scope.selection);
+            $scope.clickInstaller = function(installer){
+                if($scope.selectInstallers.length == $scope.installerList.length && $scope.installerClicked == false){
+                    $scope.selectInstallers = [];
+                    $scope.installerClicked = true;
+                }
 
-            }
-        }
+                clickBase($scope.selectInstallers, installer);
 
-        $scope.TimeOption = [
-            { title: '10 days' },
-            { title: '1 month' }
-        ];
-        $scope.TimeConfig = {
-            create: true,
-            valueField: 'title',
-            labelField: 'title',
-            delimiter: '|',
-            maxItems: 1,
-            placeholder: 'Time',
-            onChange: function (value) {
-                checkElementArrayValue($scope.selection, $scope.TimeOption);
-                $scope.selection.push(value);
-                // console.log($scope.selection)
+                if($scope.selectInstallers.length == 0 && $scope.installerClicked == true){
+                    $scope.selectInstallers = copy($scope.installerList);
+                    $scope.installerClicked = false;
+                }
 
+                getScenarioData();
             }
-        }
 
-        //remove element in the array
-        function removeArrayValue(arr, value) {
-            for (var i = 0; i < arr.length; i++) {
-                if (arr[i] == value) {
-                    arr.splice(i, 1);
-                    break;
+            $scope.clickProject = function(project){
+                if($scope.selectProjects.length == $scope.projectList.length && $scope.projectClicked == false){
+                    $scope.selectProjects = [];
+                    $scope.projectClicked = true;
                 }
-            }
-        }
 
-        //check if exist element
-        function checkElementArrayValue(arrayA, arrayB) {
-            for (var i = 0; i < arrayB.length; i++) {
-                if (arrayA.indexOf(arrayB[i].title) > -1) {
-                    removeArrayValue(arrayA, arrayB[i].title);
-                }
-            }
-        }
+                clickBase($scope.selectProjects, project);
 
-        function toggleSelection(status) {
-            var idx = $scope.selection.indexOf(status);
+                if($scope.selectProjects.length == 0 && $scope.projectClicked == true){
+                    $scope.selectProjects = copy($scope.projectList);
+                    $scope.projectClicked = false;
+                }
 
-            if (idx > -1) {
-                $scope.selection.splice(idx, 1);
+                getScenarioData();
             }
-            else {
-                $scope.selection.push(status);
-            }
-            console.log($scope.selection);
-            filterData();
 
         }
-
-    }]);
+    ]);