Merge "Fix issues reported by sonar"
[policy/engine.git] / POLICY-SDK-APP / src / main / webapp / app / policyApp / policy-models / Editor / PolicyTemplateController / DecisionPolicyController.js
index f5932e2..f560f4d 100644 (file)
@@ -1,8 +1,8 @@
 /*-
  * ============LICENSE_START=======================================================
- * ECOMP Policy Engine
+ * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-angular.module('abs').controller('decisionPolicyController', function ($scope, PolicyAppService, modalService, $modal, Notification) {
+angular.module('abs').controller('decisionPolicyController', ['$scope', 'PolicyAppService', 'policyNavigator', 'modalService', '$modal', 'Notification', '$http', function ($scope, PolicyAppService, PolicyNavigator, modalService, $modal, Notification, $http) {
     $("#dialog").hide();
+    
+    $scope.policyNavigator;
     $scope.savebutton = true;
-    $scope.finalPath = null;
+    $scope.refreshCheck = false;
+    $scope.disableOnCreate = false;
+    
+    if(!$scope.temp.policy.editPolicy  && !$scope.temp.policy.readOnly){
+       $scope.disableOnCreate = true;
+       $scope.temp.policy = {
+                       policyType : "Decision"
+       }
+    };
+    
+    $scope.refresh = function(){
+       if($scope.refreshCheck){
+               $scope.policyNavigator.refresh();
+       }
+       $scope.modal('createNewPolicy', true);
+       $scope.temp.policy = "";
+    };
+    
+    $scope.modal = function(id, hide) {
+        return $('#' + id).modal(hide ? 'hide' : 'show');
+    };
 
        if($scope.temp.policy.ruleProvider==undefined){
                $scope.temp.policy.ruleProvider="Custom";
        }
-               
-       PolicyAppService.getData('getDictionary/get_EcompNameDataByName').then(function (data) {
+       
+       if($scope.temp.policy.blackListEntryType==undefined){
+               $scope.temp.policy.blackListEntryType="Use Manual Entry";
+       }
+       
+       PolicyAppService.getData('getDictionary/get_OnapNameDataByName').then(function (data) {
                var j = data;
                $scope.data = JSON.parse(j.data);
                console.log($scope.data);
-               $scope.ecompNameDictionaryDatas = JSON.parse($scope.data.ecompNameDictionaryDatas);
-               console.log($scope.ecompNameDictionaryDatas);
+               $scope.onapNameDictionaryDatas = JSON.parse($scope.data.onapNameDictionaryDatas);
+               console.log($scope.onapNameDictionaryDatas);
        }, function (error) {
                console.log("failed");
        });
@@ -66,7 +92,25 @@ angular.module('abs').controller('decisionPolicyController', function ($scope, P
                console.log("failed");
        });
 
+       PolicyAppService.getData('getDictionary/get_RainyDayDictionaryDataByName').then(function (data) {
+               var j = data;
+               $scope.data = JSON.parse(j.data);
+               console.log($scope.data);
+       $scope.rainyDayDictionaryDatas = JSON.parse($scope.data.rainyDayDictionaryDatas);
+               console.log($scope.rainyDayDictionaryDatas);
+       }, function (error) {
+               console.log("failed");
+       });
        
+    PolicyAppService.getData('getDictionary/get_RainyDayDictionaryData').then(function (data) {
+       var j = data;
+       $scope.data = JSON.parse(j.data);
+       console.log($scope.data);
+       $scope.rainyDayDictionaryDataEntity = JSON.parse($scope.data.rainyDayDictionaryDatas);
+       console.log($scope.rainyDayDictionaryDatasEntity);
+    }, function (error) {
+       console.log("failed");
+    });
 
     function extend(obj, src) {
         for (var key in src) {
@@ -76,6 +120,11 @@ angular.module('abs').controller('decisionPolicyController', function ($scope, P
     }
     
     $scope.saveDecisionPolicy = function(policy){
+       if(policy.itemContent != undefined){
+               $scope.refreshCheck = true; 
+               $scope.policyNavigator = policy.itemContent;
+               policy.itemContent = "";
+       }
        $scope.savebutton = false;
         console.log(policy);
         var uuu = "policycreation/save_policy";
@@ -144,19 +193,53 @@ angular.module('abs').controller('decisionPolicyController', function ($scope, P
    
     if(!$scope.temp.policy.editPolicy  && !$scope.temp.policy.readOnly){
        $scope.temp.policy.attributes = [];
-         $scope.temp.policy.settings = [];
-        $scope.temp.policy.ruleAlgorithmschoices = [];
-    }else{
+       $scope.temp.policy.settings = [];
+       $scope.temp.policy.ruleAlgorithmschoices = [];
+       if(!$scope.temp.policy.yamlparams){
+               $scope.temp.policy.yamlparams = {};
+       }
+       if(!$scope.temp.policy.yamlparams.targets){
+               $scope.temp.policy.yamlparams.targets = [];
+       }
+       if(!$scope.temp.policy.yamlparams.blackList){
+               $scope.temp.policy.yamlparams.blackList = [];
+       }
+       if(!$scope.temp.policy.rainyday){
+               $scope.temp.policy.rainyday = {};
+       }
+       if(!$scope.temp.policy.rainyday.treatmentTableChoices){
+               $scope.temp.policy.rainyday.treatmentTableChoices = [];
+       }
+    
+    }else if($scope.temp.policy.ruleProvider=="Custom"){
           if($scope.temp.policy.attributes.length == 0){
-                  $scope.temp.policy.attributes = [];
+                  $scope.temp.policy.attributes = [];    
           }
           if($scope.temp.policy.settings.length == 0){
                   $scope.temp.policy.settings = [];
           }
-          if($scope.temp.policy.ruleAlgorithmschoices.length == 0){
+          if($scope.temp.policy.ruleAlgorithmschoices == null || $scope.temp.policy.ruleAlgorithmschoices.length == 0){
                   $scope.temp.policy.ruleAlgorithmschoices = [];
           }
-   }
+    }else if($scope.temp.policy.ruleProvider=="GUARD_BL_YAML"){
+       if($scope.temp.policy.yamlparams.blackList == null || $scope.temp.policy.yamlparams.blackList.length==0){
+               $scope.temp.policy.yamlparams.blackList = [];
+       }
+       if($scope.temp.policy.blackListEntries == null || $scope.temp.policy.blackListEntries.length==0){
+               $scope.temp.policy.blackListEntries = [];
+       }
+       $scope.blackListEntries = [];
+       $scope.temp.policy.appendBlackListEntries = [];
+       $scope.blackListEntries = arrayUnique($scope.temp.policy.blackListEntries.concat($scope.temp.policy.yamlparams.blackList));
+    }else if($scope.temp.policy.ruleProvider=="GUARD_YAML"){
+       if($scope.temp.policy.yamlparams.targets.length==0){
+                  $scope.temp.policy.yamlparams.targets = [];
+               }
+    }else if($scope.temp.policy.ruleProvider=="Rainy_Day"){
+       if($scope.temp.policy.rainyday.treatmentTableChoices == null || $scope.temp.policy.rainyday.treatmentTableChoices.length == 0){
+               $scope.temp.policy.rainyday.treatmentTableChoices = [];
+       }
+    }
     $scope.attributeDatas = [{"attributes" : $scope.temp.policy.attributes}];
     $scope.addNewChoice = function() {
       var newItemNo = $scope.temp.policy.attributes.length+1;
@@ -167,7 +250,6 @@ angular.module('abs').controller('decisionPolicyController', function ($scope, P
       $scope.temp.policy.attributes.splice(lastItem);
     };
     
-  
     $scope.settingsDatas = [{"settings" : $scope.temp.policy.settings}];
     $scope.addNewSettingsChoice = function() {
       var newItemNo = $scope.temp.policy.settings.length+1;
@@ -178,6 +260,56 @@ angular.module('abs').controller('decisionPolicyController', function ($scope, P
       $scope.temp.policy.settings.splice(lastItem);
     };
     
+    $scope.addNewTarget = function(){
+       $scope.temp.policy.yamlparams.targets.push('');
+    };
+    $scope.removeTarget = function(){
+       var lastItem = $scope.temp.policy.yamlparams.targets.length-1;
+       $scope.temp.policy.yamlparams.targets.splice(lastItem);
+    };
+    
+    $scope.addNewBL = function() {
+       $scope.temp.policy.yamlparams.blackList.push('');
+    };
+    
+    $scope.removeBL = function(id) {
+       $scope.temp.policy.yamlparams.blackList = $scope.temp.policy.yamlparams.blackList.filter(function (obj){
+                       return obj !== id;
+               });
+    };
+    
+    $scope.treatmentDatas = [{"treatmentValues" : $scope.temp.policy.rainyday.treatmentTableChoices}];
+    $scope.addNewTreatment = function() {
+       $scope.temp.policy.rainyday.treatmentTableChoices.push({});
+    };
+    $scope.removeTreatment = function() {
+       var lastItem = $scope.temp.policy.rainyday.treatmentTableChoices.length-1;
+       $scope.temp.policy.rainyday.treatmentTableChoices.splice(lastItem);
+    };
+    
+       $scope.workstepDictionaryDatas = [];
+       $scope.getWorkstepValues = function(bbidValue){
+               for (var i = 0; i < $scope.rainyDayDictionaryDataEntity.length; ++i) {
+           var obj = $scope.rainyDayDictionaryDataEntity[i];
+           if (obj.bbid == bbidValue){
+               $scope.workstepDictionaryDatas.push(obj.workstep);
+           }
+       }
+       };
+       
+       $scope.allowedTreatmentsDatas = [];
+       $scope.getTreatmentValues = function(bbidValue, workstepValue){
+               for (var i = 0; i < $scope.rainyDayDictionaryDataEntity.length; ++i) {
+           var obj = $scope.rainyDayDictionaryDataEntity[i];
+           if (obj.bbid == bbidValue && obj.workstep == workstepValue){
+               var splitAlarm = obj.treatments.split(',');
+               for (var j = 0; j < splitAlarm.length; ++j) {
+                       $scope.allowedTreatmentsDatas.push(splitAlarm[j]);
+               }
+           }
+       }       
+       };
+    
     $scope.ItemNo = 0;
     $scope.ruleAlgorithmDatas = [{"ruleAlgorithms" : $scope.temp.policy.ruleAlgorithmschoices }];
     
@@ -206,4 +338,93 @@ angular.module('abs').controller('decisionPolicyController', function ($scope, P
                $scope.temp.policy.attributes = [];
        }
     };
-});
\ No newline at end of file
+    
+    $scope.importButton = true;
+    var fd;
+       $scope.uploadBLFile = function(files) {
+               fd = new FormData();
+               fd.append("file", files[0]);
+               var fileExtension = files[0].name.split(".")[1];
+               if(fileExtension == "xls"){
+                       $scope.importButton = false;
+                       $scope.$apply();
+               }else{
+                       Notification.error("Upload the BlackList file which extends with .xls format.");
+               }
+       };
+       
+       function arrayUnique(array) {
+           var a = array.concat();
+           for(var i=0; i<a.length; ++i) {
+               for(var j=i+1; j<a.length; ++j) {
+                   if(a[i] === a[j])
+                       a.splice(j--, 1);
+               }
+           }
+           return a;
+       }
+       
+       $scope.submitUpload = function(){
+               $http.post("policycreation/importBlackListForDecisionPolicy", fd,  {
+                       withCredentials: false,
+                       headers: {'Content-Type': undefined},
+                       transformRequest: angular.identity
+               }).success(function(data){
+                       $scope.data = JSON.parse(data.data);
+                       $scope.temp.policy.blackListEntries = $scope.data.blackListEntries;
+                       if($scope.temp.policy.blackListEntries[0] !== "error"){
+                               $scope.blackListEntries = arrayUnique($scope.temp.policy.blackListEntries.concat($scope.temp.policy.yamlparams.blackList));
+                               $scope.temp.policy.appendBlackListEntries = $scope.data.appendBlackListEntries;
+                               $scope.blackListEntries = $scope.blackListEntries.filter(function (obj){
+                                       return !$scope.temp.policy.appendBlackListEntries.includes(obj);
+                               });
+                               if($scope.blackListEntries.length == 0){
+                                       $scope.validateButton = true;
+                                       Notification.error("Black Lists are empty. Minimum one entry required.");
+                               }else{
+                                       $scope.temp.policy.blackListEntries = $scope.blackListEntries;
+                                       Notification.success("Blacklist File Uploaded Successfully.");
+                                       $scope.validateButton = false;
+                                       $scope.importButton = true;
+                               }
+                       }else{
+                                Notification.error("Blacklist File Upload Failed." + $scope.temp.policy.blackListEntries[1]);
+                       }
+               }).error(function(data){
+                        Notification.error("Blacklist File Upload Failed.");
+               });
+       };
+       
+       $scope.initializeBlackList = function(){
+               if($scope.temp.policy.blackListEntryType === "Use File Upload"){
+                        $scope.validateButton = true;  
+               } else {
+                        $scope.validateButton = false; 
+               }
+               $("#importFile").val('');
+       };
+       
+       $scope.exportBlackListEntries = function(){
+               var uuu = "policycreation/exportDecisionBlackListEntries";
+               var postData={policyData: $scope.temp.policy, date : $scope.temp.model.modifiedDate, version : $scope.temp.model.version};
+               $.ajax({
+                       type : 'POST',
+                       url : uuu,
+                       dataType: 'json',
+                       contentType: 'application/json',
+                       data: JSON.stringify(postData),
+                       success : function(data){
+                               $scope.$apply(function(){
+                                       $scope.data=data.data;
+                                       var url = '../' + $scope.data;
+                                       window.location = url;
+                                       Notification.success("BlackList Entries Exported Successfully.");
+                               });
+                               console.log($scope.data);
+                       },
+                       error : function(data){         
+                               Notification.error("Error Occured while Exporting BlackList Entries.");
+                       }
+               });
+       };      
+}]);
\ No newline at end of file