2 ============LICENSE_START=======================================================
4 ================================================================================
5 Copyright (C) 2017 AT&T Intellectual Property. All rights
7 ================================================================================
8 Licensed under the Apache License, Version 2.0 (the "License");
9 you may not use this file except in compliance with the License.
10 You may obtain a copy of the License at
12 http://www.apache.org/licenses/LICENSE-2.0
14 Unless required by applicable law or agreed to in writing, software
15 distributed under the License is distributed on an "AS IS" BASIS,
16 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 See the License for the specific language governing permissions and
18 limitations under the License.
19 ============LICENSE_END============================================
20 ===================================================================
21 ECOMP is a trademark and service mark of AT&T Intellectual Property.
28 background-color:#f2bfab;
33 background-color:#dddd;
42 .fileUpload input.upload {
51 filter: alpha(opacity = 0);
56 display: inline-block;
73 background-color: #f5f5f5;
75 margin: 15px 15px 0 0;
80 #tcaEditHolder #properties_tab>div+div {
95 .tcaParentItems label{
105 border-bottom: 1px solid #ddd;
106 border-collapse: collapse;
116 #tcaTable tr.highlight{
117 background-color: #f5f5f5;
130 <script type="text/javascript">
131 function disablefile() {
133 document.getElementById("fileUpload").disabled = true;
137 function disableSVN() {
138 var selectLength = document.querySelectorAll(".disabled-block-container .tab-close-popup");
139 if(selectLength && selectLength.length>0){
140 for(var i = 0; i< selectLength.length ; i++){
141 selectLength[i].disabled = true;
145 document.getElementById("schemaLocation").disabled = true;
146 document.getElementById("userID").disabled = true;
147 document.getElementById("password").disabled = true;
153 <div id="configure-widgets" class="disabled-block-container">
154 <div class="modal-header">
155 <button type="button" class="close" ng-click="close(false)"
156 aria-hidden="true" style="margin-top: -3px">×</button>
157 <h4>TCA Micro Services</h4>
159 <div class="modal-body">
160 <div style="height: 10px"></div>
161 <div class="panel panel-default" id="panelHolder">
163 <span id="formSpan" style="display:none;">
164 <div class="panel-body">
166 <form class="tcaParentItems">
168 <div class="col-sm-8 form-group">
169 <label class="col-sm-3"> Name </label>
170 <div class="col-sm-9" style="padding:0px;">
171 <input class="form-control" type="text" maxlength="48" id="tname" name="tname"></input>
175 <div class="col-sm-8 form-group" style="display:none;">
176 <label class="col-sm-3"> UUID </label>
177 <div class="col-sm-9" style="padding:0px;">
178 <input class="form-control" onkeydown="return false;" type="text" id="tuuid" name="tuuid"></input>
183 <div class="col-sm-8 form-group">
184 <label class="col-sm-3"> Policy </label>
185 <div class="col-sm-9" style="padding:0px;">
186 <select name="tcaPol" id="tcaPol" enableFilter="true"></select>
189 <div class="col-sm-8 form-group">
190 <label class="col-sm-3">EventName</label>
191 <div class="col-sm-9" style="padding:0px;">
192 <select name="eventName" id="eventName" enableFilter="true"></select>
196 <div class="col-sm-8 form-group" style="display:none;">
197 <label class="col-sm-3"> Policy ID </label>
198 <div class="col-sm-9" style="padding:0px;">
199 <input class="form-control" onkeydown="return false;" type="text" id="tcaPolId" name="tcaPolId"></input>
206 <div class="tcaBody row">
207 <div class="col-sm-5" style="padding:0px 5px; margin: 15px;">
208 <div class="panel panel-default" id="tcaTableHolder">
209 <table id="tcaTable">
212 <div id="tcaError" class="tcaErr">Error: Please define/delete this new threshold</div>
213 <div id="tcaUnique" class="tcaErr">Error: Duplicate Set Name Found</div>
214 <div style="float:left">
215 <button type="button" id="createNewThresh" class="btn btn-sm">New Threshold</button>
217 <div style="float:right">
218 <button type="button" id="deleteThresh" class="btn btn-sm glyphicon glyphicon-trash" disabled></button>
223 <div id="tcaEditHolder" class="panel panel-default col-sm-6">
224 <div class="tab-content">
225 <div id="properties_tab" class="form-vertical">
227 <label class="control-label">Metric</label>
229 <select id="fieldPathM" name="fieldPathM"></select>
233 <label class="control-label">Operator</label>
235 <select id="operator" name="operator"></select>
239 <label class="control-label">Threshold</label>
241 <input type="text" maxlength="10" class="form-control" name="threshold"
242 onkeypress="return isNumberKey(event)" id="threshold"></input>
246 <label class="control-label">Control Loop Schema</label>
248 <select id="controlLoopSchema" name="controlLoopSchema"></select>
252 <label class="control-label">Closed Loop Event Status</label>
254 <select id="closedLoopEventStatus" name="closedLoopEventStatus"></select>
269 <div class="modal-footer">
270 <!--<button ng-click="reset()" class="btn btn-primary" style="float:left">Reset</button>-->
271 <button id="savePropsBtn" class="btn btn-primary">Close</button>
272 <button ng-click="close(true)" id="close_button"
273 class="btn btn-primary">Cancel</button>
276 <script language="javascript">
277 // helper that make jquery objects visibles or invisible
278 // to use instead of show to keep placeholder size correct
279 jQuery.fn.visible = function() {
280 return this.css('visibility', 'visible');
282 jQuery.fn.invisible = function() {
283 return this.css('visibility', 'hidden');
286 var generateTUUID = function(count){
287 var d = new Date().getTime();
288 var tuuid = 'xxxxxxxx-xxxx-txxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function(c){
289 var r = (d + Math.random()*16)%16 | 0;
290 d = Math.floor(d/16);
291 return (c == 'x' ? r : (r*0x3|0*8)).toString(16);
293 $("#formId" + count + " #tuuid").val(tuuid);
297 var propertiesToString = function(formIdNum) {
298 return $('#formId'+formIdNum+' #fieldPathM').find(':selected').text() + ' ' +
299 $('#formId'+formIdNum+' #operator').val() + ' ' +
300 $('#formId'+formIdNum+' #threshold').val() + ' ' +
301 $('#formId'+formIdNum+' #controlLoopSchema').val() + ' ' +
302 $('#formId'+formIdNum+' #closedLoopEventStatus').val();
305 loadPropertyWindow("tca");
307 //load dropdown with policy options
308 if (typeof allPolicies !== "undefined"){
309 $.each(Object.keys(allPolicies), function(val, text) {
310 $('#tcaPol').append($('<option></option>').val(text).html(text));
312 } else if (typeof elementMap !== "undefined"){
313 for (key in elementMap){
314 if (key.indexOf("Policy")>-1){
315 $.each(Object.keys(elementMap[key]), function(val, text){
317 $('<option></option>').val(text).html(text)
324 var fieldPathMLabel2Value = function(label) {
325 return Object.keys(defaults_props['tca']['fieldPathM']).find(key => defaults_props['tca']['fieldPathM'][key] == label)
327 var fieldPathMValue2Label = function(value) {
328 return defaults_props['tca']['fieldPathM'][value];
333 var arr = elementMap[lastElementSelected];
335 if (arr !== undefined) {
337 var num = add_one_more();
338 for (var i=0; i< arr[x].length; i++){
340 if (arr[x][i].hasOwnProperty('serviceConfigurations')){
341 for (var j=0; j<arr[x][i]["serviceConfigurations"].length; j++){
342 $("#formId" + num + " #tcaTable").prepend("<tr><td>"
343 +fieldPathMValue2Label(arr[x][i]["serviceConfigurations"][j][0])+ " "
344 +(Object.keys(defaults_props['tca']['operator']).find(key => defaults_props['tca']['operator'][key] == (arr[x][i]["serviceConfigurations"][j][1])))+ " "
345 +arr[x][i]["serviceConfigurations"][j][2]+" "
346 +arr[x][i]["serviceConfigurations"][j][3]+" "
347 +arr[x][i]["serviceConfigurations"][j][4]+"</td></tr>");
350 $("#formId" + num + " #"+arr[x][i].name).val(arr[x][i].value);
353 $('#go_properties_tab'+num).text($('#formId' +num+ ' #tname').val());
354 $("#formId"+num + " #properties_tab").invisible();
358 $("#savePropsBtn").click(function(event) {
360 if (($('#formId'+num+' #tcaTable .highlight').length > 0 ) &&
361 (!($('#formId'+num+' #threshold').val()) || !($('#formId'+num+' #fieldPathM').val())) ) {
362 $('#formId'+num+' #tcaError').show();
365 $('#formId'+num+' .tcaErr').hide();
366 if ($('#formId'+num+' #tcaTable .highlight').length > 0){
367 $('#formId'+num+' #tcaTable .highlight td').text(propertiesToString(num));
370 $('.formId').each(function(){
371 var count = $(this).attr('id').slice(-1);
372 var header = $(this).find('.tcaParentItems').serializeArray();
375 $('#formId' +count+' #tcaTable tr').each(function(){
376 $('td', this).each(function(){
377 var splitTd = $(this).text().split(' ');
378 splitTd[0]=fieldPathMLabel2Value(splitTd[0]);
379 splitTd[1]=defaults_props['tca']['operator'][splitTd[1]];
380 sconfa.push(splitTd);
384 var polSel = $(this).find('.tcaParentItems #tcaPol').val();
385 $.grep(header, function(e,i){
386 if (e.name == "tcaPolId"){
388 if (typeof allPolicies !== "undefined"){
389 header[i]["value"] = allPolicies[polSel][1]["value"];
390 } else if (typeof elementMap !== "undefined"){
391 for (key in elementMap){
392 if (key.indexOf("Policy")>-1){
393 header[i]["value"] = elementMap[key][polSel][1]["value"];
398 header[i]["value"]="";
403 sconf["serviceConfigurations"]=sconfa;
405 saveP[$(this).find('.tcaParentItems #tname').val()] = header;
408 saveProperties(saveP);
409 $("#close_button").click();
413 function uniquet(arr) {
415 for (var i=0, l=arr.length; i<l; i++){
416 if (a.indexOf(arr[i]) === -1 && arr[i] !== ''){
420 if (a.length==arr.length){
427 function add_one_more(){
428 $("#nav_Tabs li").removeClass("active");
429 var form=$($("#formSpan").children()[0]).clone();
431 if($(".formId").length>0){
434 for(var i=0;i<s.length; i++){
435 if(parseInt($(s[i]).attr("id").substring(6))>greatest){
436 greatest=parseInt($(s[i]).attr("id").substring(6))
440 $("#panelHolder").append(('<span class="formId" id="formId'+count+'"></span>'));
443 $("#panelHolder").append('<span class="formId" id="formId1"></span>');
446 $("#add_one_more").parent().before(' <li class="active"><a id="go_properties_tab'+count+'">New_Set</a><button id="tab_close'+count+'" type="button" class="close tab-close-popup" aria-hidden="true" style="margin-top: -30px;margin-right: 5px">×</button></li>');
447 $("#formId"+count).append(form);
448 $('#formId'+count+ ' #properties_tab').invisible();
449 $(".formId").not($("#formId"+count)).css("display","none");
450 addCustListen(count);
455 function isNumberKey(event){
456 var charCode = (event.which) ? event.which : event.keyCode
457 if (charCode > 31 && (charCode < 48 || charCode > 57)){
463 function addCustListen(count) {
464 $('#go_properties_tab' + count).click(function(event) {
465 if ($("#nav_Tabs li.active").length>0){
466 var oldCount = $("#nav_Tabs li.active").find("a").attr("id").slice(-1);
467 if (($('#formId'+oldCount+' #tcaTable .highlight').length > 0 ) &&
468 (!($('#formId'+oldCount+' #threshold').val()) || !($('#formId'+oldCount+' #fieldPathM').val())) ) {
469 $('#formId'+oldCount+' #tcaError').show();
472 $('#formId'+oldCount+' .tcaErr').hide();
473 if ($('#formId'+oldCount+' #tcaTable .highlight').length > 0){
474 $('#formId'+oldCount+' #tcaTable .highlight td').text(propertiesToString(oldCount));
476 $("#formId"+oldCount+" #tcaTable .highlight").removeClass("highlight")
480 $("#nav_Tabs li").removeClass("active");
481 $(this).parent().addClass("active");
482 $("#formId"+count).css("display","");
483 $(".formId").not($("#formId"+count)).css("display","none");
486 $('#tab_close'+count).click(function(event){
487 $(this).parent().remove();
488 $("#formId"+count).remove();
491 $('#formId'+count+' #tcaTable').on('click', 'tr', function(event){
492 if (($('#formId'+count+' #tcaTable .highlight').length > 0 ) &&
493 (!($('#formId'+count+' #threshold').val()) || !($('#formId'+count+' #fieldPathM').val())) ) {
494 $('#formId'+count+' #tcaError').show();
497 $('#formId'+count+' .tcaErr').hide();
498 if ($('#formId'+count+' #tcaTable .highlight').length > 0){
499 $('#formId'+count+' #tcaTable .highlight td').text(propertiesToString(num));
501 //$('#formId'+count+' #tcaTable .highlight').text();
502 $(this).addClass('highlight').siblings().removeClass('highlight');
503 var str = $(this).text().split(' ');
504 $('#formId'+count + ' #properties_tab').visible();
505 if (str.length == 5){
506 $('#formId'+count+' #fieldPathM').val(fieldPathMLabel2Value(str[0])).multiselect('refresh');
507 $('#formId'+count+' #operator').val(str[1]).multiselect('refresh');
508 $('#formId'+count+' #threshold').val(str[2]);
509 $('#formId'+count+' #controlLoopSchema').val(str[3]).multiselect('refresh');
510 $('#formId'+count+' #closedLoopEventStatus').val(str[4]).multiselect('refresh');
513 if ((!(readOnly||readMOnly)) && ($('#formId'+count + ' #deleteThresh').prop('disabled'))) {
514 $('#formId'+count + ' #deleteThresh').prop('disabled', false);
519 $('#formId'+count+' #deleteThresh').on('click', function(){
520 $('#formId'+num+' .tcaErr').hide();
521 $('#formId'+count+ ' #properties_tab').invisible();
522 $('#formId'+count+ ' #tcaTable .highlight').remove();
523 $('#formId'+count+ ' #deleteThresh').prop('disabled', true);
526 $('#formId'+count+' #createNewThresh').on('click', function(){
527 if (($('#formId'+count+' #tcaTable .highlight').length > 0 ) &&
528 (!($('#formId'+count+' #threshold').val()) || !($('#formId'+count+' #fieldPathM').val())) ){
529 $('#formId'+count+' #tcaError').show();
532 $('#formId'+count+' .tcaErr').hide();
533 if ($('#formId'+count+' #tcaTable .highlight').length > 0){
534 $('#formId'+count+' #tcaTable .highlight td').text(propertiesToString(count));
536 $('#formId'+count+ ' #properties_tab').visible();
537 if (('#formId'+count+' #tcaTable .highlight').length > 0 ){
538 $('#formId'+count+' #tcaTable tr.highlight').removeClass('highlight');
540 $('#formId'+count+' #tcaTable').prepend('<tr class="highlight"><td>New Threshold</td></tr>');
541 $('#formId'+count+' #fieldPathM').prop("selectedIndex", 0).multiselect('refresh');
542 $('#formId'+count+' #operator').prop("selectedIndex", 0).multiselect('refresh');
543 $('#formId'+count+' #threshold').val("");
544 $('#formId'+count+' #controlLoopSchema').prop("selectedIndex", 0).multiselect('refresh');
545 $('#formId'+count+' #closedLoopEventStatus').prop("selectedIndex", 0).multiselect('refresh');
547 if ($('#formId'+count + ' #deleteThresh').prop('disabled')) {
548 $('#formId'+count + ' #deleteThresh').prop('disabled', false);
553 $('#formId'+count+' #tname').on('change',function(){
554 $('#go_properties_tab'+count).text($('#formId'+count+' #tname').val())