2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright 2018 TechMahindra
6 *=================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 myApp.controller('CompareConfigCtrl', ['$scope','$filter', '$http','$window', 'growl', 'deviceConfigService', 'ObjectDiff', function($scope,$filter, $http,$window, growl, deviceConfigService, ObjectDiff) {
22 $scope.showResult = false;
23 $scope.showCompare = false;
24 $scope.showView=false;
25 $scope.pagination = false;
27 $scope.filteredItems = [];
28 $scope.groupedItems = [];
29 $scope.itemsPerPage = 5;
30 $scope.pagedItems = [];
31 $scope.currentPage = 0;
32 //THIS FUNCTION WILL BE CALLED ON PAGE LOAD
33 $scope.getAllVNF = function() {
35 deviceConfigService.getAllVNF().then(function(data) {
38 $scope.objvnfList = data;
39 console.log("CompareConfigCtrl:getAllVNF called" + $scope.objvnfList);
41 $scope.warningMessage = "No VNF is eligible for configuration!!!";
42 growl.error($scope.warningMessage, {
44 globalDisableCloseButton: false,
46 disableCountDown: true
53 $scope.selectVnf = function(selectedValueVnf) {
55 if (selectedValueVnf != null && selectedValueVnf != "") {
56 console.log("selectedvnf Value", selectedValueVnf);
57 //selectedItem = selectedValueVnf.split("%");
58 // var vnfName = selectedItem[0];
59 // var vnfType = selectedItem[1];
60 var vnfId = selectedValueVnf;
61 $scope.getVersionList(vnfId);
63 $scope.ShowResult = false;
64 $scope.showCompare = false;
65 $scope.showResult = false;
66 $scope.errorMessage = "Please select a VNF!!!";
67 growl.error($scope.errorMessage, {
69 globalDisableCloseButton: false,
71 disableCountDown: true
77 //THIS FUNCTION WILL BE CALLED ON SELECTION OF VNF
78 $scope.getVersionList = function(vnfId) {
80 $scope.ShowResult = false;
82 //service call to fetch the version list
83 deviceConfigService.getVersions(vnfId).then(function(result) {
84 console.log("-----CompareConfigCtrl::getVersionList called from controler--", JSON.stringify(result));
85 var status = result.status;
86 var result = result.data;
88 if (result.length >= 1) {
89 //in case of success, build the model object to store the service output here
90 $scope.createVersionModel(result);
93 $scope.ShowResult = false;
94 $scope.warningMessage = "No configruation found for the selected VNF !!";
95 growl.warning($scope.warningMessage, {
97 globalDisableCloseButton: false,
99 disableCountDown: true
103 $scope.ShowResult = false;
104 $scope.warningMessage = "No configruation found for the selected VNF !!";
105 growl.warning($scope.warningMessage, {
107 globalDisableCloseButton: false,
109 disableCountDown: true
114 $scope.errorMessage = "Something went wrong, Please try again !!";
115 growl.error($scope.errorMessage, {
117 globalDisableCloseButton: false,
119 disableCountDown: true
121 console.log("--CompareConfigCtrl::getVersionList::Error--", response);
125 //Function to build the UI model to be shown
126 $scope.createVersionModel = function(result) {
128 $scope.objVersionModel = result;
129 $scope.objVersion = [];
131 console.log("-----CompareConfigCtrl::createVersionModel::--", JSON.stringify($scope.objVersionModel));
132 if ($scope.objVersionModel.length >= 1) {
133 $scope.ShowResult = true;
134 $scope.showCompare = true;
135 $scope.showView =true;
136 for (var i = 0; i < $scope.objVersionModel.length; i++) {
137 var objVersionDetail = {};
138 objVersionDetail.vnfname = $scope.objVersionModel[i].vnfname;
139 objVersionDetail.vnfid = $scope.objVersionModel[i].vnfid;
140 objVersionDetail.vnfversion = $scope.objVersionModel[i].vnfversion;
141 objVersionDetail.createdAt = $scope.objVersionModel[i].creationdate;
142 objVersionDetail.updatedAt = $scope.objVersionModel[i].lastupdated;
143 objVersionDetail.configinfo = $scope.objVersionModel[i].configinfo;
144 objVersionDetail.selected = false;
145 $scope.objVersion.push(objVersionDetail);
149 console.log("-----CompareConfigCtrl::createVersionModel::final VersionModel--" + JSON.stringify($scope.objVersion));
153 sortingOrder : 'vnfversion',
157 var searchMatch = function(haystack, needle) {
161 return haystack.toLowerCase().indexOf(
162 needle.toLowerCase()) !== -1;
165 // init the filtered items
166 $scope.search = function() {
167 $scope.filteredItems = $filter('filter')(
170 for ( var attr in item) {
171 if (searchMatch(item[attr],
177 // take care of the sorting order
178 if ($scope.sort.sortingOrder !== '') {
179 $scope.filteredItems = $filter(
181 $scope.filteredItems,
182 $scope.sort.sortingOrder,
183 $scope.sort.reverse);
185 $scope.currentPage = 0;
186 // now group by pages
187 $scope.groupToPages();
190 // calculate page in place
191 $scope.groupToPages = function() {
192 $scope.pagedItems = [];
194 for (var i = 0; i < $scope.filteredItems.length; i++) {
195 if (i % $scope.itemsPerPage === 0) {
196 $scope.pagedItems[Math.floor(i
197 / $scope.itemsPerPage)] = [ $scope.filteredItems[i] ];
199 $scope.pagedItems[Math.floor(i
200 / $scope.itemsPerPage)]
201 .push($scope.filteredItems[i]);
206 $scope.range = function(size, start, end) {
208 //console.log(size, start, end);
212 start = size - $scope.gap;
214 for (var i = start; i < end; i++) {
221 $scope.prevPage = function() {
222 if ($scope.currentPage > 0) {
223 $scope.currentPage--;
227 $scope.nextPage = function() {
228 if ($scope.currentPage < $scope.pagedItems.length - 1) {
229 $scope.currentPage++;
233 $scope.setPage = function() {
234 $scope.currentPage = this.n;
237 // functions have been describe process the data
247 $scope.ApplyConfig = function(objVersion){
249 angular.forEach(objVersion, function(item) {
250 if (item.selected == true)
254 $scope.errorMessage = "Select a config file to apply !!!";
255 growl.error($scope.errorMessage, {
257 globalDisableCloseButton: false,
259 disableCountDown: true
261 }else if (count > 1) {
262 $scope.errorMessage = "Only one config file can be applyed at a time !!!";
263 growl.error($scope.errorMessage, {
265 globalDisableCloseButton: false,
267 disableCountDown: true
270 $scope.applyModelNew(objVersion);
274 $scope.applyModelNew = function(objVersion){
276 $scope.objCompareModel1 = {};
278 $scope.versionsSelected = [];
279 angular.forEach(objVersion, function(item) {
280 angular.forEach($scope.objVersionModel, function(val, index) {
281 /* if (item.vnfversion == val['vnfversion'] && item.selected == false) {
282 $scope.objVersionModel.splice(index, 1);
285 if ($scope.versionsSelected.indexOf(item) == -1)
286 $scope.versionsSelected.push(item);
290 console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
292 angular.forEach($scope.versionsSelected, function(item) {
294 var versionDetails = {};
295 versionDetails.vnfversion = item['vnfversion'];
296 versionDetails.vnfName = item['vnfname'];
297 var vnfid = item['vnfid'];
298 // var config = JSON.parse(item['configinfo']);
299 var config = item['configinfo'];
300 var config1=JSON.parse(config);
301 console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", config1);
302 deviceConfigService.runApplyconfig(vnfid,config1);
303 $scope.successMessage = "File uploaded successfully";
304 growl.success($scope.successMessage, {
306 globalDisableCloseButton: false,
308 disableCountDown: true
315 $scope.ViewConfig = function(objVersion){
316 var elmnt1 = document.getElementById("view");
318 elmnt1.style.display = "block";
320 angular.forEach(objVersion, function(item) {
321 if (item.selected == true)
325 $scope.showResult = false;
326 $scope.errorMessage = "Select a config file to view !!!";
327 growl.error($scope.errorMessage, {
329 globalDisableCloseButton: false,
331 disableCountDown: true
333 }else if (count > 1) {
334 $scope.showResult = false;
335 $scope.errorMessage = "Only one config file can be viewed at a time !!!";
336 growl.error($scope.errorMessage, {
338 globalDisableCloseButton: false,
340 disableCountDown: true
343 $scope.ViewCompareModelNew(objVersion);
346 $scope.ViewCompareModelNew = function(objVersion) {
347 $scope.objCompareModel1 = {};
349 $scope.versionsSelected = [];
350 angular.forEach(objVersion, function(item) {
351 angular.forEach($scope.objVersionModel, function(val, index) {
352 /*if (item.vnfversion == val['vnfversion'] && item.selected == false) {
353 $scope.objVersionModel.splice(index, 1);
356 if ($scope.versionsSelected.indexOf(item) == -1)
357 $scope.versionsSelected.push(item);
361 console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
363 angular.forEach($scope.versionsSelected, function(item) {
365 var versionDetails = {};
366 versionDetails.vnfversion = item['vnfversion'];
367 versionDetails.vnfName = item['vnfname'];
368 var vnfid = item['vnfid'];
371 versionDetails.timeStamp = item.createdAt;
372 versionObj.versionDetails = versionDetails;
374 //fetch all the other topology/network,opertaion status for the vnf
375 // versionObj.topologyInfo = $scope.fetchConfigDetails(item);
376 versionObj.topologyInfo = $scope.fetchTopologyInfo(item);
377 versionObj.vnfIdInfo = $scope.fetchVnfId(item);
378 versionObj.serviceStatusInfo= $scope.fetchServiceStatus(item);
379 versionObj.vnfTopologyIdentifier = $scope.vnfTopologyIdentifier(item);
380 versionObj.operationStatus = $scope.operationStatus(item);
381 versionObj.vnfRequestInfo=$scope.fetchVnfRequestInfo(item);
382 versionObj.serviceInfo= $scope.fetchServiceInfo(item);
383 versionObj.requestHeader= $scope.serviceRequestHeader(item);
384 versionObj.requestInfo=$scope.fetchRequestInfo(item);
386 if ((versionObj.versionDetails.vnfversion == $scope.versionsSelected[0].vnfversion)) {
387 $scope.objCompareModel1 = versionObj;
389 {console.log("CompareConfigCtrl::createCompareModel::objCompareModel1");
392 document.getElementById("compare").style.display = "none";
394 $scope.showView=true;
395 $scope.showResult = true;
396 var elmnt1 = document.getElementById("view");
397 elmnt1.scrollIntoView();
398 console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", JSON.stringify($scope.objCompareModel1));
405 $scope.CompareConfig = function(objVersion) {
406 var elmnt = document.getElementById("compare");
407 elmnt.style.display = "block";
409 angular.forEach(objVersion, function(item) {
410 if (item.selected == true)
414 $scope.showResult = false;
415 $scope.errorMessage = "Four or lessthan four and gretterthan two config files can be selected for the comparison!!!";
416 growl.error($scope.errorMessage, {
418 globalDisableCloseButton: false,
420 disableCountDown: true
422 } else if (count < 2){
423 $scope.showResult = false;
424 $scope.errorMessage = "At least two config files can be selected for the comparison!!!";
425 growl.error($scope.errorMessage, {
427 globalDisableCloseButton: false,
429 disableCountDown: true
432 $scope.createCompareModelNew(objVersion);
435 $scope.createCompareModelNew = function(objVersion) {
437 $scope.objCompareModel1 = {};
438 $scope.objCompareModel2 = {};
440 $scope.versionsSelected = [];
441 angular.forEach(objVersion, function(item) {
442 angular.forEach($scope.objVersionModel, function(val, index) {
443 /*if ((item.vnfversion == val['vnfversion']) && item.selected == false) {
444 // $scope.objVersionModel.splice(index, 1);
447 if ($scope.versionsSelected.indexOf(item) == -1)
448 $scope.versionsSelected.push(item);
452 console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
453 console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.versionsSelected));
455 angular.forEach($scope.versionsSelected, function(item) {
457 var versionDetails = {};
458 versionDetails.vnfversion = item.vnfversion;
459 /*versionDetails.vnfName = item['vnfname'];
460 versionDetails.vnfid = item['vnfid'];*/
461 versionDetails.timeStamp = item.createdAt;
462 versionObj.versionDetails = versionDetails;
464 //fetch all the other topology/network,opertaion status for the vnf
465 // versionObj.topologyInfo = $scope.fetchConfigDetails(item);
466 versionObj.topologyInfo = $scope.fetchTopologyInfo(item);
467 versionObj.vnfIdInfo = $scope.fetchVnfId(item);
468 versionObj.serviceStatusInfo= $scope.fetchServiceStatus(item);
469 versionObj.vnfTopologyIdentifier = $scope.vnfTopologyIdentifier(item);
470 versionObj.operationStatus = $scope.operationStatus(item);
471 versionObj.vnfRequestInfo=$scope.fetchVnfRequestInfo(item);
472 versionObj.serviceInfo= $scope.fetchServiceInfo(item);
473 versionObj.requestHeader= $scope.serviceRequestHeader(item);
474 versionObj.requestInfo=$scope.fetchRequestInfo(item);
476 if ((versionObj.versionDetails.vnfversion == $scope.versionsSelected[0].vnfversion)) {
477 $scope.objCompareModel1 = versionObj;
478 } else if ((versionObj.versionDetails.vnfversion == $scope.versionsSelected[1].vnfversion))
479 {$scope.objCompareModel2 = versionObj;
481 document.getElementById("view").style.display = "none";
483 $scope.showResult = true;
484 var elmnt = document.getElementById("compare");
485 elmnt.scrollIntoView();
486 console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", JSON.stringify($scope.objCompareModel1));
487 console.log("CompareConfigCtrl::createCompareModel::objCompareModel2", JSON.stringify($scope.objCompareModel2));
491 //1'st comparison for vnf topology info vnf-parameters
492 $scope.fetchTopologyInfo = function(item) {
493 var topologyInfo = {};
494 item = JSON.parse(item.configinfo);
495 var item= item['vnf-list'][0];
496 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['vnf-topology-information'])) {
497 var vnfTopologyInfo = item['service-data']['vnf-topology-information'];
498 if (angular.isDefined(vnfTopologyInfo['vnf-parameters'] && vnfTopologyInfo['vnf-parameters'] != null)) {
499 var vnfParameters = vnfTopologyInfo['vnf-parameters'];
500 for (var i = 0; i < vnfParameters.length; i++) {
502 var key = vnfParameters[i]['vnf-parameter-name'];
503 var value = vnfParameters[i]['vnf-parameter-value'];
504 console.log("CompareConfigCtrl::fetchTopologyInfo::key", key);
505 console.log("CompareConfigCtrl::fetchTopologyInfo::value", value);
506 topologyInfo[key] = value;
509 console.log("CompareConfigCtrl::fetchTopologyInfo::", JSON.stringify(topologyInfo));
517 //2nd comparison for vnf id
519 $scope.fetchVnfId = function(item){
521 item = JSON.parse(item.configinfo);
522 var item= item['vnf-list'][0];
523 if (angular.isDefined(item['vnf-id'])) {
524 var key=item['vnf-id'];
525 vnfIdInfo['vnf-id']=key;
527 console.log("CompareConfigCtrl::fetchVnfId::", JSON.stringify( vnfIdInfo));
532 //3rd comparison for service status
534 $scope.fetchServiceStatus = function(item) {
535 var serviceStatusInfo = {};
537 item = JSON.parse(item.configinfo);
538 var item= item['vnf-list'][0];
540 if (angular.isDefined(item['service-status'])) {
541 var serviceStatus = item['service-status'];
542 if (angular.isDefined(serviceStatus)) {
543 angular.forEach(serviceStatus, function(value, key) {
545 console.log("CompareConfigCtrl::fetchServiceStatus::key", key);
546 console.log("CompareConfigCtrl::fetchServiceStatus::value", value);
547 serviceStatusInfo[key] = value;
552 console.log("CompareConfigCtrl::fetchServiceStatus::", JSON.stringify(serviceStatusInfo));
553 return serviceStatusInfo;
556 // 4th comparison for vnf topology identifire
558 $scope.vnfTopologyIdentifier = function(item) {
559 var topologyIdnetifier = {};
560 item = JSON.parse(item.configinfo);
561 var item= item['vnf-list'][0];
562 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['vnf-topology-information']['vnf-topology-identifier'])) {
563 var topologyInfoidentifier = item['service-data']['vnf-topology-information']['vnf-topology-identifier'];
564 if (angular.isDefined(topologyInfoidentifier)) {
565 angular.forEach(topologyInfoidentifier, function(value, key) {
567 console.log("CompareConfigCtrl::fetchTopologyInfo::key", key);
568 console.log("CompareConfigCtrl::fetchTopologyInfo::value", value);
569 topologyIdnetifier[key] = value;
574 console.log("CompareConfigCtrl::vnfTopologyIdentifier::", JSON.stringify(topologyIdnetifier));
575 return topologyIdnetifier;
578 // 5th comparison for vnf request information
580 $scope.fetchVnfRequestInfo = function(item) {
581 var vnfRequestInfo = {};
582 item = JSON.parse(item.configinfo);
583 var item= item['vnf-list'][0];
584 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['vnf-request-information'])) {
585 var vnfRequest = item['service-data']['vnf-request-information'];
586 if (angular.isDefined(vnfRequest) && vnfRequest != null) {
588 angular.forEach(vnfRequest, function(value, key) {
590 console.log("CompareConfigCtrl::fetchVnfRequestInfo::key", key);
591 console.log("CompareConfigCtrl::fetchVnfRequestInfo::value", value);
592 vnfRequestInfo[key] = value;
596 console.log("CompareConfigCtrl::fetchVnfRequestInfo::", JSON.stringify(vnfRequestInfo));
597 return vnfRequestInfo;
600 // 6th comparison for service info
603 $scope.fetchServiceInfo = function(item) {
604 var serviceInfo = {};
605 item = JSON.parse(item.configinfo);
606 var item= item['vnf-list'][0];
607 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['service-information'])) {
608 var service= item['service-data']['service-information'];
609 if (angular.isDefined(service) && service != null) {
611 angular.forEach(service, function(value, key) {
613 console.log("CompareConfigCtrl::fetchServiceInfo::key", key);
614 console.log("CompareConfigCtrl::fetchServiceInfo::value", value);
615 serviceInfo[key] = value;
619 console.log("CompareConfigCtrl::fetchServiceInfo::", JSON.stringify(serviceInfo));
623 // 7th comparison for sdnc request header
625 $scope.serviceRequestHeader = function(item) {
626 var requestHeader = {};
627 item = JSON.parse(item.configinfo);
628 var item= item['vnf-list'][0];
629 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['sdnc-request-header'])) {
630 var requestHeaderInfo = item['service-data']['sdnc-request-header'];
631 if (angular.isDefined(requestHeaderInfo) && requestHeaderInfo != null) {
633 angular.forEach(requestHeaderInfo, function(value, key) {
635 console.log("CompareConfigCtrl::serviceRequestHeader::key", key);
636 console.log("CompareConfigCtrl::serviceRequestHeader::value", value);
637 requestHeader[key] = value;
642 console.log("CompareConfigCtrl::serviceRequestHeader::", JSON.stringify(requestHeader));
643 return requestHeader;
646 // 8th comparison for oper status
647 $scope.operationStatus = function(item) {
648 var operationStatus = {};
649 item = JSON.parse(item.configinfo);
650 var item= item['vnf-list'][0];
651 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['oper-status'])) {
652 var operStatus = item['service-data']['oper-status'];
653 if (angular.isDefined(operStatus) && operStatus != null) {
655 angular.forEach(operStatus, function(value, key) {
657 console.log("CompareConfigCtrl::operationStatus::key", key);
658 console.log("CompareConfigCtrl::operationStatus::value", value);
659 operationStatus[key] = value;
664 console.log("CompareConfigCtrl::operationStatus::", JSON.stringify(operationStatus));
665 return operationStatus;
667 // 9th comparison for request info
669 $scope.fetchRequestInfo = function(item) {
670 var requestInfo = {};
671 item = JSON.parse(item.configinfo);
672 var item= item['vnf-list'][0];
673 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['request-information'])) {
674 var request = item['service-data']['request-information'];
675 if (angular.isDefined(request) && request != null) {
677 angular.forEach(request, function(value, key) {
679 console.log("CompareConfigCtrl::fetchRequestInfo::key", key);
680 console.log("CompareConfigCtrl::fetchRequestInfo::value", value);
681 requestInfo[key] = value;
686 console.log("CompareConfigCtrl::fetchRequestInfo::", JSON.stringify(requestInfo));