TOSCA model enhancements
[policy/engine.git] / POLICY-SDK-APP / src / main / webapp / app / policyApp / policy-models / Editor / PolicyTemplateController / DecisionPolicyController.js
index 4b5a990..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', ['$scope', 'PolicyAppService', 'policyNavigator', 'modalService', '$modal', 'Notification', function ($scope, PolicyAppService, PolicyNavigator, 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.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){
@@ -39,13 +47,17 @@ angular.module('abs').controller('decisionPolicyController', ['$scope', 'PolicyA
        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");
        });
@@ -80,6 +92,26 @@ angular.module('abs').controller('decisionPolicyController', ['$scope', 'PolicyA
                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) {
             if (src.hasOwnProperty(key)) obj[key] = src[key];
@@ -166,6 +198,9 @@ angular.module('abs').controller('decisionPolicyController', ['$scope', 'PolicyA
        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 = [];
        }
@@ -178,7 +213,7 @@ angular.module('abs').controller('decisionPolicyController', ['$scope', 'PolicyA
     
     }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 = [];
@@ -187,9 +222,19 @@ angular.module('abs').controller('decisionPolicyController', ['$scope', 'PolicyA
                   $scope.temp.policy.ruleAlgorithmschoices = [];
           }
     }else if($scope.temp.policy.ruleProvider=="GUARD_BL_YAML"){
-          if($scope.temp.policy.yamlparams.blackList.length==0){
-                  $scope.temp.policy.yamlparams.blackList = [];
-          }
+       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 = [];
@@ -215,12 +260,22 @@ angular.module('abs').controller('decisionPolicyController', ['$scope', 'PolicyA
       $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() {
-       var lastItem = $scope.temp.policy.yamlparams.blackList.length-1;
-       $scope.temp.policy.yamlparams.blackList.splice(lastItem);
+    
+    $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}];
@@ -232,6 +287,29 @@ angular.module('abs').controller('decisionPolicyController', ['$scope', 'PolicyA
        $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 }];
     
@@ -260,4 +338,93 @@ angular.module('abs').controller('decisionPolicyController', ['$scope', 'PolicyA
                $scope.temp.policy.attributes = [];
        }
     };
+    
+    $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