Validate ids
[clamp.git] / src / main / resources / META-INF / resources / designer / scripts / OperationalPolicyCtrl.js
index 0cf4c2e..806cfea 100644 (file)
@@ -39,6 +39,8 @@ app
            $scope.number = 0;
            $scope.clname = "";
            $scope.guard_ids = [];
+           $scope.duplicated = false;
+
            function getAllFormId() {
 
                    return Array.from(document.getElementsByClassName("formId"));
@@ -179,7 +181,6 @@ app
                    console.log("load properties to op policy");
                    // Set the header
                    $.each($('#operationalPolicyHeaderForm').find('.form-control'), function() {
-
                            $(this).val(allPolicies['operational_policy']['controlLoop'][this.id]);
                    });
                    // Set the sub-policies
@@ -191,11 +192,15 @@ app
                                    $("#formId" + formNum + " .policyProperties").find("#" + opPolicyPropValue.id).val(
                                    allPolicies['operational_policy']['policies'][opPolicyElemIndex][opPolicyPropValue.id]);
                            });
+
+                           // Initial TargetResourceId options
+                           initTargetResourceIdOptions(allPolicies['operational_policy']['policies'][opPolicyElemIndex]['target']['type'], formNum);
                            $.each($('.policyTarget').find('.form-control'), function(opPolicyTargetPropIndex, opPolicyTargetPropValue) {
 
                                    $("#formId" + formNum + " .policyTarget").find("#" + opPolicyTargetPropValue.id).val(
                                    allPolicies['operational_policy']['policies'][opPolicyElemIndex]['target'][opPolicyTargetPropValue.id]);
                            });
+
                            // update the current tab label
                            $("#go_properties_tab" + formNum).text(
                            allPolicies['operational_policy']['policies'][opPolicyElemIndex]['id']);
@@ -211,60 +216,99 @@ app
                                                    $("#formId" + formNum + " .guardProperties").find("#" + guardPropElemValue.id).val(
                                                    guardElemValue[guardPropElemValue.id]);
                                            });
+                                           iniGuardPolicyType(guardElemId, formNum);
                                            // And finally enable the flag
                                            $("#formId" + formNum + " #enableGuardPolicy").prop("checked", true);
                                    }
                            });
                    });
            }
