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 $scope.version1=false;
33 $scope.version2=false;
34 $scope.version3=false;
35 $scope.version4=false;
36 //THIS FUNCTION WILL BE CALLED ON PAGE LOAD
37 $scope.getAllVNF = function() {
39 deviceConfigService.getAllVNF().then(function(data) {
42 $scope.objvnfList = data;
43 console.log("CompareConfigCtrl:getAllVNF called" + $scope.objvnfList);
45 $scope.warningMessage = "No VNF is eligible for configuration!!!";
46 growl.error($scope.warningMessage, {
48 globalDisableCloseButton: false,
50 disableCountDown: true
57 $scope.selectVnf = function(selectedValueVnf) {
59 if (selectedValueVnf != null && selectedValueVnf != "") {
60 console.log("selectedvnf Value", selectedValueVnf);
61 var vnfId = selectedValueVnf;
62 $scope.getVersionList(vnfId);
64 $scope.ShowResult = false;
65 $scope.showCompare = false;
66 $scope.showResult = false;
67 $scope.errorMessage = "Please select a VNF!!!";
68 growl.error($scope.errorMessage, {
70 globalDisableCloseButton: false,
72 disableCountDown: true
78 //THIS FUNCTION WILL BE CALLED ON SELECTION OF VNF
79 $scope.getVersionList = function(vnfId) {
81 $scope.ShowResult = false;
83 //service call to fetch the version list
84 deviceConfigService.getVersions(vnfId).then(function(result) {
85 console.log("-----CompareConfigCtrl::getVersionList called from controler--", JSON.stringify(result));
86 var status = result.status;
87 var result = result.data;
89 if (result.length >= 1) {
90 //in case of success, build the model object to store the service output here
91 $scope.createVersionModel(result);
94 $scope.ShowResult = false;
95 $scope.warningMessage = "No configruation found for the selected VNF !!";
96 growl.warning($scope.warningMessage, {
98 globalDisableCloseButton: false,
100 disableCountDown: true
104 $scope.ShowResult = false;
105 $scope.warningMessage = "No configruation found for the selected VNF !!";
106 growl.warning($scope.warningMessage, {
108 globalDisableCloseButton: false,
110 disableCountDown: true
115 $scope.errorMessage = "Something went wrong, Please try again !!";
116 growl.error($scope.errorMessage, {
118 globalDisableCloseButton: false,
120 disableCountDown: true
122 console.log("--CompareConfigCtrl::getVersionList::Error--", response);
126 //Function to build the UI model to be shown
127 $scope.createVersionModel = function(result) {
129 $scope.objVersionModel = result;
130 $scope.objVersion = [];
132 console.log("-----CompareConfigCtrl::createVersionModel::--", JSON.stringify($scope.objVersionModel));
133 if ($scope.objVersionModel.length >= 1) {
134 $scope.ShowResult = true;
135 $scope.showCompare = true;
136 $scope.showView =true;
137 for (var i = 0; i < $scope.objVersionModel.length; i++) {
138 var objVersionDetail = {};
139 objVersionDetail.vnfname = $scope.objVersionModel[i].vnfname;
140 objVersionDetail.vnfid = $scope.objVersionModel[i].vnfid;
141 objVersionDetail.vnfversion = $scope.objVersionModel[i].vnfversion;
142 objVersionDetail.createdAt = $scope.objVersionModel[i].creationdate;
143 objVersionDetail.updatedAt = $scope.objVersionModel[i].lastupdated;
144 objVersionDetail.configinfo = $scope.objVersionModel[i].configinfo;
145 objVersionDetail.selected = false;
146 $scope.objVersion.push(objVersionDetail);
150 console.log("-----CompareConfigCtrl::createVersionModel::final VersionModel--" + JSON.stringify($scope.objVersion));
154 sortingOrder : 'vnfversion',
158 var searchMatch = function(haystack, needle) {
162 return haystack.toLowerCase().indexOf(
163 needle.toLowerCase()) !== -1;
166 // init the filtered items
167 $scope.search = function() {
168 $scope.filteredItems = $filter('filter')(
171 for ( var attr in item) {
172 if (searchMatch(item[attr],
178 // take care of the sorting order
179 if ($scope.sort.sortingOrder !== '') {
180 $scope.filteredItems = $filter(
182 $scope.filteredItems,
183 $scope.sort.sortingOrder,
184 $scope.sort.reverse);
186 $scope.currentPage = 0;
187 // now group by pages
188 $scope.groupToPages();
191 // calculate page in place
192 $scope.groupToPages = function() {
193 $scope.pagedItems = [];
195 for (var i = 0; i < $scope.filteredItems.length; i++) {
196 if (i % $scope.itemsPerPage === 0) {
197 $scope.pagedItems[Math.floor(i
198 / $scope.itemsPerPage)] = [ $scope.filteredItems[i] ];
200 $scope.pagedItems[Math.floor(i
201 / $scope.itemsPerPage)]
202 .push($scope.filteredItems[i]);
207 $scope.range = function(size, start, end) {
209 //console.log(size, start, end);
213 start = size - $scope.gap;
215 for (var i = start; i < end; i++) {
222 $scope.prevPage = function() {
223 if ($scope.currentPage > 0) {
224 $scope.currentPage--;
228 $scope.nextPage = function() {
229 if ($scope.currentPage < $scope.pagedItems.length - 1) {
230 $scope.currentPage++;
234 $scope.setPage = function() {
235 $scope.currentPage = this.n;
238 // functions have been describe process the data
248 $scope.ApplyConfig = function(objVersion){
250 angular.forEach(objVersion, function(item) {
251 if (item.selected == true)
255 $scope.errorMessage = "Select a config file to apply !!!";
256 growl.error($scope.errorMessage, {
258 globalDisableCloseButton: false,
260 disableCountDown: true
262 }else if (count > 1) {
263 $scope.errorMessage = "Only one config file can be applyed at a time !!!";
264 growl.error($scope.errorMessage, {
266 globalDisableCloseButton: false,
268 disableCountDown: true
271 $scope.applyModelNew(objVersion);
275 $scope.applyModelNew = function(objVersion){
277 $scope.objCompareModel1 = {};
279 $scope.versionsSelected = [];
280 angular.forEach(objVersion, function(item) {
281 angular.forEach($scope.objVersionModel, function(val, index) {
283 if ($scope.versionsSelected.indexOf(item) == -1)
284 $scope.versionsSelected.push(item);
288 console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
290 angular.forEach($scope.versionsSelected, function(item) {
292 var versionDetails = {};
293 versionDetails.vnfversion = item['vnfversion'];
294 versionDetails.vnfName = item['vnfname'];
295 var vnfid = item['vnfid'];
296 var config = item['configinfo'];
297 var config1=JSON.parse(config);
298 console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", config1);
299 deviceConfigService.runApplyconfig(vnfid,config1);
300 $scope.showResult = false;
301 $scope.successMessage = "File uploaded successfully";
302 growl.success($scope.successMessage, {
304 globalDisableCloseButton: false,
306 disableCountDown: true
313 $scope.ViewConfig = function(objVersion){
314 var elmnt1 = document.getElementById("view");
316 elmnt1.style.display = "block";
318 angular.forEach(objVersion, function(item) {
319 if (item.selected == true)
323 $scope.showResult = false;
324 $scope.errorMessage = "Select a config file to view !!!";
325 growl.error($scope.errorMessage, {
327 globalDisableCloseButton: false,
329 disableCountDown: true
331 }else if (count > 1) {
332 $scope.showResult = false;
333 $scope.errorMessage = "Only one config file can be viewed at a time !!!";
334 growl.error($scope.errorMessage, {
336 globalDisableCloseButton: false,
338 disableCountDown: true
341 $scope.ViewCompareModelNew(objVersion);
344 $scope.ViewCompareModelNew = function(objVersion) {
345 $scope.objCompareModel1 = {};
347 $scope.versionsSelected = [];
348 angular.forEach(objVersion, function(item) {
349 angular.forEach($scope.objVersionModel, function(val, index) {
351 if ($scope.versionsSelected.indexOf(item) == -1)
352 $scope.versionsSelected.push(item);
356 console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
358 angular.forEach($scope.versionsSelected, function(item) {
360 var versionDetails = {};
361 versionDetails.vnfversion = item['vnfversion'];
362 versionDetails.vnfName = item['vnfname'];
363 var vnfid = item['vnfid'];
366 versionDetails.timeStamp = item.createdAt;
367 versionObj.versionDetails = versionDetails;
369 //fetch all the other topology/network,opertaion status for the vnf
370 versionObj.topologyInfo = $scope.fetchTopologyInfo(item);
371 versionObj.vnfIdInfo = $scope.fetchVnfId(item);
372 versionObj.serviceStatusInfo= $scope.fetchServiceStatus(item);
373 versionObj.vnfTopologyIdentifier = $scope.vnfTopologyIdentifier(item);
374 versionObj.operationStatus = $scope.operationStatus(item);
375 versionObj.vnfRequestInfo=$scope.fetchVnfRequestInfo(item);
376 versionObj.serviceInfo= $scope.fetchServiceInfo(item);
377 versionObj.requestHeader= $scope.serviceRequestHeader(item);
378 versionObj.requestInfo=$scope.fetchRequestInfo(item);
380 if ((versionObj.versionDetails.vnfversion == $scope.versionsSelected[0].vnfversion)) {
381 $scope.objCompareModel1 = versionObj;
383 {console.log("CompareConfigCtrl::createCompareModel::objCompareModel1");
386 document.getElementById("compare").style.display = "none";
388 $scope.showView=true;
389 $scope.showResult = true;
390 var elmnt1 = document.getElementById("view");
391 elmnt1.scrollIntoView();
392 console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", JSON.stringify($scope.objCompareModel1));
399 $scope.CompareConfig = function(objVersion) {
400 var elmnt = document.getElementById("compare");
401 elmnt.style.display = "block";
403 angular.forEach(objVersion, function(item) {
404 if (item.selected == true)
408 $scope.showResult = false;
409 $scope.errorMessage = "Four or lessthan four and gretterthan two config files can be selected for the comparison!!!";
410 growl.error($scope.errorMessage, {
412 globalDisableCloseButton: false,
414 disableCountDown: true
416 } else if (count < 2){
417 $scope.showResult = false;
418 $scope.errorMessage = "At least two config files can be selected for the comparison!!!";
419 growl.error($scope.errorMessage, {
421 globalDisableCloseButton: false,
423 disableCountDown: true
426 $scope.createCompareModelNew(objVersion);
429 $scope.createCompareModelNew = function(objVersion) {
431 $scope.objCompareModel1 = {};
432 $scope.objCompareModel2 = {};
434 $scope.versionsSelected = [];
435 angular.forEach(objVersion, function(item) {
436 angular.forEach($scope.objVersionModel, function(val, index) {
438 if ($scope.versionsSelected.indexOf(item) == -1)
439 $scope.versionsSelected.push(item);
443 console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
444 console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.versionsSelected));
446 angular.forEach($scope.versionsSelected, function(item) {
448 var versionDetails = {};
449 versionDetails.vnfversion = item.vnfversion;
450 versionDetails.timeStamp = item.createdAt;
451 versionObj.versionDetails = versionDetails;
453 //fetch all the other topology/network,opertaion status for the vnf
454 versionObj.topologyInfo = $scope.fetchTopologyInfo(item);
455 versionObj.vnfIdInfo = $scope.fetchVnfId(item);
456 versionObj.serviceStatusInfo= $scope.fetchServiceStatus(item);
457 versionObj.vnfTopologyIdentifier = $scope.vnfTopologyIdentifier(item);
458 versionObj.operationStatus = $scope.operationStatus(item);
459 versionObj.vnfRequestInfo=$scope.fetchVnfRequestInfo(item);
460 versionObj.serviceInfo= $scope.fetchServiceInfo(item);
461 versionObj.requestHeader= $scope.serviceRequestHeader(item);
462 versionObj.requestInfo=$scope.fetchRequestInfo(item);
464 if ((versionObj.versionDetails.vnfversion == $scope.versionsSelected[0].vnfversion)) {
465 $scope.objCompareModel1 = versionObj;
466 $scope.version1=true;
467 } else if ((versionObj.versionDetails.vnfversion == $scope.versionsSelected[1].vnfversion))
468 {$scope.objCompareModel2 = versionObj;
469 $scope.version2=true;
470 $scope.version3=false;
471 $scope.version4=false;
472 }else if((versionObj.versionDetails.vnfversion == $scope.versionsSelected[2].vnfversion)){
473 $scope.objCompareModel3 = versionObj;
474 $scope.version3=true;
475 $scope.version4=false;
476 }else if((versionObj.versionDetails.vnfversion == $scope.versionsSelected[3].vnfversion)){
477 $scope.objCompareModel4 = versionObj;
478 $scope.version4=true;
480 document.getElementById("view").style.display = "none";
482 $scope.showResult = true;
483 var elmnt = document.getElementById("compare");
484 elmnt.scrollIntoView();
485 console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", JSON.stringify($scope.objCompareModel1));
486 console.log("CompareConfigCtrl::createCompareModel::objCompareModel2", JSON.stringify($scope.objCompareModel2));
490 //1'st comparison for vnf topology info vnf-parameters
491 $scope.fetchTopologyInfo = function(item) {
492 var topologyInfo = {};
493 item = JSON.parse(item.configinfo);
494 var item= item['vnf-list'][0];
495 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['vnf-topology-information'])) {
496 var vnfTopologyInfo = item['service-data']['vnf-topology-information'];
497 if (angular.isDefined(vnfTopologyInfo['vnf-parameters'] && vnfTopologyInfo['vnf-parameters'] != null)) {
498 var vnfParameters = vnfTopologyInfo['vnf-parameters'];
499 for (var i = 0; i < vnfParameters.length; i++) {
501 var key = vnfParameters[i]['vnf-parameter-name'];
502 var value = vnfParameters[i]['vnf-parameter-value'];
503 console.log("CompareConfigCtrl::fetchTopologyInfo::key", key);
504 console.log("CompareConfigCtrl::fetchTopologyInfo::value", value);
505 topologyInfo[key] = value;
508 console.log("CompareConfigCtrl::fetchTopologyInfo::", JSON.stringify(topologyInfo));
516 //2nd comparison for vnf id
518 $scope.fetchVnfId = function(item){
520 item = JSON.parse(item.configinfo);
521 var item= item['vnf-list'][0];
522 if (angular.isDefined(item['vnf-id'])) {
523 var key=item['vnf-id'];
524 vnfIdInfo['vnf-id']=key;
526 console.log("CompareConfigCtrl::fetchVnfId::", JSON.stringify( vnfIdInfo));
531 //3rd comparison for service status
533 $scope.fetchServiceStatus = function(item) {
534 var serviceStatusInfo = {};
536 item = JSON.parse(item.configinfo);
537 var item= item['vnf-list'][0];
539 if (angular.isDefined(item['service-status'])) {
540 var serviceStatus = item['service-status'];
541 if (angular.isDefined(serviceStatus)) {
542 angular.forEach(serviceStatus, function(value, key) {
544 console.log("CompareConfigCtrl::fetchServiceStatus::key", key);
545 console.log("CompareConfigCtrl::fetchServiceStatus::value", value);
546 serviceStatusInfo[key] = value;
551 console.log("CompareConfigCtrl::fetchServiceStatus::", JSON.stringify(serviceStatusInfo));
552 return serviceStatusInfo;
555 // 4th comparison for vnf topology identifire
557 $scope.vnfTopologyIdentifier = function(item) {
558 var topologyIdnetifier = {};
559 item = JSON.parse(item.configinfo);
560 var item= item['vnf-list'][0];
561 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['vnf-topology-information']['vnf-topology-identifier'])) {
562 var topologyInfoidentifier = item['service-data']['vnf-topology-information']['vnf-topology-identifier'];
563 if (angular.isDefined(topologyInfoidentifier)) {
564 angular.forEach(topologyInfoidentifier, function(value, key) {
566 console.log("CompareConfigCtrl::fetchTopologyInfo::key", key);
567 console.log("CompareConfigCtrl::fetchTopologyInfo::value", value);
568 topologyIdnetifier[key] = value;
573 console.log("CompareConfigCtrl::vnfTopologyIdentifier::", JSON.stringify(topologyIdnetifier));
574 return topologyIdnetifier;
577 // 5th comparison for vnf request information
579 $scope.fetchVnfRequestInfo = function(item) {
580 var vnfRequestInfo = {};
581 item = JSON.parse(item.configinfo);
582 var item= item['vnf-list'][0];
583 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['vnf-request-information'])) {
584 var vnfRequest = item['service-data']['vnf-request-information'];
585 if (angular.isDefined(vnfRequest) && vnfRequest != null) {
587 angular.forEach(vnfRequest, function(value, key) {
589 console.log("CompareConfigCtrl::fetchVnfRequestInfo::key", key);
590 console.log("CompareConfigCtrl::fetchVnfRequestInfo::value", value);
591 vnfRequestInfo[key] = value;
595 console.log("CompareConfigCtrl::fetchVnfRequestInfo::", JSON.stringify(vnfRequestInfo));
596 return vnfRequestInfo;
599 // 6th comparison for service info
602 $scope.fetchServiceInfo = function(item) {
603 var serviceInfo = {};
604 item = JSON.parse(item.configinfo);
605 var item= item['vnf-list'][0];
606 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['service-information'])) {
607 var service= item['service-data']['service-information'];
608 if (angular.isDefined(service) && service != null) {
610 angular.forEach(service, function(value, key) {
612 console.log("CompareConfigCtrl::fetchServiceInfo::key", key);
613 console.log("CompareConfigCtrl::fetchServiceInfo::value", value);
614 serviceInfo[key] = value;
618 console.log("CompareConfigCtrl::fetchServiceInfo::", JSON.stringify(serviceInfo));
622 // 7th comparison for sdnc request header
624 $scope.serviceRequestHeader = function(item) {
625 var requestHeader = {};
626 item = JSON.parse(item.configinfo);
627 var item= item['vnf-list'][0];
628 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['sdnc-request-header'])) {
629 var requestHeaderInfo = item['service-data']['sdnc-request-header'];
630 if (angular.isDefined(requestHeaderInfo) && requestHeaderInfo != null) {
632 angular.forEach(requestHeaderInfo, function(value, key) {
634 console.log("CompareConfigCtrl::serviceRequestHeader::key", key);
635 console.log("CompareConfigCtrl::serviceRequestHeader::value", value);
636 requestHeader[key] = value;
641 console.log("CompareConfigCtrl::serviceRequestHeader::", JSON.stringify(requestHeader));
642 return requestHeader;
645 // 8th comparison for oper status
646 $scope.operationStatus = function(item) {
647 var operationStatus = {};
648 item = JSON.parse(item.configinfo);
649 var item= item['vnf-list'][0];
650 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['oper-status'])) {
651 var operStatus = item['service-data']['oper-status'];
652 if (angular.isDefined(operStatus) && operStatus != null) {
654 angular.forEach(operStatus, function(value, key) {
656 console.log("CompareConfigCtrl::operationStatus::key", key);
657 console.log("CompareConfigCtrl::operationStatus::value", value);
658 operationStatus[key] = value;
663 console.log("CompareConfigCtrl::operationStatus::", JSON.stringify(operationStatus));
664 return operationStatus;
666 // 9th comparison for request info
668 $scope.fetchRequestInfo = function(item) {
669 var requestInfo = {};
670 item = JSON.parse(item.configinfo);
671 var item= item['vnf-list'][0];
672 if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['request-information'])) {
673 var request = item['service-data']['request-information'];
674 if (angular.isDefined(request) && request != null) {
676 angular.forEach(request, function(value, key) {
678 console.log("CompareConfigCtrl::fetchRequestInfo::key", key);
679 console.log("CompareConfigCtrl::fetchRequestInfo::value", value);
680 requestInfo[key] = value;
685 console.log("CompareConfigCtrl::fetchRequestInfo::", JSON.stringify(requestInfo));