============LICENSE_START=======================================================
ONAP CLAMP
================================================================================
- Copyright (C) 2017 AT&T Intellectual Property. All rights
+ Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
reserved.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
limitations under the License.
============LICENSE_END============================================
===================================================================
- ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
-->
<style>
-#deletePolicy{
- height:34px;
- background-color:#dddd;
+#deletePolicy {
+ height: 34px;
+ background-color: #dddd;
}
-.disabled{
+.disabled {
background-color: #dddd;
}
-.fileUpload {
- position: relative;
- overflow: hidden;
- margin: 10px;
-}
-.fileUpload input.upload {
+.modelSearchBox {
position: absolute;
- top: 0;
- right: 0;
- margin: 0;
- padding: 0;
- font-size: 20px;
- cursor: pointer;
- opacity: 0;
- filter: alpha(opacity = 0);
- float: left;
-}
-
-.fileDisplay {
- display: inline-block;
- overflow: hidden;
- float: right;
- margin-left: 0px;
- z-index: initial;
- text-align: center;
- margin-top: 17px;
-}
-
-.modelSearchBox{
- position:absolute;
padding: 25px 12px;
}
-label{
- text-align:right;
- vertical-align:middle;
+label {
+ text-align: right;
+ vertical-align: middle;
}
-.leftPolicyPanel{
+.leftPolicyPanel {
padding: 0 10px 0 0;
}
-#createNewPolicy{
- height:34px;
- width:120px; /*84*/
- background-color:#f2bfab;
+#createNewPolicy {
+ height: 34px;
+ width: 120px; /*84*/
+ background-color: #f2bfab;
}
-.idError{
- color:red;
- padding:50px 0px;
- text-align:center;
- display:none;
+.idError {
+ color: red;
+ padding: 50px 0px;
+ text-align: center;
+ display: none;
}
-.policyPanel{
+.policyPanel {
background-color: #f5f5f5;
padding: 15px 5px 0 5px;
}
-.form-group.clearfix{
- display:-webkit-flex;
- display: flex;
+.form-group.clearfix {
+ display: -webkit-flex;
+ display: flex;
align-items: center;
}
-label{
- margin-bottom:0px;
+label {
+ margin-bottom: 0px;
}
-#policySearch{
+#policySearch {
height: 33px;
font-size: 12px;
padding: 2px 2px 2px 30px;
margin-bottom: 5px;
- width:100%;
+ width: 100%;
}
-#policyTable{
+
+#policyTable {
cursor: pointer;
- width:100%;
+ width: 100%;
}
-#policyTable tr{
+#policyTable tr {
border-bottom: 1px solid #ddd;
border-collapse: collapse;
text-align: left;
font-weight: normal;
}
-#policyTable td{
+#policyTable td {
padding: 8px 10px;
}
-#policyTable tr.highlight{
+#policyTable tr.highlight {
background-color: #f5f5f5;
font-weight: bold;
font-size: 13px;
}
-#policyTableHolder{
- height:200px;
- width: 100%;
- overflow:auto;
+#policyTableHolder {
+ height: 200px;
+ width: 100%;
+ overflow: auto;
}
-
</style>
-<script type="text/javascript">
- function disablefile() {
-
- document.getElementById("fileUpload").disabled = true;
- }
-
- function disableSVN() {
- var selectLength = document.querySelectorAll(".disabled-block-container .tab-close-popup");
- if(selectLength && selectLength.length>0){
- for(var i = 0; i< selectLength.length ; i++){
- selectLength[i].disabled = true;
- }
- }
-
- document.getElementById("schemaLocation").disabled = true;
- document.getElementById("userID").disabled = true;
- document.getElementById("password").disabled = true;
-
- }
-</script>
-
-
- <div attribute-test="policywindowproperties" id="configure-widgets"
- class="disabled-block-container">
+<div attribute-test="policywindowproperties" id="configure-widgets"
+ class="disabled-block-container">
<div attribute-test="policywindowpropertiesh" class="modal-header">
<button type="button" class="close" ng-click="close(false)"
aria-hidden="true" style="margin-top: -3px">×</button>
<h4>Operational Policy</h4>
- </div>
-
-
+ </div>
+
+
<div class="modal-body">
- <div attribute-test="policywindowpropertiesb" class="modal-body row">
-
- <div class="leftPolicyPanel">
- <div class="panel panel-default">
- <i class="glyphicon glyphicon-search modelSearchBox"></i>
- <input type="text" id="policySearch" onkeyup="searchPolicyList()"
- placeholder="Search ...">
- <div id="policyTableHolder">
- <table id="policyTable"></table>
+ <div attribute-test="policywindowpropertiesb" class="modal-body row">
+
+ <div class="leftPolicyPanel">
+ <div class="panel panel-default">
+ <i class="glyphicon glyphicon-search modelSearchBox"></i> <input
+ type="text" id="policySearch" onkeyup="searchPolicyList()"
+ placeholder="Search ...">
+ <div id="policyTableHolder">
+ <table id="policyTable"></table>
+ </div>
</div>
+ <div style="float: left">
+ <button type="button" id="createNewPolicy" class="btn btn-sm">New
+ Policy</button>
+ </span>
+ </div>
+ <div style="float: right">
+ <button type="button" id="deletePolicy"
+ class="btn btn-sm glyphicon glyphicon-trash" disabled></button>
+ </span>
+ </div>
+ <div id="repeatIdError" class="idError">Error: This Policy
+ name is already taken.</div>
+ <div id="newIdError" class="idError">Error: Please rename your
+ new Policy.</div>
+ <div id="spaceError" class="idError">Error: Spaces are not
+ allowed in the ID.</div>
</div>
- <div style="float:left">
- <button type="button" id="createNewPolicy" class="btn btn-sm">New Policy</button></span>
- </div>
- <div style="float:right">
- <button type="button" id="deletePolicy" class="btn btn-sm glyphicon glyphicon-trash" disabled></button></span>
- </div>
- <div id="repeatIdError" class="idError">Error: This Policy name is already taken.</div>
- <div id="newIdError" class="idError">Error: Please rename your new Policy.</div>
- <div id="spaceError" class="idError">Error: Spaces are not allowed in the ID.</div>
- </div>
-
- <div class="panel panel-default col-sm-9 policyPanel" style="display:none;">
- <form id="Timeoutform" class="form-horizontal">
- <div>
- <div class="form-group clearfix row">
- <label class="col-sm-2">Name</label>
- <div class="col-sm-3" style="padding:0px;">
- <input type="text" id="pname" name="pname" maxlength="48" placeholder="Enter Unique Name" class="form-control">
- </div>
-
- <label class="col-sm-1">ID</label>
- <div class="col-sm-1" style="padding:0px;">
- <input onkeydown="return false;" type="text" id="pid" name="pid" class="form-control" readonly>
+
+ <div class="panel panel-default col-sm-9 policyPanel"
+ style="display: none;">
+ <form id="Timeoutform" class="form-horizontal">
+ <div>
+ <div class="form-group clearfix row">
+ <label class="col-sm-2">Name</label>
+ <div class="col-sm-3" style="padding: 0px;">
+ <input type="text" id="pname" name="pname" maxlength="48"
+ placeholder="Enter Unique Name" class="form-control">
+ </div>
+
+ <label class="col-sm-1">ID</label>
+ <div class="col-sm-1" style="padding: 0px;">
+ <input onkeydown="return false;" type="text" id="pid" name="pid"
+ class="form-control" readonly>
+ </div>
+
+ <label for="userID" class="col-sm-3"
+ style="padding-left: 5px; padding-right: 10px;">Overall
+ Time Limit</label>
+ <div class="col-sm-2" style="padding-left: 0px;">
+ <input type="text" maxlength="10"
+ onkeypress="return isNumberKey(event)" class="form-control"
+ id="timeout" name="timeout">
+ </div>
</div>
-
- <label for="userID" class="col-sm-3" style="padding-left:5px;padding-right:10px;">Overall Time Limit</label>
- <div class="col-sm-2" style="padding-left:0px;">
- <input type="text" maxlength="10" onkeypress="return isNumberKey(event)"
- class="form-control" id="timeout" name="timeout">
- </div>
</div>
+ </form>
+ <div class="panel-heading" style="background-color: white;">
+ <ul id="nav_Tabs" class="nav nav-tabs">
+ <li class><a id="add_one_more" href="#desc_tab"><span
+ class="glyphicon glyphicon-plus" aria-hidden="true"></span></a></li>
+ </ul>
</div>
- </form>
- <div class="panel-heading" style="background-color: white;">
- <ul id="nav_Tabs" class="nav nav-tabs">
- <li class><a id="add_one_more" href="#desc_tab"><span
- class="glyphicon glyphicon-plus" aria-hidden="true"></span></a></li>
- </ul>
- </div>
- <div class="panel-body">
- <div class="tab-content">
- <div id="properties_tab" class="tab-pane fade in active"></div>
+ <div class="panel-body">
+ <div class="tab-content">
+ <div id="properties_tab" class="tab-pane fade in active"></div>
+ </div>
</div>
</div>
- </div>
-
- <span id="formSpan" style="display: none">
- <form class="saveProps" class="form-horizontal">
- <div>
- <div class="form-group clearfix" >
- <label class="col-sm-4 control-label" for="recipe">Recipe</label>
- <div class="col-sm-8">
- <select class="form-control" name="recipe" id="recipe" enableFilter="false"></select>
+
+ <span id="formSpan" style="display: none">
+ <form class="saveProps" class="form-horizontal">
+ <div>
+ <div class="form-group clearfix">
+ <label class="col-sm-4 control-label" for="recipe">Recipe</label>
+ <div class="col-sm-8">
+ <select class="form-control" name="recipe" id="recipe"
+ enableFilter="true"></select>
+ </div>
</div>
- </div>
- <div class="form-group clearfix">
- <label for="maxRetries" class="col-sm-4 control-label">
- Max Retries</label>
- <div class="col-sm-8">
- <input type="text" maxlength="5" class="form-control" id="maxRetries"
- onkeypress="return isNumberKey(event)"
- name="maxRetries"> </input>
+ <div class="form-group clearfix">
+ <label for="maxRetries" class="col-sm-4 control-label">
+ Max Retries</label>
+ <div class="col-sm-8">
+ <input type="text" maxlength="5" class="form-control"
+ id="maxRetries" onkeypress="return isNumberKey(event)"
+ name="maxRetries"> </input>
+ </div>
</div>
- </div>
- <div class="form-group clearfix" >
- <label for="retryTimeLimit" class="col-sm-4 control-label" >
- Retry Time Limit</label>
- <div class="col-sm-8">
- <input type="text" maxlength="5" class="form-control" id="retryTimeLimit"
- onkeypress="return isNumberKey(event)"
- name="retryTimeLimit"></input>
+ <div class="form-group clearfix">
+ <label for="retryTimeLimit" class="col-sm-4 control-label">
+ Retry Time Limit</label>
+ <div class="col-sm-8">
+ <input type="text" maxlength="5" class="form-control"
+ id="retryTimeLimit" onkeypress="return isNumberKey(event)"
+ name="retryTimeLimit"></input>
+ </div>
</div>
- </div>
- <div style="display:none;" class="form-group clearfix">
- <label for="_id" class="col-sm-4 control-label">
- PolicyID</label>
- <div class="col-sm-8">
- <input type="text" onkeydown="return false;" class="form-control" id="_id"
- name="_id" value=""></input>
+ <div style="display: none;" class="form-group clearfix">
+ <label for="_id" class="col-sm-4 control-label"> PolicyID</label>
+ <div class="col-sm-8">
+ <input type="text" onkeydown="return false;"
+ class="form-control" id="_id" name="_id" value=""></input>
+ </div>
</div>
- </div>
- <div class="form-group clearfix">
- <label for="parentPolicy" class="col-sm-4 control-label">
- Parent Policy</label>
- <div class="col-sm-8">
- <select class="form-control" id="parentPolicy"
- name="parentPolicy" enableFilter="false"><option value=""></option></select>
+ <div class="form-group clearfix">
+ <label for="parentPolicy" class="col-sm-4 control-label">
+ Parent Policy</label>
+ <div class="col-sm-8">
+ <select class="form-control" id="parentPolicy"
+ name="parentPolicy" enableFilter="true"><option
+ value=""></option></select>
+ </div>
+ </div>
+ <div class="form-group clearfix">
+ <label for="parentPolicyConditions"
+ class="col-sm-4 control-label"> Parent Policy Conditions</label>
+ <div class="col-sm-8">
+ <select class="form-control" id="parentPolicyConditions"
+ name="parentPolicyConditions" multiple></select>
+ </div>
</div>
- </div>
- <div class="form-group clearfix">
- <label for="parentPolicyConditions" class="col-sm-4 control-label">
- Parent Policy Conditions</label>
- <div class="col-sm-8">
- <select class="form-control" id="parentPolicyConditions"
- name="parentPolicyConditions" multiple></select>
+ <div class="form-group clearfix">
+
+ <label for="actor" class="col-sm-4 control-label"> Actor</label>
+ <div class="col-sm-8">
+ <select class="form-control" id="actor" name="actor"></select>
+ </div>
+
+ <label for="payload" class="col-sm-4 control-label">
+ Payload</label>
+ <div class="col-sm-8">
+ <textarea class="form-control" id="recipeInput" name=recipeInput></textarea>
+ </div>
+ </div>
+ <div class="form-group clearfix">
+ <label for="targetType" class="col-sm-4 control-label">
+ Target Type</label>
+ <div class="col-sm-8">
+ <select class="form-control" name="recipeLevel" id="recipeLevel">
+ </select>
+ </div>
+
+ <label for="targetResourceId" class="col-sm-4 control-label">
+ Target ResourceId</label>
+ <div class="col-sm-8">
+ <select class="form-control" name="targetResourceId"
+ id="targetResourceId" enableFilter="true"
+ onchange="changeTargetResourceIdOther();">
+ <option value=""></option>
+ <option value="Other:">Other:</option>
+ </select>
+ </div>
+ <input type="text" style="display: none" class="form-control"
+ id="targetResourceIdOther" name="targetResourceIdOther" value=""></input>
+ </div>
+ <div style="border: 2px dotted gray;">
+ <div class="form-group clearfix">
+ <label for="enableGuardPolicy" class="col-sm-4 control-label">
+ Enable Guard Policy</label>
+ <div class="col-sm-8">
+ <input type="checkbox" class="form-control"
+ name="enableGuardPolicy" id="enableGuardPolicy">
+ </div>
+ <div class="col-sm-8">
+ <label for="guardPolicyType" class="col-sm-4 control-label">
+ Guard Policy Type</label>
+ <select class="form-control"
+ name="guardPolicyType" id="guardPolicyType"
+ onchange="changeGuardPolicyType();">
+ <option value="MinMax">MinMax</option>
+ <option value="FrequencyLimiter">FrequencyLimiter</option>
+ </select>
+ </div>
+ <label for="guardTargets" class="col-sm-4 control-label">Guard
+ targets</label>
+ <div class="col-sm-8">
+ <input class="form-control" name="guardTargets"
+ id="guardTargets" />
+ </div>
+ </div>
+
+ <div class="form-group clearfix" id="minMaxGuardPolicyDiv">
+ <label for="minGuard" class="col-sm-4 control-label">
+ Min Guard</label>
+ <div class="col-sm-8">
+ <input class="form-control" name="minGuard" id="minGuard" />
+ </div>
+ <label for="maxGuard" class="col-sm-4 control-label">
+ Max Guard</label>
+ <div class="col-sm-8">
+ <input class="form-control" name="maxGuard" id="maxGuard" />
+ </div>
+ </div>
+ <div class="form-group clearfix"
+ id="frequencyLimiterGuardPolicyDiv" style="display: none">
+ <label for="limitGuard" class="col-sm-4 control-label">Limit</label>
+ <div class="col-sm-8">
+ <input class="form-control" name="limitGuard" id="limitGuard" />
+ </div>
+ <div class="col-sm-8">
+ <select class="form-control" name="timeUnitsGuard"
+ id="timeUnitsGuard" /> <label for="timeWindowGuard"
+ class="col-sm-4 control-label">Time Window</label>
+ </div>
+ <div class="col-sm-8">
+ <input class="form-control" name="timeWindowGuard"
+ id="timeWindowGuard" />
+ </div>
+ </div>
+ <div class="form-group clearfix">
+ <label for="guardActiveStart" class="col-sm-4 control-label">
+ Guard Active Start</label>
+ <div class="col-sm-8">
+ <input class="form-control" name="guardActiveStart"
+ id="guardActiveStart" />
+ </div>
+ <label for="guardActiveEnd" class="col-sm-4 control-label">
+ Guard Active End</label>
+ <div class="col-sm-8">
+ <input class="form-control" name="guardActiveEnd"
+ id="guardActiveEnd" />
+ </div>
+ </div>
</div>
</div>
- </div>
- </form>
- </span>
- </div>
+ </form>
+ </span>
+ </div>
</div>
<div attribute-test="policywindowpropertiesf" class="modal-footer">
<button ng-click="close(true)" id="close_button"
class="btn btn-primary">Cancel</button>
</div>
-
+
<script>
+
+ function initTargetResourceId() {
+ // Set all the Resource Invariant UUID in the target resource ID list (+Empty and other)
+ Object.keys(vf_Services["shared"]["byVf"]).forEach(function(key){
+ $('#targetResourceId').append($('<option></option>').val(key).html(key));
+ });
+ }
+
+ function changeTargetResourceIdOther() {
+ if ($("#targetResourceId").val()==="Other:") {
+ $("#targetResourceIdOther").show();
+ } else {
+ $("#targetResourceIdOther").hide();
+ $("#targetResourceIdOther").val("");
+ }
+ }
+
+ function changeGuardPolicyType() {
+ console.log("executing GuardPolicyType")
+ console.log("GuardPolicyType value:"+$("#guardPolicyType").val())
+ if ($("#guardPolicyType").val()==="MinMax") {
+ console.log("executing GuardPolicyType")
+ $("#minMaxGuardPolicyDiv").show();
+ $("#frequencyLimiterGuardPolicyDiv").hide();
+ } else if ($("#guardPolicyType").val()==="FrequencyLimiter") {
+ console.log("executing GuardPolicyType")
+ $("#minMaxGuardPolicyDiv").hide();
+ $("#frequencyLimiterGuardPolicyDiv").show();
+ }
+ }
//Basically this method will add a new form. All forms share the same class. When you want one form to show(active form) the other forms get the
// css attribute display:none
$("#add_one_more").click(function(event) {
}
}
$("#pname").val('');
-
+
//load recipes for a chosen policy
function disperseConfig(policyObj, id){
parent_policy={};
parent_policy[num]=el[i][j].value
if(el[i][j].name==='recipe' && el[i][j].value.toString()!==''){
$("#go_properties_tab"+num).text(el[i][j].value)
- }
+ }
+ if(el[i][j].name==="targetResourceIdOther" && el[i][j].value.toString()!=='') {
+ // Add the entry and set it
+ $('#targetResourceId').append($('<option></option>').val($('#targetResourceIdOther').val()).html($('#targetResourceIdOther').val()));
+ $('#targetResourceId').val($('#targetResourceIdOther').val());
+ }
+
}
}
}
$("#formId"+k+" #parentPolicy").change();
}
+ // Now load all component with the right value defined in policyObj JSON
for (headInd in policyObj[id]){
if (!(policyObj[id][headInd].hasOwnProperty("policyConfigurations"))){
$("#" + policyObj[id][headInd].name).val(policyObj[id][headInd].value);
}
}
}
-
+
setMultiSelect();
- if (readOnly||readMOnly){
+ if (readMOnly){
$('select[multiple] option').each(function() {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', true);
});
$('input[value="multiselect-all"]').prop('disabled', true).parent('li').addClass('disabled');
}
-
+ changeGuardPolicyType();
}
-
+
+ function addSelectListen(count) {
+ var onSelectChange = function() {
+ var opselected = this.selectedOptions[0].text;
+
+ if (this.id == "recipe"){
+ if(opselected!==""){
+ var polCount = $(this).closest("[id^='formId']").attr("id").substring(6);
+ $(this).closest(".policyPanel").find("#go_properties_tab"+polCount).text(opselected);
+ } else {
+ $(this).closest("[id^='go_properties_tab']").text("Policy");
+ }
+ }
+
+ if (this.id=="parentPolicy"){
+ var ppCond = $(this).closest("[id^='formId']").find("#parentPolicyConditions");
+ if(opselected==""){
+ ppCond.multiselect("clearSelection");
+ ppCond.multiselect("disable");
+ } else {
+ ppCond.multiselect("enable");
+ }
+ }
+ };
+ $("#formId"+count+" select").each( function () {
+ this.change = onSelectChange;
+ });
+ }
+
//This is ensure there are no repeated keys in the map
function noRepeats(form) {
}
$("#savePropsBtn").click(function(event) {
+ if($("#targetResourceIdOther").is(":visible")) {
+ $('#targetResourceId').append($('<option></option>').val($("#targetResourceIdOther").val()).html($("#targetResourceIdOther").val()))
+ $("#targetResourceId").val($("#targetResourceIdOther").val());
+ }
$(".idError").hide();
if ($("#policyTable .highlight td").html() !== $("#pname").val()){
//repeated name
finalSaveList[tableVal] = allPolicies[tableVal];
}
});
-
+
saveProperties(finalSaveList);
$("#close_button").click();
})
$("#formId" + count).append(form);
$(".formId").not($("#formId" + count)).css("display", "none")
addCustListen(count)
- //addTabListen(count)
+
+ addSelectListen(count);
// This is for when the process is not loading from map but being created
if(!loadingId){
var l=makeid()
$("#add_one_more").click();
}
-
-
- //listener will change the tab name to the recipe
- function addTabListen(count){
-
- // disable parentPolicyConditions when a parentPolicy is not selected
- //don't think this is used..
- /* $("#formId"+count+" #parentPolicy").on("change",function(){
- if($("#formId"+count+" #parentPolicy").val().toString()==""){
- // deselect all options
- $("#formId"+count+" #parentPolicyConditions option:selected").prop("selected", false);
- // disable the select box
- $("#formId"+count+" #parentPolicyConditions").multiselect("disable");
-
- } else {
- $("#formId"+count+" #parentPolicyConditions").multiselect("enable");
-
- }
- }); */
- }
-
+
function addCustListen(count) {
$('#go_properties_tab' + count).click(function(event) {
$("#nav_Tabs li").removeClass("active");
$("#newIdError").show();
return;
}
- if (!(readOnly||readMOnly)){
+ if (!(readMOnly)){
startNextItem();
} else {
if ($("#policyTable .highlight").length == 0){
}
setASDCFields();
+ initTargetResourceId();
//load metrics dropdown
if (elementMap["global"]){
});
}
break;
- } else if (asSel == "enbRecipe"){
- if (vf_Services["policy"][asSel]){
- $.each((vf_Services["policy"][asSel]), function(val, text) {
- $('#recipe').append(
- $('<option></option>').val(val).html(text)
- );
- });
- }
- break;
}
};
};
};
-
//Show table panel only
function expandTable() {
$(".policyPanel").css("display", "none");
$(".policyPanel").css("display", "unset");
}
</script>
-</div>
\ No newline at end of file
+</div>