-           $scope.initTargetResourceId = function(event) {
-               var formNum = $(event.target).closest('.formId').attr('id').substring(6);
-               
-                   var type = $(event.target).val();
-                   var recipe = $("#formId" + formNum + "#recipe").val();
-                   $("#formId" + formNum + " #modelName").val("");
-                   $("#formId" + formNum + " #modelInvariantId").val("");
-                   $("#formId" + formNum + " #modelVersionId").val("");
-                   $("#formId" + formNum + " #modelVersion").val("");
-                   $("#formId" + formNum + " #modelCustomizationId").val("");
-                   $("#formId" + formNum + " #resourceId").empty();
-                   $("#formId" + formNum + " #resourceId").append($('<option></option>').val("").html("-- choose an option --"));
-                   if (type == "VM" || type == "" || type == "VNF") {
-                           $("#formId" + formNum + " #metadata *").prop('disabled', true);
+           function iniGuardPolicyType (guardPolicyId, formNum) {
+                   if(guardPolicyId.indexOf('guard.minmax.') !== -1) {
+                               $("#formId" + formNum + " #minMaxGuardPolicyDiv").show();
+                               $("#formId" + formNum + " #frequencyLimiterGuardPolicyDiv").hide();
+                               $("#formId" + formNum + " #guardPolicyType").val("GUARD_MIN_MAX");
+                   } else if (guardPolicyId.indexOf('guard.frequency.') !== -1) {
+                       $("#formId" + formNum + " #minMaxGuardPolicyDiv").hide();
+                           $("#formId" + formNum + " #frequencyLimiterGuardPolicyDiv").show();
+                           $("#formId" + formNum + " #guardPolicyType").val("GUARD_YAML");
                    }
+           }
+           function initTargetResourceIdOptions (targetType, formNum) {
+                   var recipe = $("#formId" + formNum + "#recipe").val();
+                   $("#formId" + formNum + " #resourceID").empty();
+                   $("#formId" + formNum + " #resourceID").append($('<option></option>').val("").html("-- choose an option --"));
+
                    var resourceVnf = getResourceDetailsVfProperty();
-                   if (type == "VNF" && (null !== resourceVnf || undefined !== resourceVnf)) {
+                   if (targetType == "VNF" && (null !== resourceVnf || undefined !== resourceVnf)) {
                            for ( var prop in resourceVnf) {
                                    var name = resourceVnf[prop]["name"];
-                                   $("#formId" + formNum + " #resourceId").append($('<option></option>').val(name).html(name));
+                                   $("#formId" + formNum + " #resourceID").append($('<option></option>').val(name).html(name));
                            }
                    }
                    var resourceVFModule = getResourceDetailsVfModuleProperty();
-                   if (type == "VFModule" && (null !== resourceVFModule || undefined !== resourceVFModule)) {
+                   if (targetType == "VFMODULE" && (null !== resourceVFModule || undefined !== resourceVFModule)) {
                            if (recipe == 'VF Module Create' || recipe == 'VF Module Delete') {
                                    for ( var prop in resourceVFModule) {
                                            if (resourceVFModule[prop]["isBase"] == false) {
-                                                   $("#formId" + formNum + " #resourceId").append($('<option></option>').val(resourceVFModule[prop]["vfModuleModelName"]).html(resourceVFModule[prop]["vfModuleModelName"]));
+                                                   $("#formId" + formNum + " #resourceID").append($('<option></option>').val(resourceVFModule[prop]["vfModuleModelName"]).html(resourceVFModule[prop]["vfModuleModelName"]));
                                            }
                                    }
                            } else {
                                    for ( var prop in resourceVFModule) {
-                                           $("#formId" + formNum + " #resourceId").append($('<option></option>').val(resourceVFModule[prop]["vfModuleModelName"]).html(resourceVFModule[prop]["vfModuleModelName"]));
+                                           $("#formId" + formNum + " #resourceID").append($('<option></option>').val(resourceVFModule[prop]["vfModuleModelName"]).html(resourceVFModule[prop]["vfModuleModelName"]));
                                    }
                            }
                    }
            }
+
+           function initTargetModelAttributes (formNum) {
+                   $("#formId" + formNum + " #modelName").val("");
+                   $("#formId" + formNum + " #modelInvariantId").val("");
+                   $("#formId" + formNum + " #modelVersionId").val("");
+                   $("#formId" + formNum + " #modelVersion").val("");
+                   $("#formId" + formNum + " #modelCustomizationId").val("");
+           }
+
+           $scope.initTargetResourceId = function(event) {
+               var formNum = $(event.target).closest('.formId').attr('id').substring(6);
+               initTargetModelAttributes(formNum);
+                   var type = $(event.target).val();
+                   initTargetResourceIdOptions(type, formNum);
+           }
+
+           $scope.changeGuardId = function(formItemActive) {
+                   if (formItemActive === undefined) {
+                           formItemActive = searchActiveFormId();
+                           if (formItemActive === undefined) {
+                               return;
+                           }
+                   }
+                   var oldValue = $("#" + formItemActive.id + " .guardProperties #id").val();
+                   // remove old prefix
+                   if(oldValue.indexOf('guard.minmax.') !== -1) {
+                       oldValue = oldValue.substr(oldValue.indexOf('guard.minmax.') + 13);
+                   } else if (oldValue.indexOf('guard.frequency.') !== -1) {
+                       oldValue = oldValue.substr(oldValue.indexOf('guard.frequency.') + 16);
+                   }
+
+                   var prefix = "guard.";
+                   if ($("#" + formItemActive.id + " #guardPolicyType").val() === "GUARD_MIN_MAX") {
+                       prefix = prefix + "minmax.";
+                   } else if ($("#" + formItemActive.id + " #guardPolicyType").val() === "GUARD_YAML") {
+                       prefix = prefix + "frequency.";
+                   }
+                   $("#" + formItemActive.id + " .guardProperties #id").val(prefix+oldValue);
+           }
+
            $scope.changeTargetResourceId = function(event) {
                    var formNum = $(event.target).closest('.formId').attr('id').substring(6);
-                   $("#formId" + formNum +" #modelName").val("");
-                   $("#formId" + formNum +" #modelInvariantId").val("");
-                   $("#formId" + formNum +" #modelVersionId").val("");
-                   $("#formId" + formNum +" #modelVersion").val("");
-                   $("#formId" + formNum +" #modelCustomizationId").val("");
+                   initTargetModelAttributes(formNum);
+
                    var resourceVFModule = getResourceDetailsVfModuleProperty();
                    var type = $("#formId" + formNum +" #type").val();
                    var recipe = $("#formId" + formNum +" #recipe").val();
-                   if (type == "VFModule" && (null !== resourceVFModule || undefined !== resourceVFModule)
+                   if (type == "VFMODULE" && (null !== resourceVFModule || undefined !== resourceVFModule)
                    && (recipe == 'VF Module Create' || recipe == 'VF Module Delete')) {
                            for ( var prop in resourceVFModule) {
                                    if (prop ==  $(event.target).val()) {
@@ -292,6 +336,7 @@ app
                            $("#" + formItemActive.id + " #minMaxGuardPolicyDiv").hide();
                            $("#" + formItemActive.id + " #frequencyLimiterGuardPolicyDiv").show();
                    }
+                   $scope.changeGuardId(formItemActive);
            }
            $scope.initPolicySelect = function() {
 
@@ -357,15 +402,22 @@ app
                    $($("#formId" + formNum + " #actor")[1]).val($(event.target).val());
            }
            // When we change the name of a policy
-           $scope.updateTabLabel = function(event) {
-
-                   // update policy id structure
-                   var formNum = $(event.target).closest('.formId').attr('id').substring(6);
-                   $scope.policy_ids.splice($scope.policy_ids.indexOf($("#formId" + formNum + " #id").val()), 1);
-                   $scope.policy_ids.push($(event.target).val());
-                   // Update the tab now
-                   $("#go_properties_tab" + formNum).text($(event.target).val());
-           }
+               $scope.updateTabLabel = function (event) {
+
+                       // update policy id structure
+                       var formNum = $(event.target).closest('.formId').attr('id').substring(6);
+                       var policyId = $(event.target).val();
+                       if ($scope.policy_ids.includes(policyId)) {
+                               console.log("Duplicated ID, cannot proceed");
+                               $scope.duplicated = true;
+                       } else {
+                               $scope.duplicated = false;
+                               $scope.policy_ids.splice($scope.policy_ids.indexOf($("#formId" + formNum + " #id").val()), 1);
+                               $scope.policy_ids.push($(event.target).val());
+                               // Update the tab now
+                               $("#go_properties_tab" + formNum).text($(event.target).val());
+                       }
+               };
            $scope.close = function() {
 
                    console.log("close");