X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=vid-app-common%2Fsrc%2Fmain%2Fwebapp%2Fapp%2Fvid%2Fscripts%2Fcontroller%2FaaiSubscriberController.js;h=bb3acad1bb9f5ac82d9006c76c3564b032419c5f;hb=c0fe8e1a2c3c809aa11fa37b78da5fcb3759340a;hp=00c141483677b7a17c69a52e23fe3cf9e0bcc2b5;hpb=6c7dcba5be04a502a2d5de7e7c5f14eedf9eaa2a;p=vid.git diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/controller/aaiSubscriberController.js b/vid-app-common/src/main/webapp/app/vid/scripts/controller/aaiSubscriberController.js index 00c141483..bb3acad1b 100755 --- a/vid-app-common/src/main/webapp/app/vid/scripts/controller/aaiSubscriberController.js +++ b/vid-app-common/src/main/webapp/app/vid/scripts/controller/aaiSubscriberController.js @@ -3,6 +3,7 @@ * VID * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019 IBM. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,877 +21,1567 @@ "use strict"; -appDS2.controller("aaiSubscriberController", [ "COMPONENT", "FIELD", "PARAMETER", "DataService", "PropertyService", "$scope", "$http", "$timeout", "$location", "$log", "$route", "VIDCONFIGURATION", "UtilityService", "vidService","AaiService", - function(COMPONENT, FIELD, PARAMETER, DataService, PropertyService, $scope, $http, $timeout, $location, $log, $route, VIDCONFIGURATION, UtilityService, vidService, AaiService) { - - $scope.showVnfDetails = function(vnf) { - console.log("showVnfDetails"); - DataService.setVnfInstanceId(COMPONENT.VNF_INSTANCE_ID); - DataService - .setInventoryItem(aaiResult[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM][0]); - - $scope.$broadcast(COMPONENT.SHOW_COMPONENT_DETAILS, { - componentId : COMPONENT.VNF, - callbackFunction : callbackFunction - }); - } - $scope.popup = new Object(); - - - $scope.isPopupVisible = false; - $scope.defaultBaseUrl = ""; - $scope.responseTimeoutMsec = 60000; - - $scope.serviceTypes=[ FIELD.PROMPT.SELECT_SERVICE ]; - $scope.defaultSubscriberName=[ FIELD.PROMPT.SELECT_SUB ]; - - var callbackFunction = function(response) { - alert(response); - }; - - $scope.getSubs = function() { - $scope.init(); - $scope.fetchSubs(FIELD.PROMPT.FETCHING_SUBS); - $scope.fetchServices(); - - }; - - $scope.cancelCreateSI = function(){ - - window.location.href = COMPONENT.WELCOME_PATH; - - }; - - $scope.getServiceTypes = function(globalCustomerId){ - DataService.setGlobalCustomerId(globalCustomerId); - DataService.setServiceIdList($scope.customerList) - - if (globalCustomerId !== "" && globalCustomerId !== undefined ) { - window.location.href = COMPONENT.SERVICE_TYPE_LIST_PATH + $scope.serviceTypeList; - } - } - - $scope.refreshServiceTypes = function(globalCustomerId){ - DataService.setGlobalCustomerId(globalCustomerId); - - $scope.getServiceTypesList(); - } - - $scope.subId=""; - $scope.createSubscriberName=""; - $scope.serviceTypeList={}; - $scope.custSubList=[]; - $scope.getServiceTypesList = function(){ - var notFound = true; - var globalCustomerId = DataService.getGlobalCustomerId(); - $scope.custSubList = DataService.getServiceIdList(); - if(globalCustomerId !== "" && globalCustomerId !== undefined ){ - $scope.subId=globalCustomerId; - $scope.init(); - $scope.status = FIELD.PROMPT.FETCHING_SERVICE_TYPES; - DataService.setGlobalCustomerId(globalCustomerId); - - AaiService.getSubscriptionServiceTypeList(DataService - .getGlobalCustomerId(), function(response) { - notFound = false; - $scope.setProgress(100); // done - $scope.status = FIELD.STATUS.DONE; - $scope.isSpinnerVisible = false; - $scope.serviceTypeList = response; - for(var i=0; i<$scope.custSubList.length;i++){ - if(globalCustomerId === $scope.custSubList[i].globalCustomerId){ - $scope.createSubscriberName = $scope.custSubList[i].subscriberName; - } - } - }, function(response) { // failure - $scope.showError(FIELD.ERROR.AAI); - $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_TYPES + response.status; - $scope.errorDetails = response.data; - }); - } else { - alert(FIELD.ERROR.SELECT); - } - - }; - - $scope.subList = []; - $scope.getAaiServiceModels = function(selectedServicetype,subName){ - DataService.setGlobalCustomerId(selectedServicetype); - DataService.setServiceIdList($scope.serviceTypeList) - DataService.setSubscriberName(subName); - - DataService.setSubscribers($scope.custSubList); - - if (selectedServicetype !== "" && selectedServicetype !== 'undefined') { - $location.path(COMPONENT.CREATE_INSTANCE_PATH); - } - }; - - $scope.serviceTypeName=""; - $scope.getAaiServiceModelsList = function(){ - var globalCustomerId=""; - var serviceTypeId = DataService.getGlobalCustomerId(); - $scope.serviceTypeList = DataService.getServiceIdList(); - $scope.createSubscriberName = DataService.getSubscriberName(); - $scope.status = FIELD.STATUS.FETCHING_SERVICE_CATALOG; - $scope.custSubList = DataService.getSubscribers(); - for(var i=0; i<$scope.serviceTypeList.length;i++){ - if(parseInt(serviceTypeId) === i ){ - $scope.serviceTypeName = $scope.serviceTypeList[i]; - } - }; - for(var i=0; i<$scope.custSubList.length;i++){ - if($scope.createSubscriberName === $scope.custSubList[i].subscriberName){ - globalCustomerId = $scope.custSubList[i].globalCustomerId; - } - }; - - var pathQuery =""; - - if(null !== globalCustomerId && "" !== globalCustomerId && undefined !== globalCustomerId - && null !== serviceTypeId && "" !== serviceTypeId && undefined !== serviceTypeId){ - pathQuery = COMPONENT.SERVICES_PATH +globalCustomerId+"/"+$scope.serviceTypeName; - } - - var namedQueryId='6e806bc2-8f9b-4534-bb68-be91267ff6c8'; - AaiService.getServiceModelsByServiceType(namedQueryId,globalCustomerId,$scope.serviceTypeName,function(response) { // success - $scope.services = []; - if (angular.isArray(response.data['inventory-response-item'])) { - $scope.services = response.data['inventory-response-item'][0]['inventory-response-items']['inventory-response-item']; - $scope.serviceType = response.data['inventory-response-item'][0]['service-subscription']['service-type']; - $scope.viewPerPage=10; - $scope.totalPage=$scope.services.length/$scope.viewPerPage; - $scope.sortBy="name"; - $scope.scrollViewPerPage=2; - $scope.currentPage=1; - $scope.searchCategory; - $scope.searchString=""; - $scope.currentPageNum=1; - $scope.isSpinnerVisible = false; - $scope.isProgressVisible = false; - } else { - $scope.status = "Failed to get service models from ASDC."; - $scope.error = true; - $scope.isSpinnerVisible = false; - } - DataService.setServiceIdList(response); - }, function(response) { // failure - $scope.showError(FIELD.ERROR.AAI); - $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES+ response.status; - $scope.errorDetails = response.data; - }); - - }; - - $scope.createType = "a la carte"; - $scope.deployService = function(service,hideServiceFields) { - hideServiceFields = hideServiceFields|| false; - var temp = service; - service.uuid = service['service-instance']['model-version-id']; - - console.log("Instantiating ASDC service " + service.uuid); - - $http.get('rest/models/services/' + service.uuid) - .then(function successCallback(getServiceResponse) { - getServiceResponse.data['service'].serviceTypeName =$scope.serviceTypeName ; - getServiceResponse.data['service'].createSubscriberName =$scope.createSubscriberName ; - var serviceModel = getServiceResponse.data; - DataService.setServiceName(serviceModel.service.name); - - DataService.setModelInfo(COMPONENT.SERVICE, { - "modelInvariantId": serviceModel.service.invariantUuid, - "modelVersion": serviceModel.service.version, - "modelNameVersionId": serviceModel.service.uuid, - "modelName": serviceModel.service.name, - "description": serviceModel.service.description, - "category":serviceModel.service.category, - "serviceTypeName":serviceModel.service.serviceTypeName, - "createSubscriberName":serviceModel.service.createSubscriberName - }); - DataService.setHideServiceFields(hideServiceFields); - DataService.setALaCarte (true); - $scope.createType = "a la carte"; - var broadcastType = "createComponent"; - - if (UtilityService.arrayContains (VIDCONFIGURATION.MACRO_SERVICES, serviceModel.service.invariantUuid )) { - DataService.setALaCarte (false); - $scope.createType = "Macro"; - var convertedAsdcModel = UtilityService.convertModel(serviceModel); - - //console.log ("display inputs "); - //console.log (JSON.stringify ( convertedAsdcModel.completeDisplayInputs)); - - DataService.setModelInfo(COMPONENT.SERVICE, { - "modelInvariantId": serviceModel.service.invariantUuid, - "modelVersion": serviceModel.service.version, - "modelNameVersionId": serviceModel.service.uuid, - "modelName": serviceModel.service.name, - "description": serviceModel.service.description, - "category":serviceModel.service.category, - "inputs": serviceModel.service.inputs, - "displayInputs": convertedAsdcModel.completeDisplayInputs, - "serviceTypeName":serviceModel.service.serviceTypeName, - "createSubscriberName":serviceModel.service.createSubscriberName - }); - }; - - $scope.$broadcast(broadcastType, { - componentId : COMPONENT.SERVICE, - callbackFunction : function(response) { - if (response.isSuccessful) { - vidService.setModel(serviceModel); - - var subscriberId = "Not Found"; - var serviceType = "Not Found"; - - var serviceInstanceId = response.instanceId; - - for (var i = 0; i < response.control.length; i++) { - if (response.control[i].id == "subscriberName") { - subscriberId = response.control[i].value; - } else if (response.control[i].id == "serviceType") { - serviceType = response.control[i].value; - } - } - - - $scope.refreshSubs(subscriberId,serviceType,serviceInstanceId); - - } - } - }); - - }, function errorCallback(response) { - console.log("Error: " + response); - }); - }; - - $scope.cancelCreateSIType = function(){ - - window.location.href = COMPONENT.SERVICE_MODLES_INSTANCES_SUBSCRIBERS_PATH; - - } - - $scope.fetchServices = function() { - var serviceIdList = []; - - AaiService.getServices2(function(response) { // success - DataService.setServiceIdList(response); - }, function(response) { // failure - $scope.showError(FIELD.ERROR.AAI); - $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status; - $scope.errorDetails = response.data; - }); - } - - $scope.refreshSubs = function() { - $scope.init(); - $scope.fetchSubs(FIELD.PROMPT.REFRESH_SUB_LIST); - $scope.fetchServices(); - }; - - $scope.fetchSubs = function(status) { - $scope.status = status; - - AaiService.getSubList(function(response) { // sucesss - $scope.setProgress(100); // done - $scope.status = FIELD.STATUS.DONE; - $scope.isSpinnerVisible = false; - $scope.customerList = response; - }, function(response) { // failure - $scope.showError(FIELD.ERROR.AAI); - $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status; - $scope.errorDetails = response.data; - }); - } - - - $scope.getSubDetails = function(request) { - - $scope.init(); - $scope.selectedSubscriber = $location.search().selectedSubscriber; - $scope.selectedServiceInstance = $location.search().selectedServiceInstance; - $scope.status = FIELD.STATUS.FETCHING_SUB_DETAILS + $scope.selectedSubscriber; - - $scope.displayData = []; - AaiService.getSubDetails($scope.selectedSubscriber, $scope.selectedServiceInstance, function(displayData, subscriberName) { - $scope.displayData = displayData; - $scope.viewPerPage=10; - $scope.totalPage=$scope.displayData.length/$scope.viewPerPage; - $scope.scrollViewPerPage=2; - $scope.currentPage=1; - $scope.searchCategory; - $scope.searchString=""; - $scope.currentPageNum=1; - $scope.defaultSort=COMPONENT.SUBSCRIBER_NAME; - $scope.setProgress(100); // done - $scope.status = FIELD.STATUS.DONE; - $scope.isSpinnerVisible = false; - $scope.subscriberName = subscriberName; - }, function(response) { - $scope.showError(FIELD.ERROR.AAI); - $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status; - $scope.errorDetails = response.data; - }); - } - - - $scope.$on(COMPONENT.MSO_DELETE_REQ, function(event, request) { - // $log.debug("deleteInstance: request:"); - // $log.debug(request); - $scope.init(); - - $http.post($scope.baseUrl + request.url, { - requestDetails: request.requestDetails - },{ - timeout: $scope.responseTimeoutMsec - }).then($scope.handleInitialResponse) - ["catch"]($scope.handleServerError); - }); - - $scope.init = function() { - - //PropertyService.setAaiBaseUrl("testaai"); - //PropertyService.setAsdcBaseUrl("testasdc"); - - // takes a default value, retrieves the prop value from the file system and sets it - var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec(); - PropertyService.setMsoMaxPollingIntervalMsec(msecs); - - // takes a default value, retrieves the prop value from the file system and sets it - var polls = PropertyService.retrieveMsoMaxPolls(); - PropertyService.setMsoMaxPolls(polls); - - //PropertyService.setMsoBaseUrl("testmso"); - PropertyService.setServerResponseTimeoutMsec(); - - /* - * Common parameters that would typically be set when the page is - * displayed for a specific service instance id. - */ - - $scope.baseUrl = $scope.defaultBaseUrl; - - $scope.isSpinnerVisible = true; - $scope.isProgressVisible = true; - $scope.isPopupVisible = true; - $scope.requestId = ""; - $scope.error = ""; - $scope.pollAttempts = 0; - $scope.log = ""; - $scope.enableCloseButton(false); - $scope.resetProgress(); - $scope.setProgress(2); // Show "a little" progress - } - - $scope.getComponentList = function(event, request) { - - $scope.isSpinnerVisible = true; - $scope.isProgressVisible = true; - $scope.isPopupVisible = true; - $scope.requestId = ""; - $scope.error = ""; - $scope.pollAttempts = 0; - $scope.log = ""; - - $scope.resetProgress(); - $scope.setProgress(2); // Show "a little" progress - - $scope.globalCustomerId = $location.search().subscriberId; - $scope.serviceType = $location.search().serviceType; - $scope.serviceInstanceId = $location.search().serviceInstanceId; - $scope.subscriberName = $location.search().subscriberName; - - //$scope.getAsdcModel($location.search().modelUuid); - - $scope.namedQueryId = VIDCONFIGURATION.COMPONENT_LIST_NAMED_QUERY_ID; - $scope.status = FIELD.STATUS.FETCHING_SERVICE_INST_DATA + $scope.serviceInstanceId; - - AaiService.runNamedQuery($scope.namedQueryId, $scope.globalCustomerId, $scope.serviceType, $scope.serviceInstanceId, - function(response) { //success - $scope.handleInitialResponseInventoryItems(response); - $scope.setProgress(100); // done - $scope.status = FIELD.STATUS.DONE; - $scope.isSpinnerVisible = false; - }, - function(response){ //failure - $scope.showError(FIELD.ERROR.AAI); - $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_INSTANCE_DATA + response.status; - $scope.errorDetails = response.data; - } - ); - - } - - $scope.handleServerError = function(response, status) { - alert(response.statusText); - } - - $scope.getAsdcModel = function(disData) { - - console.log ("disData"); console.log (JSON.stringify (disData, null, 4)); - - if ( !(UtilityService.hasContents (disData.aaiModelVersionId)) ) { - $scope.errorMsg = FIELD.ERROR.MODEL_VERSION_ID_MISSING; - alert($scope.errorMsg); - return; - } - - // aaiModelVersionId is the model uuid - var pathQuery = COMPONENT.SERVICES_PATH + disData.aaiModelVersionId; - $http({ - method: 'GET', - url: pathQuery - }).then(function successCallback(response) { - vidService.setModel(response.data); - window.location.href = COMPONENT.INSTANTIATE_ROOT_PATH + disData.globalCustomerId + COMPONENT.SUBSCRIBERNAME_SUB_PATH + disData.subscriberName + COMPONENT.SERVICETYPE_SUB_PATH + disData.serviceType + COMPONENT.SERVICEINSTANCEID_SUB_PATH + disData.serviceInstanceId; - console.log("aaiSubscriber getAsdcModel DONE!!!!"); - }, function errorCallback(response) { - console.log("aaiSubscriber getAsdcModel - No matching model found matching the A&AI model version ID = " + disData.aaiModelVersionId); - $scope.errorMsg = FIELD.ERROR.NO_MATCHING_MODEL_AAI + disData.aaiModelVersionId; - alert($scope.errorMsg); - }); - - } - - $scope.getTenants = function(globalCustomerId) { - $http.get(FIELD.ID.AAI_GET_TENTANTS + globalCustomerId) - .then(function successCallback(response) { - return response.data; - //$location.path("/instantiate"); - }, function errorCallback(response) { - //TODO - }); - } - - $scope.handleInitialResponseInventoryItems = function(response) { - - $scope.inventoryResponseItemList = response.data[FIELD.ID.INVENTORY_RESPONSE_ITEM]; // get data from json - console.log($scope.inventoryResponseItemList.toString()); - - $scope.displayData = []; - $scope.vnfs = []; - - $scope.counter = 100; - - $scope.subscriberName = ""; - // just look up the subscriber name in A&AI here... - AaiService.getSubscriberName($scope.globalCustomerId, function(response) { - $scope.subscriberName = response; - DataService.setSubscriberName($scope.subscriberName); - - angular.forEach($scope.inventoryResponseItemList, function(inventoryResponseItem, key) { - - $scope.inventoryResponseItem = inventoryResponseItem; - - $scope.service.instance = { - "name": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE][FIELD.ID.SERVICE_INSTANCE_NAME], - "serviceInstanceId": $scope.serviceInstanceId, - "serviceType": $scope.serviceType, - "globalCustomerId": $scope.globalCustomerId, - "subscriberName": $scope.subscriberName, - "id": $scope.serviceInstanceId, - "inputs": { - "a": { - "type": PARAMETER.STRING, - "description": FIELD.PROMPT.VAR_DESCRIPTION_A, - "default": FIELD.PROMPT.DEFAULT_A - }, - "b": { - "type": PARAMETER.STRING, - "description": FIELD.PROMPT.VAR_DESCRIPTION_B, - "default": FIELD.PROMPT.DEFAULT_B - }, - }, - "object": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE], - "vnfs": [], - "networks": [] - } - - if (inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { - - angular.forEach(inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(subInventoryResponseItem, key) { - // i expect to find vnfs now - - if (subInventoryResponseItem[FIELD.ID.L3_NETWORK] != null) { - var l3NetworkObject = subInventoryResponseItem[FIELD.ID.L3_NETWORK]; - var l3Network = { "id": $scope.counter++, - "name": l3NetworkObject[FIELD.ID.NETWORK_NAME], - "itemType": FIELD.ID.L3_NETWORK, - "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID], - "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE], - "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS], - "object": l3NetworkObject, - "nodes": [], - "subnets": [] - }; - if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { - //console.log ("subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS]="); - //console.log (JSON.stringify (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS], null, 4 )); - angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(subSubInventoryResponseItem, key) { - //console.log (JSON.stringify (subSubInventoryResponseItem, null, 4 )); - var subnet = {}; - var subnetObject; - if (subSubInventoryResponseItem[FIELD.ID.SUB_NET] != null) { - subnetObject = subSubInventoryResponseItem[FIELD.ID.SUB_NET]; - subnet = { - "subnet-id": subnetObject[FIELD.ID.SUBNET_ID], - "subnet-name": subnetObject[FIELD.ID.SUBNET_NAME], - "gateway-address": subnetObject[FIELD.ID.GATEWAY_ADDRESS], - "network-start-address": subnetObject[FIELD.ID.NETWORK_START_ADDRESS], - "cidr-mask": subnetObject[FIELD.ID.CIDR_MASK] - }; - l3Network.subnets.push(subnet); - } - }); - } - $scope.service.instance[FIELD.ID.NETWORKS].push(l3Network); - } - - if (subInventoryResponseItem[FIELD.ID.GENERIC_VNF] != null) { - var genericVnfObject = subInventoryResponseItem[FIELD.ID.GENERIC_VNF]; - - var genericVnf = { - "name": genericVnfObject[FIELD.ID.VNF_NAME], - "id": $scope.counter++, - "itemType": COMPONENT.VNF, - "nodeType": genericVnfObject[FIELD.ID.VNF_TYPE], - "nodeId": genericVnfObject[FIELD.ID.VNF_ID], - "nodeStatus": genericVnfObject[FIELD.ID.ORCHESTRATION_STATUS], - "object": genericVnfObject, - "vfModules": [], - "volumeGroups": [], - "availableVolumeGroups": [] - }; - $scope.service.instance[FIELD.ID.VNFS].push(genericVnf); - - // look for volume-groups - if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { - angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(vfmodules, key) { - - if (vfmodules[FIELD.ID.VOLUME_GROUP] != null) { - var volumeGroupObject = vfmodules[FIELD.ID.VOLUME_GROUP]; - var volumeGroup = { "id": $scope.counter++, - "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME], - "itemType": FIELD.ID.VOLUME_GROUP, - "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID], - "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE], - "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS], - "object": volumeGroupObject, - "nodes": [] - }; - genericVnf[FIELD.ID.VOLUMEGROUPS].push(volumeGroup); - genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS].push(volumeGroup); - } - }); - } - // now we've loaded up the availableVolumeGroups, we can use it - if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { - angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(vfmodules, key) { - - if (vfmodules[FIELD.ID.VF_MODULE] != null) { - var vfModuleObject = vfmodules[FIELD.ID.VF_MODULE]; - var vfModule = { "id": $scope.counter++, - "name": vfModuleObject[FIELD.ID.VF_MODULE_NAME], - "itemType": FIELD.ID.VF_MODULE, - "nodeType": FIELD.ID.VF_MODULE, - "nodeStatus": vfModuleObject[FIELD.ID.ORCHESTRATION_STATUS], - "volumeGroups": [], - "object": vfModuleObject, - "networks": [] - }; - genericVnf[FIELD.ID.VF_MODULES].push(vfModule); - if (vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { - angular.forEach(vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(networks, key) { - if (networks[FIELD.ID.L3_NETWORK] != null) { - var l3NetworkObject = networks[FIELD.ID.L3_NETWORK]; - var l3Network = { "id": $scope.counter++, - "name": l3NetworkObject[FIELD.ID.NETWORK_NAME], - "itemType": FIELD.ID.L3_NETWORK, - "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID], - "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE], - "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS], - "object": l3NetworkObject, - "nodes": [] - }; - vfModule[FIELD.ID.NETWORKS].push(l3Network); - } - if (networks[FIELD.ID.VOLUME_GROUP] != null) { - var volumeGroupObject = networks[FIELD.ID.VOLUME_GROUP]; - - var volumeGroup = { "id": $scope.counter++, - "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME], - "itemType": FIELD.ID.VOLUME_GROUP, - "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID], - "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE], - "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS], - "object": volumeGroupObject, - "nodes": [] - }; - var tmpVolGroup = []; - - angular.forEach(genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS], function(avgroup, key) { - if (avgroup.name != volumeGroup.name) { - tmpVolGroup.push(avgroup); - } - }); - - genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS] = tmpVolGroup; - - vfModule[FIELD.ID.VOLUMEGROUPS].push(volumeGroup); - } - - }); - } - } - }); - } - } - }); - } - }); - }); - } - - $scope.handleInitialResponse = function(response) { - try { - $scope.enableCloseButton(true); - $scope.updateLog(response); - if (response.data.status < 200 || response.data.status > 202) { - $scope.showError(FIELD.ERROR.MSO); - $scope.status = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.data.status; - - return; - } - - $scope.setProgress(100); // done - $scope.status = FIELD.STATUS.DONE; - $scope.isSpinnerVisible = false; - - $scope.customer = response.data.customer; // get data from json - - $scope.customerList = []; - - angular.forEach($scope.customer, function(subVal, subKey) { - var cust = { "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID], "subscriberName": subVal[FIELD.ID.SUBNAME] }; - $scope.customerList.push(cust); - }); - - } catch (error) { - $scope.showContentError(error); - } - } - - $scope.autoGetSubs = function() { - /* - * Optionally comment in / out one of these method calls (or add a similar - * entry) to auto-invoke an entry when the test screen is redrawn. - */ - $scope.getSubs(); - - } - - $scope.updateLog = function(response) { +appDS2.controller("aaiSubscriberController", ["COMPONENT", "FIELD", "PARAMETER", "DataService", "PropertyService", "$scope", "$http", "$timeout", "$location", "$log", "$route", "$uibModal", "VIDCONFIGURATION", "UtilityService", "vidService", "AaiService", "MsoService", "OwningEntityService", "AsdcService","featureFlags", "$q", "_", + function (COMPONENT, FIELD, PARAMETER, DataService, PropertyService, $scope, $http, $timeout, $location, $log, $route, $uibModal, VIDCONFIGURATION, UtilityService, vidService, AaiService, MsoService, OwningEntityService, AsdcService, featureFlags, $q, _) { + + $scope.showVnfDetails = function (vnf) { + console.log("showVnfDetails"); + DataService.setVnfInstanceId(COMPONENT.VNF_INSTANCE_ID); + DataService + .setInventoryItem(aaiResult[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM][0]); + + $scope.$broadcast(COMPONENT.SHOW_COMPONENT_DETAILS, { + componentId: COMPONENT.VNF, + callbackFunction: callbackFunction + }); + } + $scope.popup = new Object(); + + + $scope.isPopupVisible = false; + $scope.defaultBaseUrl = ""; + $scope.responseTimeoutMsec = 60000; + + $scope.serviceTypes = [FIELD.PROMPT.SELECT_SERVICE, COMPONENT.UCPE_VMS, COMPONENT.SDN_L3_BONDING, COMPONENT.SDN_ETHERNET_INTERNET]; + $scope.defaultSubscriberName = [FIELD.PROMPT.SELECT_SUB]; + + $scope.verifyButtonEnabled = true; + + var callbackFunction = function (response) { + alert(response); + }; + + $scope.getSubs = function () { + $scope.init(); + $scope.fetchSubs(FIELD.PROMPT.FETCHING_SUBS); + $scope.fetchServices(); + + }; + + $scope.cancelCreateSI = function () { + + window.location.href = COMPONENT.WELCOME_PATH; + + }; + + $scope.getServiceTypes = function (globalCustomerId) { + DataService.setGlobalCustomerId(globalCustomerId); + DataService.setServiceIdList($scope.customerList) + + if (globalCustomerId !== "" && globalCustomerId !== undefined) { + window.location.href = COMPONENT.SERVICE_TYPE_LIST_PATH + $scope.serviceTypeList; + } + } + + $scope.refreshServiceTypes = function (globalCustomerId) { + DataService.setGlobalCustomerId(globalCustomerId); + + $scope.getServiceTypesList(); + } + + $scope.subId = ""; + $scope.createSubscriberName = ""; + $scope.serviceTypeList = {}; + $scope.custSubList = []; + $scope.getServiceTypesList = function () { + var notFound = true; + var globalCustomerId = DataService.getGlobalCustomerId(); + $scope.custSubList = DataService.getServiceIdList(); + if (globalCustomerId !== "" && globalCustomerId !== undefined) { + $scope.subId = globalCustomerId; + $scope.init(); + $scope.status = FIELD.PROMPT.FETCHING_SERVICE_TYPES; + DataService.setGlobalCustomerId(globalCustomerId); + + AaiService.getSubscriptionServiceTypeList(DataService + .getGlobalCustomerId(), function (response) { + notFound = false; + $scope.setProgress(100); // done + $scope.status = FIELD.STATUS.DONE; + $scope.isSpinnerVisible = false; + $scope.serviceTypeList = response; + for (var i = 0; i < $scope.custSubList.length; i++) { + if (globalCustomerId === $scope.custSubList[i].globalCustomerId) { + $scope.createSubscriberName = $scope.custSubList[i].subscriberName; + } + } + }, function (response) { // failure + $scope.showError(FIELD.ERROR.AAI); + $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_TYPES + response.status; + $scope.errorDetails = response.data; + }); + } else { + alert(FIELD.ERROR.SELECT); + } + + }; + + $scope.subList = []; + $scope.getAaiServiceModels = function (selectedServicetype, subName) { + DataService.setGlobalCustomerId(selectedServicetype); + DataService.setServiceIdList($scope.serviceTypeList) + DataService.setSubscriberName(subName); + + DataService.setSubscribers($scope.custSubList); + + if (selectedServicetype !== "" && selectedServicetype !== 'undefined'&& selectedServicetype !== undefined) { + $location.path(COMPONENT.CREATE_INSTANCE_PATH); + } + }; + + $scope.serviceTypeName = ""; + $scope.getAaiServiceModelsList = function () { + var globalCustomerId = ""; + var serviceTypeId = DataService.getGlobalCustomerId(); + $scope.serviceTypeList = DataService.getServiceIdList(); + $scope.createSubscriberName = DataService.getSubscriberName(); + $scope.status = FIELD.STATUS.FETCHING_SERVICE_CATALOG; + $scope.custSubList = DataService.getSubscribers(); + for (var i = 0; i < $scope.serviceTypeList.length; i++) { + if (parseInt(serviceTypeId) === i) { + $scope.serviceTypeName = $scope.serviceTypeList[i].name; + } + } + ; + for (var i = 0; i < $scope.custSubList.length; i++) { + if ($scope.createSubscriberName === $scope.custSubList[i].subscriberName) { + globalCustomerId = $scope.custSubList[i].globalCustomerId; + globalCustId = globalCustomerId; + } + } + ; + var pathQuery = ""; + + if (null !== globalCustomerId && "" !== globalCustomerId && undefined !== globalCustomerId + && null !== serviceTypeId && "" !== serviceTypeId && undefined !== serviceTypeId) { + pathQuery = COMPONENT.SERVICES_PATH + globalCustomerId + "/" + $scope.serviceTypeName; + } + + var namedQueryId = '6e806bc2-8f9b-4534-bb68-be91267ff6c8'; + AaiService.getServiceModelsByServiceType(namedQueryId, globalCustomerId, $scope.serviceTypeName, function (response) { // success + $scope.services = []; + if (angular.isArray(response.data['inventory-response-item']) && response.data['inventory-response-item'].length > 0 && response.data['inventory-response-item'][0]['inventory-response-items']) { + wholeData = response.data['inventory-response-item'][0]['inventory-response-items']['inventory-response-item']; + $scope.services = $scope.filterDataWithHigerVersion(response.data['inventory-response-item'][0]['inventory-response-items']['inventory-response-item']); + $scope.serviceType = response.data['inventory-response-item'][0]['service-subscription']['service-type']; + $scope.viewPerPage = 10; + $scope.totalPage = $scope.services.length / $scope.viewPerPage; + $scope.sortBy = "name"; + $scope.scrollViewPerPage = 2; + $scope.currentPage = 1; + $scope.searchCategory; + $scope.searchString = ""; + $scope.currentPageNum = 1; + $scope.isSpinnerVisible = false; + $scope.isProgressVisible = false; + } else { + $scope.status = "Failed to get service models from SDC."; + $scope.error = true; + $scope.isSpinnerVisible = false; + } + DataService.setServiceIdList(response); + }, function (response) { // failure + $scope.showError(FIELD.ERROR.AAI); + $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status; + $scope.errorDetails = response.data; + }); + + }; + + var globalCustId;// This value will be assigned only on create new service instance screen-macro + $scope.createType = "a la carte"; + $scope.deployService = function (service, hideServiceFields) { + hideServiceFields = hideServiceFields || false; + var temp = service; + service.uuid = service['service-instance']['model-version-id']; + + console.log("Instantiating ASDC service " + service.uuid); + + $http.get('rest/models/services/' + service.uuid) + .then(function (getServiceResponse) { + getServiceResponse.data['service'].serviceTypeName = $scope.serviceTypeName; + getServiceResponse.data['service'].createSubscriberName = $scope.createSubscriberName; + var serviceModel = getServiceResponse.data; + DataService.setServiceName(serviceModel.service.name); + + DataService.setModelInfo(COMPONENT.SERVICE, { + "modelInvariantId": serviceModel.service.invariantUuid, + "modelVersion": serviceModel.service.version, + "modelNameVersionId": serviceModel.service.uuid, + "modelName": serviceModel.service.name, + "description": serviceModel.service.description, + "serviceType": serviceModel.service.serviceType, + "serviceRole": serviceModel.service.serviceRole, + "category": serviceModel.service.category, + "serviceTypeName": serviceModel.service.serviceTypeName, + "createSubscriberName": serviceModel.service.createSubscriberName + }); + DataService.setHideServiceFields(hideServiceFields); + if (hideServiceFields) { + DataService.setServiceType($scope.serviceTypeName); + DataService.setGlobalCustomerId(globalCustId); + } + + DataService.setALaCarte(true); + $scope.createType = "a la carte"; + var broadcastType = "createComponent"; + + DataService.setShouldIncludeInAsyncInstantiationFlow(AsdcService.shouldTakeTheAsyncInstantiationFlow(serviceModel)); + + if (AsdcService.isMacro(serviceModel)) { + DataService.setALaCarte(false); + $scope.createType = "Macro"; + var convertedAsdcModel = UtilityService.convertModel(serviceModel); + + //console.log ("display inputs "); + //console.log (JSON.stringify ( convertedAsdcModel.completeDisplayInputs)); + + DataService.setModelInfo(COMPONENT.SERVICE, { + "modelInvariantId": serviceModel.service.invariantUuid, + "modelVersion": serviceModel.service.version, + "modelNameVersionId": serviceModel.service.uuid, + "modelName": serviceModel.service.name, + "description": serviceModel.service.description, + "category": serviceModel.service.category, + "serviceEcompNaming": serviceModel.service.serviceEcompNaming, + "inputs": serviceModel.service.inputs, + "displayInputs": convertedAsdcModel.completeDisplayInputs, + "serviceTypeName": serviceModel.service.serviceTypeName, + "createSubscriberName": serviceModel.service.createSubscriberName, + "serviceType": serviceModel.service.serviceType, + "serviceRole": serviceModel.service.serviceRole + }); + } + + $scope.$broadcast(broadcastType, { + componentId: COMPONENT.SERVICE, + callbackFunction: function (response) { + if (response.isSuccessful) { + vidService.setModel(serviceModel); + + var subscriberId = "Not Found"; + var serviceType = "Not Found"; + + var serviceInstanceId = response.instanceId; + + for (var i = 0; i < response.control.length; i++) { + if (response.control[i].id == "subscriberName") { + subscriberId = response.control[i].value; + } else if (response.control[i].id == "serviceType") { + serviceType = response.control[i].value; + } + } + + + $scope.refreshSubs(subscriberId, serviceType, serviceInstanceId); + + } + } + }); + + }, function (response) { + $log.error("Error: ", response); + }); + }; + + var wholeData=[]; + //extract all models from service instances properties and filter by the higher model version + $scope.filterDataWithHigerVersion = function(serviceData){ + + //get all service instances & models collected into array. key = model invariant id + var servicesByModelInvariant = _.reduce(serviceData, function(result, item) { + if (item['extra-properties']['extra-property']) { + var invariantId = item['extra-properties']['extra-property'][4]; + if (invariantId) { + (result[invariantId["property-value"]] || (result[invariantId["property-value"]] = [])).push(item); + } + } + return result; + }, {}); + + //iterate over the array and get the highest model version for each group of services + var filterDataServicesByVersion = []; + _.forEach(servicesByModelInvariant, function(items) { + var maxVersionItem = _.maxBy(items, function(item) { return parseFloat(item['extra-properties']['extra-property'][6]["property-value"]); }); + filterDataServicesByVersion.push(maxVersionItem); + }); + + return filterDataServicesByVersion; + }; + + $scope.tableData = []; + var oldData = []; + $scope.loadPreviousVersionData = function (version, invariantUUID) { + $scope.tableData = []; + oldData = []; + for (var i = 0; i < wholeData.length; i++) { + if (wholeData[i]['extra-properties']['extra-property'] && wholeData[i]['extra-properties']['extra-property'][4]['property-value'] == invariantUUID && version != wholeData[i]['extra-properties']['extra-property'][6]['property-value']) { + oldData.push(wholeData[i]); + } + } + $scope.tableData = oldData; + $scope.createType = "Previous Version"; + var broadcastType = "createTableComponent"; + $scope.componentName = invariantUUID; + $scope.$broadcast(broadcastType, { + componentId: COMPONENT.OLDVERSION, + callbackFunction: function (response) { + } + }); + } + $scope.cancelCreateSIType = function () { + + window.location.href = COMPONENT.SERVICE_MODLES_INSTANCES_SUBSCRIBERS_PATH; + + } + + $scope.fetchServices = function () { + var serviceIdList = []; + + AaiService.getServices2(function (response) { // success + DataService.setServiceIdList(response); + }, function (response) { // failure + $scope.showError(FIELD.ERROR.AAI); + $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status; + $scope.errorDetails = response.data; + }); + }; + + $scope.refreshSubs = function () { + $scope.init(); + $scope.fetchSubs(FIELD.PROMPT.REFRESH_SUB_LIST); + $scope.fetchServices(); + }; + + $scope.loadOwningEntity = function () { + OwningEntityService.getOwningEntityProperties(function (response) { + $scope.owningEntities = response.owningEntity; + $scope.projects = response.project; + + // working project name: owning-entity-id-val-cp8128 + // working owning entity name: owning-entity-id-val-cp8128 + }); + }; + + $scope.fetchSubs = function (status) { + $scope.status = status; + + AaiService.getSubList(function (response) { + $scope.setProgress(100); // done + $scope.status = FIELD.STATUS.DONE; + $scope.isSpinnerVisible = false; + $scope.customerList = response; + }, function (response) { // failure + $scope.showError(FIELD.ERROR.AAI); + $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status; + $scope.errorDetails = response.data; + }); + } + + $scope.getPermitted = function (item) { + return item.isPermitted || item[FIELD.ID.IS_PERMITTED]; + + } + + + $scope.getSubDetails = function () { + + $scope.init(); + //$scope.selectedSubscriber = $location.search().selectedSubscriber; + // $scope.selectedServiceInstance = $location.search().selectedServiceInstance; + $scope.status = FIELD.STATUS.FETCHING_SUB_DETAILS + $scope.selectedSubscriber; + var query = $location.url().replace($location.path(),''); + + $scope.displayData = []; + AaiService.searchServiceInstances(query).then(function (response) { + $scope.displayData = response.displayData; + if (response.displayData.length) + { + var first = response.displayData[0]; + $scope.selectedSubscriberId = first.globalCustomerId; + $scope.selectedSubscriberName = first.subscriberName; + } + $scope.viewPerPage = 10; + $scope.totalPage = $scope.displayData.length / $scope.viewPerPage; + $scope.scrollViewPerPage = 2; + $scope.currentPage = 1; + $scope.searchCategory; + $scope.searchString = ""; + $scope.currentPageNum = 1; + $scope.defaultSort = COMPONENT.SUBSCRIBER_NAME; + $scope.setProgress(100); // done + $scope.status = FIELD.STATUS.DONE; + $scope.isSpinnerVisible = false; + + }).catch(function (response) { + $scope.showError(FIELD.ERROR.AAI); + $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status; + $scope.errorDetails = response.data; + }); + }; + + + $scope.$on(COMPONENT.MSO_DELETE_REQ, function (event, request) { + // $log.debug("deleteInstance: request:"); + // $log.debug(request); + $scope.init(); + + $http.post($scope.baseUrl + request.url, { + requestDetails: request.requestDetails + }, { + timeout: $scope.responseTimeoutMsec + }).then($scope.handleInitialResponse) + ["catch"]($scope.handleServerError); + }); + + $scope.init = function () { + //PropertyService.setAaiBaseUrl("testaai"); + //PropertyService.setAsdcBaseUrl("testasdc"); + + // takes a default value, retrieves the prop value from the file system and sets it + var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec(); + PropertyService.setMsoMaxPollingIntervalMsec(msecs); + + // takes a default value, retrieves the prop value from the file system and sets it + var polls = PropertyService.retrieveMsoMaxPolls(); + PropertyService.setMsoMaxPolls(polls); + + /* + * Common parameters that would typically be set when the page is + * displayed for a specific service instance id. + */ + + $scope.baseUrl = $scope.defaultBaseUrl; + + $scope.isSpinnerVisible = true; + $scope.isProgressVisible = true; + $scope.isPopupVisible = true; + $scope.requestId = ""; + $scope.error = ""; + $scope.pollAttempts = 0; + $scope.log = ""; + $scope.enableCloseButton(false); + $scope.resetProgress(); + $scope.setProgress(2); // Show "a little" progress + } + + function getRelatedInstanceGroupsByVnfId(genericVnf) { + var model = vidService.getModel(); + if (model && model.vnfs && !_.isEmpty(model.vnfs)) { + Object.keys(model.vnfs).forEach(function (key) { + var vnf = model.vnfs[key]; + if (vnf.vfcInstanceGroups && !_.isEmpty(vnf.vfcInstanceGroups)) { + if (vnf.uuid === genericVnf.modelVersionId) { + AaiService.getInstanceGroupsByVNFInstanceId(genericVnf.nodeId, + function (response) { //success + handleGetRelatedInstanceGroupsResponseForVnf(response, genericVnf); + }, + function (response) { //failure + $scope.showError(FIELD.ERROR.AAI); + $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_INSTANCE_DATA + response.status; + $scope.errorDetails = response.data; + } + ) + } + } + }) + } + } + + function resolveModelDataIfMissing(modelVersionId) { + var model = vidService.getModel(); + if (model && model.service && model.service.uuid === modelVersionId) { + return $q.resolve(); // no need to resolve anything + } else { + // resolve model and value of isPermitted + return resolveIfIsPermitted() + .then(function() { + return getAsdcModelByVersionId(modelVersionId); + }) + } + } + + function resolveIfIsPermitted() { + var deferred = $q.defer(); + AaiService.searchServiceInstances( + '?subscriberId=' + $location.search().subscriberId + + '&serviceInstanceIdentifier=' + $location.search().serviceInstanceId) + .then(function (response) { + if (response.displayData && response.displayData.length) { + var first = response.displayData[0]; + $scope.isPermitted = first.isPermitted; + deferred.resolve(first.isPermitted); + } else { + deferred.reject("some error while resolveIfIsPermitted") + } + }); + + return deferred.promise; + } + + var serviceNetworkVlans = []; + var vnfNetworksAndVlans = []; + + $scope.getComponentList = function (event, request) { + + $scope.isSpinnerVisible = true; + $scope.isProgressVisible = true; + $scope.isPopupVisible = true; + $scope.requestId = ""; + $scope.error = ""; + $scope.pollAttempts = 0; + $scope.log = ""; + + $scope.resetProgress(); + $scope.setProgress(2); // Show "a little" progress + + $scope.globalCustomerId = $location.search().subscriberId; + $scope.serviceType = $location.search().serviceType; + $scope.serviceInstanceId = $location.search().serviceInstanceId; + $scope.subscriberName = $location.search().subscriberName; + + //$scope.getAsdcModel($location.search().modelUuid); + + //make sure view/edit don't open new deploy service popup + DataService.setShouldIncludeInAsyncInstantiationFlow(false); + + return getModelVersionIdForServiceInstance({ + globalCustomerId: $location.search().subscriberId, + serviceInstanceId: $location.search().serviceInstanceId, + aaiModelVersionId: $location.search().aaiModelVersionId + }) + .then(resolveModelDataIfMissing) + .then($scope.prepareScopeWithModel) + .then(function () { + return AaiService.getVlansByNetworksMapping($scope.globalCustomerId, $scope.serviceType, $scope.serviceInstanceId, $scope.service.model.service.uuid); + }) + .then(function (vlanByNetwork) { + serviceNetworkVlans = vlanByNetwork.serviceNetworks ? vlanByNetwork.serviceNetworks : []; + vnfNetworksAndVlans = vlanByNetwork.vnfNetworks ? vlanByNetwork.vnfNetworks : []; + $log.debug('vlanByNetwork', vlanByNetwork); + $scope.namedQueryId = VIDCONFIGURATION.COMPONENT_LIST_NAMED_QUERY_ID; + $scope.status = FIELD.STATUS.FETCHING_SERVICE_INST_DATA + $scope.serviceInstanceId; + + $scope.hasFabricConfigurations = !UtilityService.isObjectEmpty($scope.service.model.fabricConfigurations); + return AaiService.runNamedQuery($scope.namedQueryId, $scope.globalCustomerId, $scope.serviceType, $scope.serviceInstanceId, + function (response) { //success + $scope.handleInitialResponseInventoryItems(response); + $scope.setProgress(100); // done + $scope.status = FIELD.STATUS.DONE; + $scope.isSpinnerVisible = false; + //TODO + }, + function (response) { //failure + $scope.showError(FIELD.ERROR.AAI); + $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_INSTANCE_DATA + response.status; + $scope.errorDetails = response.data; + } + ); + }); + }; + + $scope.handleServerError = function (response, status) { + alert(response.statusText); + }; + + function handleGetRelatedInstanceGroupsResponseForVnf(response, genericVnf) { + _.forEach(response.data, function (instanceGroup) { + var newInstanceGroup = { + name: instanceGroup.name, + type: instanceGroup.type + }; + genericVnf.instanceGroups.push(newInstanceGroup); + }); + } + + + + function getModelVersionIdForServiceInstance(instance) { + if (UtilityService.hasContents(instance.aaiModelVersionId)) { + return $q.resolve(instance.aaiModelVersionId); + } else if ($scope.modelVersionIdForServiceInstance + && $scope.modelVersionIdForServiceInstance.globalCustomerId === instance.globalCustomerId + && $scope.modelVersionIdForServiceInstance.serviceInstanceId === instance.serviceInstanceId + ) { + return $q.resolve($scope.modelVersionIdForServiceInstance.aaiModelVersionId); + } else { + $scope.status = FIELD.STATUS.FETCHING_SERVICE_INST_DATA + $scope.serviceInstanceId; + return AaiService.getModelVersionId(instance.globalCustomerId, instance.serviceInstanceId) + .then(function (aaiModelVersionId) { + $scope.modelVersionIdForServiceInstance = { + globalCustomerId: instance.globalCustomerId, + serviceInstanceId: instance.serviceInstanceId, + aaiModelVersionId: aaiModelVersionId + }; + return $q.resolve(aaiModelVersionId); + }); + } + } + + $scope.onViewEditClick = function (disData) { + $log.debug("disData", disData, null, 4); + + getModelVersionIdForServiceInstance(disData) + .then(getAsdcModelByVersionId, handleErrorGettingModelVersion) + .then(navigateToViewEditPage); + + + function navigateToViewEditPage() { + window.location.href = AsdcService.shouldTakeTheDrawingBoardViewEdit(vidService.getModel()) ? + drawingBoardViewEditUrl() : oldViewEditUrl(); + } + + function oldViewEditUrl() { + return COMPONENT.INSTANTIATE_ROOT_PATH + disData.globalCustomerId + + COMPONENT.SUBSCRIBERNAME_SUB_PATH + disData.subscriberName + + COMPONENT.SERVICETYPE_SUB_PATH + disData.serviceType + + COMPONENT.SERVICEINSTANCEID_SUB_PATH + disData.serviceInstanceId + + COMPONENT.MODELVERSIONID_SUB_PATH + disData.aaiModelVersionId + + COMPONENT.IS_PERMITTED_SUB_PATH + disData.isPermitted; + } + + function drawingBoardViewEditUrl() { + return 'serviceModels.htm#/servicePlanning/EDIT?' + + 'serviceModelId=' + disData.aaiModelVersionId + + '&subscriberId=' + disData.globalCustomerId + + '&serviceType=' + disData.serviceType + + '&serviceInstanceId=' + disData.serviceInstanceId; + } + }; + + function handleErrorGettingModelVersion(err) { + $log.error("aaiSubscriber getModelVersionIdForServiceInstance - " + err); + $scope.errorMsg = err; + alert($scope.errorMsg); + return $q.reject(); + } + + function getAsdcModelByVersionId(aaiModelVersionId) { + // aaiModelVersionId is the model uuid + var pathQuery = COMPONENT.SERVICES_PATH + aaiModelVersionId; + return $http({ + method: 'GET', + url: pathQuery + }).then(function (response) { + if (response.headers()['content-type'].includes('json')) { + vidService.setModel(response.data); + console.log("aaiSubscriber getAsdcModel DONE!!!!"); + } else { + // the response is erroneous + console.log("aaiSubscriber getAsdcModel BAD RESPONSE"); + errorCallback(response); + return $q.reject() + } + }, errorCallback); + + function errorCallback(response) { + $log.error("aaiSubscriber getAsdcModel - " + FIELD.ERROR.NO_MATCHING_MODEL_AAI + aaiModelVersionId); + $scope.errorMsg = FIELD.ERROR.NO_MATCHING_MODEL_AAI + aaiModelVersionId; + alert($scope.errorMsg); + } + } + + function returnMatchingServiceSubscription(serviceSubs, serviceId){ + var orchStatus; + serviceSubs.forEach(function(item){ + if (item[FIELD.ID.SERVICE_INSTANCES] != null) { + item[FIELD.ID.SERVICE_INSTANCES][FIELD.ID.SERVICE_INSTANCE].forEach(function (service) { + if (service[FIELD.ID.SERVICE_INSTANCE_ID] === serviceId) { + orchStatus = service['orchestration-status'] + } + }) + } + }); + return orchStatus; + } + + $scope.getTenants = function (globalCustomerId) { + $http.get(FIELD.ID.AAI_GET_TENTANTS + globalCustomerId) + .then(function (response) { + return response.data; + //$location.path("/instantiate"); + }, function (response) { + //TODO + }); + } + + $scope.isConfigurationDataAvailiable = function (configuration) { + $log.debug(configuration); + return configuration.configData && (!configuration.configData.errorDescription); + } + + $scope.isActivateDeactivateEnabled = function(btnType) { + if ($scope.serviceOrchestrationStatus) { + var status = $scope.serviceOrchestrationStatus.toLowerCase(); + switch (btnType) { + case "activate": + return _.includes(COMPONENT.ACTIVATE_SERVICE_STATUSES, status); + break; + case "deactivate": + return status === 'active'; + break; + } + } + + return false; + }; + + $scope.isShowVerifyService = function () { + return featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_SHOW_VERIFY_SERVICE); + } + + $scope.isEnableVerifyService = function () { + //Button should only be enabled when the service type is A la carte + if (DataService.getALaCarte()) { + return $scope.verifyButtonEnabled; + } + return false; + }; + + $scope.activateVerifyService = function () { + $scope.verifyButtonEnabled = false; + let url = COMPONENT.VERIFY_SERVICE_URL; + + let config = { + headers: { + 'Content-Type': 'application/json' + } + }; + + let data = { + "serviceInstanceList": [ + { + "serviceInstanceId": $scope.serviceInstanceId, + "modelVersionId": $scope.service.model.service.uuid, + "modelInvariantId": $scope.service.model.service.invariantUuid, + "customerId": $scope.globalCustomerId, + "serviceType": $scope.service.instance.serviceType, + } + ] + }; + AaiService.postPOMBAverificationRequest(url, data, config); + + }; + + $scope.isShowAssignmentsEnabled = function () { + if (featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_SHOW_ASSIGNMENTS)) { + if ($scope.serviceOrchestrationStatus) { + return $scope.serviceOrchestrationStatus.toLowerCase() === 'assigned'; + } + } + return false; + }; + + $scope.isActivateFabricConfiguration = function () { + + if (featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS) && $scope.hasFabricConfigurations) { + if ($scope.serviceOrchestrationStatus) { + return $scope.serviceOrchestrationStatus.toLowerCase() === 'assigned'; + } + } + return false; + }; + + $scope.isResumeShown = function (status) { + var vfModuleStatus = status.toLowerCase(); + var serviceStatus = $scope.serviceOrchestrationStatus && $scope.serviceOrchestrationStatus.toLowerCase(); + return _.includes(['pendingactivation', 'assigned'], vfModuleStatus) && !$scope.isActivateDeactivateEnabled("activate"); + }; + + $scope.handleInitialResponseInventoryItems = function (response) { + + $scope.inventoryResponseItemList = response.data[FIELD.ID.INVENTORY_RESPONSE_ITEM]; // get data from json + $log.debug($scope.inventoryResponseItemList); + + $scope.displayData = []; + $scope.vnfs = []; + + $scope.counter = 100; + + $scope.subscriberName = ""; + + $scope.allConfigurationsAssigned = true; + // just look up the subscriber name in A&AI here... + AaiService.getSubscriberName($scope.globalCustomerId, function (response) { + $scope.subscriberName = response.subscriberName; + DataService.setSubscriberName($scope.subscriberName); + $scope.serviceOrchestrationStatus = returnMatchingServiceSubscription(response.serviceSubscriptions[FIELD.ID.SERVICE_SUBSCRIPTION], $scope.serviceInstanceId); + if ($scope.serviceOrchestrationStatus.toLowerCase() !== FIELD.STATUS.ASSIGNED.toLowerCase()) { + $scope.allConfigurationsAssigned = false; + } + angular.forEach($scope.inventoryResponseItemList, function (inventoryResponseItem, key) { + + $scope.inventoryResponseItem = inventoryResponseItem; + + $scope.service.instance = { + "name": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE][FIELD.ID.SERVICE_INSTANCE_NAME], + "serviceInstanceId": $scope.serviceInstanceId, + "serviceType": $scope.serviceType, + "globalCustomerId": $scope.globalCustomerId, + "subscriberName": $scope.subscriberName, + "id": $scope.serviceInstanceId, + "inputs": { + "a": { + "type": PARAMETER.STRING, + "description": FIELD.PROMPT.VAR_DESCRIPTION_A, + "default": FIELD.PROMPT.DEFAULT_A + }, + "b": { + "type": PARAMETER.STRING, + "description": FIELD.PROMPT.VAR_DESCRIPTION_B, + "default": FIELD.PROMPT.DEFAULT_B + } + }, + "object": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE], + "vnfs": [], + "networks": [], + "configurations": [] + }; + + var portMirroringConfigurationIds = []; + if (inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { + + angular.forEach(inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (subInventoryResponseItem, key) { + // i expect to find vnfs now + + if (subInventoryResponseItem[FIELD.ID.L3_NETWORK] != null) { + var l3NetworkObject = subInventoryResponseItem[FIELD.ID.L3_NETWORK]; + var l3Network = { + "id": $scope.counter++, + "name": l3NetworkObject[FIELD.ID.NETWORK_NAME], + "itemType": FIELD.ID.L3_NETWORK, + "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID], + "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE], + "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS], + "object": l3NetworkObject, + "nodes": [], + "subnets": [], + "vlans": [] + }; + if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { + //console.log ("subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS]="); + //console.log (JSON.stringify (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS], null, 4 )); + angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (subSubInventoryResponseItem, key) { + //console.log (JSON.stringify (subSubInventoryResponseItem, null, 4 )); + var subnet = {}; + var subnetObject; + if (subSubInventoryResponseItem[FIELD.ID.SUB_NET] != null) { + subnetObject = subSubInventoryResponseItem[FIELD.ID.SUB_NET]; + subnet = { + "subnet-id": subnetObject[FIELD.ID.SUBNET_ID], + "subnet-name": subnetObject[FIELD.ID.SUBNET_NAME], + "gateway-address": subnetObject[FIELD.ID.GATEWAY_ADDRESS], + "network-start-address": subnetObject[FIELD.ID.NETWORK_START_ADDRESS], + "cidr-mask": subnetObject[FIELD.ID.CIDR_MASK] + }; + l3Network.subnets.push(subnet); + } + }); + } + + + var networkObj = _.find(serviceNetworkVlans, { 'networkId': l3Network.nodeId}); + if (networkObj !== undefined && networkObj.vlans !== undefined) { + l3Network["vlans"] = networkObj.vlans; + } + $scope.service.instance[FIELD.ID.NETWORKS].push(l3Network); + } + + if (subInventoryResponseItem[FIELD.ID.GENERIC_VNF] != null) { + var genericVnfObject = subInventoryResponseItem[FIELD.ID.GENERIC_VNF]; + + var genericVnf = { + "name": genericVnfObject[FIELD.ID.VNF_NAME], + "id": $scope.counter++, + "itemType": COMPONENT.VNF, + "nodeType": genericVnfObject[FIELD.ID.VNF_TYPE], + "nodeId": genericVnfObject[FIELD.ID.VNF_ID], + "nodeStatus": genericVnfObject[FIELD.ID.ORCHESTRATION_STATUS], + "modelVersionId" : genericVnfObject[FIELD.ID.MODEL_VERSION_ID], + "object": genericVnfObject, + "vfModules": [], + "volumeGroups": [], + "instanceGroups": [], + "availableVolumeGroups": [], + "networks": [] + }; + + var vnfNetworkObj = _.find(vnfNetworksAndVlans, { 'vnfId': genericVnf.nodeId}); + if (vnfNetworkObj !== undefined && vnfNetworkObj.networks !== undefined) { + genericVnf["networks"] = vnfNetworkObj.networks; + } + + $scope.service.instance[FIELD.ID.VNFS].push(genericVnf); + getRelatedInstanceGroupsByVnfId(genericVnf); + + + + // look for volume-groups + if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { + angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (vfmodules, key) { + + if (vfmodules[FIELD.ID.VOLUME_GROUP] != null) { + var volumeGroupObject = vfmodules[FIELD.ID.VOLUME_GROUP]; + var volumeGroup = { + "id": $scope.counter++, + "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME], + "itemType": FIELD.ID.VOLUME_GROUP, + "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID], + "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE], + "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS], + "object": volumeGroupObject, + "nodes": [] + }; + genericVnf[FIELD.ID.VOLUMEGROUPS].push(volumeGroup); + genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS].push(volumeGroup); + } + }); + } + // now we've loaded up the availableVolumeGroups, we can use it + if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { + angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (vfmodules, key) { + + if (vfmodules[FIELD.ID.VF_MODULE] != null) { + var vfModuleObject = vfmodules[FIELD.ID.VF_MODULE]; + var vfModule = { + "id": $scope.counter++, + "name": vfModuleObject[FIELD.ID.VF_MODULE_NAME], + "itemType": FIELD.ID.VF_MODULE, + "nodeType": FIELD.ID.VF_MODULE, + "nodeStatus": vfModuleObject[FIELD.ID.ORCHESTRATION_STATUS], + "volumeGroups": [], + "object": vfModuleObject, + "networks": [] + }; + genericVnf[FIELD.ID.VF_MODULES].push(vfModule); + if (vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) { + angular.forEach(vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (networks, key) { + if (networks[FIELD.ID.L3_NETWORK] != null) { + var l3NetworkObject = networks[FIELD.ID.L3_NETWORK]; + var l3Network = { + "id": $scope.counter++, + "name": l3NetworkObject[FIELD.ID.NETWORK_NAME], + "itemType": FIELD.ID.L3_NETWORK, + "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID], + "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE], + "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS], + "object": l3NetworkObject, + "nodes": [] + }; + vfModule[FIELD.ID.NETWORKS].push(l3Network); + } + if (networks[FIELD.ID.VOLUME_GROUP] != null) { + var volumeGroupObject = networks[FIELD.ID.VOLUME_GROUP]; + + var volumeGroup = { + "id": $scope.counter++, + "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME], + "itemType": FIELD.ID.VOLUME_GROUP, + "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID], + "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE], + "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS], + "object": volumeGroupObject, + "nodes": [] + }; + var tmpVolGroup = []; + + angular.forEach(genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS], function (avgroup, key) { + if (avgroup.name != volumeGroup.name) { + tmpVolGroup.push(avgroup); + } + }); + + genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS] = tmpVolGroup; + + vfModule[FIELD.ID.VOLUMEGROUPS].push(volumeGroup); + } + + }); + } + } + }); + } + } + + + if (subInventoryResponseItem[FIELD.ID.GENERIC_CONFIGURATION] != null) { + var configObject = subInventoryResponseItem[FIELD.ID.GENERIC_CONFIGURATION]; + var config = { + "id": $scope.counter++, + "name": configObject[FIELD.ID.CONFIGURATION_NAME], + "itemType": FIELD.ID.CONFIGURATION, + "nodeId": configObject[FIELD.ID.CONFIGURATION_ID], + "nodeType": configObject[FIELD.ID.CONFIGURATION_TYPE], + "nodeStatus": configObject[FIELD.ID.ORCHESTRATION_STATUS], + "modelInvariantId": configObject[FIELD.ID.MODEL_INVAR_ID], + "modelVersionId": configObject[FIELD.ID.MODEL_VERSION_ID], + "modelCustomizationId": configObject[FIELD.ID.MODEL_CUSTOMIZATION_ID], + "object": configObject, + "ports": [], + "configData" : null + }; + if( !$scope.hasFabricConfigurations ) { + portMirroringConfigurationIds.push(configObject[FIELD.ID.CONFIGURATION_ID]); + $scope.service.instance[FIELD.ID.CONFIGURATIONS].push(config); + $scope.allowConfigurationActions = [FIELD.STATUS.AAI_ACTIVE, FIELD.STATUS.AAI_INACTIVE, FIELD.STATUS.AAI_CREATED].indexOf(config.nodeStatus) != -1; + } else { + if (config.nodeStatus.toLowerCase() !== FIELD.STATUS.ASSIGNED.toLowerCase()) { + $scope.allConfigurationsAssigned = false; + if ($scope.isActivateFabricConfiguration()) { + $scope.errorMsg = "Activate fabric configuration button is not available as some of the configuration objects are not in Assigned status. Check MSO logs for the reasons for this abnormal case."; + } + } + } + } + + }); + + AaiService.getPortMirroringData(portMirroringConfigurationIds).then(function(result){ + angular.forEach($scope.service.instance[FIELD.ID.CONFIGURATIONS], function(config){ + config['configData'] = result.data[config['nodeId']]; + + if (config.configData && config.configData.errorDescription) { + $scope.errorMsg = ($scope.errorMsg ? $scope.errorMsg + "\n" : "") + + "Cannot read cloud-region for configuration \"" + config.name + "\": " + + config.configData.errorDescription; + } + }); + }); + + AaiService.getPortMirroringSourcePorts(portMirroringConfigurationIds).then(function(result){ + angular.forEach($scope.service.instance[FIELD.ID.CONFIGURATIONS], function(config){ + angular.forEach(result.data[config['nodeId']], function(port){ + if (port.errorDescription) { + $scope.errorMsg = ($scope.errorMsg ? $scope.errorMsg + "\n" : "") + + "Cannot read a source port for configuration \"" + config.name + "\": " + + port.errorDescription; + } else { + config.ports.push({ + "portId": port[FIELD.ID.PORT_ID], + "portName": port[FIELD.ID.PORT_NAME], + "portStatus": port[FIELD.ID.PORT_MIRRORED] === true ? FIELD.STATUS.AAI_ENABLED : FIELD.STATUS.AAI_DISABLED + }); + } + }); + }); + }); + + } + }); + + var aaiNetworkIds = _.map(serviceNetworkVlans, 'networkId'); + var serviceInstanceNetworkIds = _.map($scope.service.instance[FIELD.ID.NETWORKS], 'nodeId'); + var isContains = aaiNetworkIds.every(function(val) { return serviceInstanceNetworkIds.indexOf(val) >= 0; }); + if (aaiNetworkIds.length && !isContains) { + $log.error("vlansByNetworks contain network that not found in service instance", aaiNetworkIds, serviceInstanceNetworkIds); + } + + }); + }; + + + + + $scope.handleInitialResponse = function (response) { + try { + $scope.enableCloseButton(true); + $scope.updateLog(response); + if (response.data.status < 200 || response.data.status > 202) { + $scope.showError(FIELD.ERROR.MSO); + $scope.status = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.data.status; + + return; + } + + $scope.setProgress(100); // done + $scope.status = FIELD.STATUS.DONE; + $scope.isSpinnerVisible = false; + + $scope.customer = response.data.customer; // get data from json + + $scope.customerList = []; + + angular.forEach($scope.customer, function (subVal, subKey) { + var cust = { + "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID], + "subscriberName": subVal[FIELD.ID.SUBNAME], + "isPermitted": subVal[FIELD.ID.IS_PERMITTED] + }; + + $scope.customerList.push(cust); + }); + + } catch (error) { + $scope.showContentError(error); + } + } + + $scope.autoGetSubs = function () { + /* + * Optionally comment in / out one of these method calls (or add a similar + * entry) to auto-invoke an entry when the test screen is redrawn. + */ + $scope.getSubs(); + + } + + $scope.updateLog = function (response) { // $scope.log = UtilityService.getCurrentTime() + " HTTP Status: " + // UtilityService.getHttpStatusText(response.data.status) + "\n" + // angular.toJson(response.data.entity, true) + "\n\n" + $scope.log; // UtilityService.checkUndefined("entity", response.data.entity); // UtilityService.checkUndefined("status", response.data.status); - } - - $scope.handleServerError = function(response, status) { - $scope.enableCloseButton(true); - var message = UtilityService.getHttpErrorMessage(response); - if (message != ""){ - message = " (" + message + ")"; - } - $scope.showError(FIELD.ERROR.SYSTEM_ERROR + message); - } - - $scope.showContentError = function(message) { - // $log.debug(message); - console.log(message); - if (UtilityService.hasContents(message)) { - $scope.showError("System failure (" + message + ")"); - } else { - $scope.showError(FIELD.ERROR.SYSTEM_ERROR); - } - } - - $scope.showError = function(message) { - $scope.isSpinnerVisible = false; - $scope.isProgressVisible = false; - $scope.error = message; - $scope.status = FIELD.STATUS.ERROR; - } - - $scope.close = function() { - if ($scope.timer != undefined) { - $timeout.cancel($scope.timer); - } - $scope.isPopupVisible = false; - } - - - - /* - * Consider converting the progress bar mechanism, the disabled button handling - * and the following methods to generic Angular directive(s) and/or approach. - */ - - $scope.enableCloseButton = function(isEnabled) { - var selector = FIELD.STYLE.MSO_CTRL_BTN; - - $scope.isCloseEnabled = isEnabled; - - if (isEnabled) { - $(selector).addClass(FIELD.STYLE.BTN_PRIMARY).removeClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.PRIMARY); - } else { - $(selector).removeClass(FIELD.STYLE.BTN_PRIMARY).addClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.DISABLED); - } - } - - $scope.resetProgress = function() { - $scope.percentProgress = 0; - $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_INFO; - } - - $scope.setProgress = function(percentProgress) { - percentProgress = parseInt(percentProgress); - if (percentProgress >= 100) { - $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_SUCCESS; - } - - if (percentProgress < $scope.percentProgress) { - return; - } - - $scope.percentProgress = percentProgress; - $scope.progressWidth = {width: percentProgress + "%"}; - if (percentProgress >= 5) { - $scope.progressText = percentProgress + " %"; - } else { - // Hidden since color combination is barely visible when progress portion is narrow. - $scope.progressText = ""; - } - } - - $scope.reloadRoute = function() { - $route.reload(); - } - - $scope.prevPage = function() { - $scope.currentPage--; - } - - $scope.nextPage = function() { - $scope.currentPage++; - } - $scope.serviceInstanceses = [{"sinstance":FIELD.NAME.SERVICE_INSTANCE_Id},{"sinstance":FIELD.NAME.SERVICE_INSTANCE_NAME}] - $scope.getSubscriberDet = function(selectedCustomer,selectedserviceinstancetype,selectedServiceInstance){ - - var sintype =selectedserviceinstancetype; - if (selectedServiceInstance != "" && selectedServiceInstance != undefined) { - selectedServiceInstance.trim(); - - // check with A&AI - $http.get(COMPONENT.AAI_GET_SERVICE_INSTANCE_PATH + selectedServiceInstance+"/"+sintype + "?r=" + Math.random(), { - - },{ - timeout: $scope.responseTimeoutMsec - }).then(function(response) { - var notFound = true; - if (angular.isArray(response.data[FIELD.ID.RESULT_DATA])) { - var item = []; - var urlParts = []; - item = response.data[FIELD.ID.RESULT_DATA][0]; - var url = item[FIELD.ID.RESOURCE_LINK]; - var globalCustomerId = ""; - var serviceSubscription = ""; - // split it and find the customer Id and service-subscription - urlParts = url.split("/"); - if (urlParts[7] === FIELD.ID.CUSTOMER) { - globalCustomerId = urlParts[8]; - } - if (urlParts[10] === FIELD.ID.SERVICE_SUBSCRIPTION) { - serviceSubscription = urlParts[11]; - } - - if (globalCustomerId !== "") { - notFound = false; - window.location.href = COMPONENT.SELECTED_SERVICE_SUB_PATH + serviceSubscription + COMPONENT.SELECTEDSUBSCRIBER_SUB_PATH + globalCustomerId + COMPONENT.SELECTEDSERVICEINSTANCE_SUB_PATH + selectedServiceInstance; - } - } - if (notFound) { - alert(FIELD.ERROR.SERVICE_INST_DNE); - } - }); // add a failure callback... - } else if (selectedCustomer != null) { - window.location.href = COMPONENT.SELECTED_SUB_PATH + selectedCustomer; - } else { - alert(FIELD.ERROR.SELECT); - } - }; - }]).directive('restrictInput', function(){ - - return { - - restrict: 'A', - require: 'ngModel', - link: function($scope, element, attr, ctrl){ - ctrl.$parsers.unshift(function(viewValue){ - - var types = $scope.$eval(attr.restrictInput); - if(!types.regex && types.type){ - - switch(types.type){ - case 'Service Instance Name' : types.regex = '^[a-zA-Z0-9-_]*$'; break; - default: types.regex= ''; - } - } - var reg = new RegExp(types.regex); - if(reg.test(viewValue)){ - return viewValue; - } else { - var overrideValue = (reg.test(viewValue) ? viewValue : ''); - element.val(overrideValue); - return overrideValue; - } - }); - } - }; + } + + $scope.handleServerError = function (response, status) { + $scope.enableCloseButton(true); + var message = UtilityService.getHttpErrorMessage(response); + if (message != "") { + message = " (" + message + ")"; + } + $scope.showError(FIELD.ERROR.SYSTEM_ERROR + message); + } + + $scope.showContentError = function (message) { + // $log.debug(message); + console.log(message); + if (UtilityService.hasContents(message)) { + $scope.showError("System failure (" + message + ")"); + } else { + $scope.showError(FIELD.ERROR.SYSTEM_ERROR); + } + } + + $scope.showError = function (message) { + $scope.isSpinnerVisible = false; + $scope.isProgressVisible = false; + $scope.error = message; + $scope.status = FIELD.STATUS.ERROR; + } + + $scope.close = function () { + if ($scope.timer != undefined) { + $timeout.cancel($scope.timer); + } + $scope.isPopupVisible = false; + } + + + /* + * Consider converting the progress bar mechanism, the disabled button handling + * and the following methods to generic Angular directive(s) and/or approach. + */ + + $scope.enableCloseButton = function (isEnabled) { + var selector = FIELD.STYLE.MSO_CTRL_BTN; + + $scope.isCloseEnabled = isEnabled; + + if (isEnabled) { + $(selector).addClass(FIELD.STYLE.BTN_PRIMARY).removeClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.PRIMARY); + } else { + $(selector).removeClass(FIELD.STYLE.BTN_PRIMARY).addClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.DISABLED); + } + } + + $scope.resetProgress = function () { + $scope.percentProgress = 0; + $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_INFO; + } + + $scope.setProgress = function (percentProgress) { + percentProgress = parseInt(percentProgress); + if (percentProgress >= 100) { + $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_SUCCESS; + } + + if (percentProgress < $scope.percentProgress) { + return; + } + + $scope.percentProgress = percentProgress; + $scope.progressWidth = {width: percentProgress + "%"}; + if (percentProgress >= 5) { + $scope.progressText = percentProgress + " %"; + } else { + // Hidden since color combination is barely visible when progress portion is narrow. + $scope.progressText = ""; + } + } + + $scope.reloadRoute = function () { + $route.reload(); + } + + $scope.prevPage = function () { + $scope.currentPage--; + } + + var getAicZoneAndSendToMso = function (msoType, requestParams) { + AaiService.getAicZoneForPNF( + $scope.service.instance.globalCustomerId, + $scope.service.instance.serviceType, + $scope.service.instance.serviceInstanceId, function (aicZone) { + + requestParams.aicZone = aicZone; + + openMsoModal(msoType, requestParams); + }); + }; + + var activateDeactivateServiceInstance = function (msoType) { + var requestParams = { + model: $scope.service.model, + instance: $scope.service.instance + }; + + if (DataService.getLoggedInUserId()) { + requestParams.userId = DataService.getLoggedInUserId(); + getAicZoneAndSendToMso(msoType, requestParams) + } else { + AaiService.getLoggedInUserID(function (response) { + var userID = response.data; + DataService.setLoggedInUserId(userID); + requestParams.userId = userID; + + getAicZoneAndSendToMso(msoType, requestParams); + }); + } + }; + + + var activateFabricConfigurationInstance = function (msoType) { + var requestParams = { + model: $scope.service.model, + service: $scope.service, + serviceInstanceId: $scope.serviceInstanceId + }; + + if (DataService.getLoggedInUserId()) { + requestParams.userId = DataService.getLoggedInUserId(); + openMsoModal(COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_REQ, requestParams); + } else { + AaiService.getLoggedInUserID(function (response) { + var userID = response.data; + DataService.setLoggedInUserId(userID); + requestParams.userId = userID; + openMsoModal(COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_REQ, requestParams); + }); + } + }; + + $scope.showAssignmentsSDNC = function () { + + if ($scope.service && $scope.service.instance) { + return VIDCONFIGURATION.SDNC_SHOW_ASSIGNMENTS_URL.replace("" , $scope.service.instance.id); + } + return null; + }; + + $scope.activateFabricConfigurationMSO = function () { + activateFabricConfigurationInstance(COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_REQ); + }; + + $scope.activateMSOInstance = function () { + + activateDeactivateServiceInstance(COMPONENT.MSO_ACTIVATE_SERVICE_REQ); + }; + + $scope.deactivateMSOInstance = function () { + + activateDeactivateServiceInstance(COMPONENT.MSO_DEACTIVATE_SERVICE_REQ); + }; + + + $scope.deleteConfiguration = function (serviceObject, configuration) { + AaiService.getLoggedInUserID(function (response) { + DataService.setLoggedInUserId(response.data); + var requestParams = { + serviceModel: { + "modelType": "configuration", + "modelInvariantId": serviceObject.model.service.invariantUuid, + "modelVersionId": serviceObject.model.service.uuid, + "modelName": serviceObject.model.service.name, + "modelVersion": serviceObject.model.service.version + }, + configurationModel: { + "modelType": "configuration", + "modelInvariantId": configuration.modelInvariantId, + "modelVersionId": configuration.modelVersionId, + "modelCustomizationId": configuration.modelCustomizationId + }, + serviceInstanceId: serviceObject.instance.serviceInstanceId, + configurationId: configuration.nodeId, + configStatus: configuration.DELETE, + userId: DataService.getLoggedInUserId() + }; + + openMsoModal(COMPONENT.MSO_DELETE_CONFIGURATION_REQ, requestParams, configuration); + }); + + }; + + $scope.toggleConfigurationStatus = function (serviceObject, configuration) { + AaiService.getLoggedInUserID(function (response) { + DataService.setLoggedInUserId(response.data); + var requestParams = { + serviceModel: { + "modelType": "service", + "modelInvariantId": serviceObject.model.service.invariantUuid, + "modelVersionId": serviceObject.model.service.uuid, + "modelName": serviceObject.model.service.name, + "modelVersion": serviceObject.model.service.version + }, + configurationModel: { + "modelType": "configuration", + "modelInvariantId": configuration.modelInvariantId, + "modelVersionId": configuration.modelVersionId, + "modelCustomizationId": configuration.modelCustomizationId + }, + serviceInstanceId: serviceObject.instance.serviceInstanceId, + configurationId: configuration.nodeId, + configStatus: configuration.nodeStatus, + userId: DataService.getLoggedInUserId() + }; + + openMsoModal(COMPONENT.MSO_CHANGE_CONFIG_STATUS_REQ, requestParams, configuration); + }); + + }; + + $scope.togglePortStatus = function (serviceObject, configuration, port) { + AaiService.getLoggedInUserID(function (response) { + DataService.setLoggedInUserId(response.data); + + var requestParams = { + serviceInstanceId: serviceObject.instance.serviceInstanceId, + configurationId: configuration.nodeId, + portId: port.portId, + portStatus: port.portStatus, + serviceModel: { + "modelType": "service", + "modelInvariantId": serviceObject.model.service.invariantUuid, + "modelVersionId": serviceObject.model.service.uuid, + "modelName": serviceObject.model.service.name, + "modelVersion": serviceObject.model.service.version + }, + configurationModel: { + "modelType": "configuration", + "modelInvariantId": configuration.modelInvariantId, + "modelVersionId": configuration.modelVersionId, + "modelCustomizationId": configuration.modelCustomizationId + }, + userId: DataService.getLoggedInUserId() + }; + + openMsoModal(COMPONENT.MSO_CHANGE_PORT_STATUS_REQ, requestParams, configuration); + }); + }; + + $scope.dissociatePnf = function (pnfName) { + + var jobInfo = { + status: "confirm", + message: "Are you sure you would like to dissociate " + pnfName + " from the service instance?" + }; + + var modalInstance = $uibModal.open({ + templateUrl: 'app/vid/scripts/modals/alert-modal/alert-modal.html', + controller: 'alertModalController', + controllerAs: 'vm', + appendTo: angular.element("#pnfs-tree"), + resolve: { + jobInfo: function () { + return jobInfo; + } + } + }); + + modalInstance.result.then(function (result) { + console.log("This is the result of the alert modal.", result); + + if (result) { + var requestParams = { + pnf: pnfName, + serviceModelInfo: { + invariantUuid: $scope.service.model.service.invariantUuid, + uuid: $scope.service.model.service.uuid, + version: $scope.service.model.service.version, + name: $scope.service.model.service.name + }, + serviceInstanceId: $scope.service.instance.serviceInstanceId + }; + + if (DataService.getLoggedInUserId()) { + requestParams.userId = DataService.getLoggedInUserId(); + requestParams.attuuid = DataService.getLoggedInUserId(); + openMsoModal(COMPONENT.MSO_REMOVE_RELATIONSHIP, requestParams); + } else { + AaiService.getLoggedInUserID(function (response) { + DataService.setLoggedInUserId(response.data); + + requestParams.userId = response.data; + requestParams.attuuid = response.data; + openMsoModal(COMPONENT.MSO_REMOVE_RELATIONSHIP, requestParams); + }); + } + } + }); + + }; + + var openMsoModal = function (msoType, requestParams, configuration) { + var modalInstance = $uibModal.open({ + templateUrl: 'app/vid/scripts/modals/mso-commit/mso-commit.html', + controller: "msoCommitModalController", + backdrop: false, + resolve: { + msoType: function () { + return msoType; + }, + requestParams: function () { + requestParams.callbackFunction = updateViewCallbackFunction; + return requestParams; + }, + configuration: function () { + return configuration; + } + } + }); + }; + + var updateViewCallbackFunction = function (response) { + $scope.callbackResults = ""; + var color = FIELD.ID.COLOR_NONE; + $scope.callbackStyle = { + "background-color": color + }; + + /* + * This 1/2 delay was only added to visually highlight the status + * change. Probably not needed in the real application code. + */ + $timeout(function () { + $scope.callbackResults = UtilityService.getCurrentTime() + + FIELD.STATUS.IS_SUCCESSFUL + response.isSuccessful; + if (response.isSuccessful) { + color = FIELD.ID.COLOR_8F8; + $scope.reloadRoute(); + } else { + color = FIELD.ID.COLOR_F88; + } + $scope.callbackStyle = { + "background-color": color + }; + }, 500); + }; + + $scope.nextPage = function () { + $scope.currentPage++; + }; + + $scope.serviceInstanceses = [{"sinstance": FIELD.NAME.SERVICE_INSTANCE_Id}, {"sinstance": FIELD.NAME.SERVICE_INSTANCE_NAME}]; + + function navigateToSearchResultsPage(globalCustomerId, selectedServiceInstance, selectedProjects, selectedOwningEntities) { + var projectQuery = AaiService.getMultipleValueParamQueryString(_.map(selectedProjects, 'id'), COMPONENT.PROJECT_SUB_PATH); + var owningEntityQuery = AaiService.getMultipleValueParamQueryString(_.map(selectedOwningEntities, 'id'), COMPONENT.OWNING_ENTITY_SUB_PATH); + var globalCustomerIdQuery = globalCustomerId ? COMPONENT.SELECTED_SUBSCRIBER_SUB_PATH + globalCustomerId : null; + var serviceInstanceQuery = selectedServiceInstance ? COMPONENT.SELECTED_SERVICE_INSTANCE_SUB_PATH + selectedServiceInstance : null; + var query = AaiService.getJoinedQueryString([projectQuery, owningEntityQuery, globalCustomerIdQuery, serviceInstanceQuery]); + + window.location.href = COMPONENT.SELECTED_SERVICE_SUB_PATH + query; + } + + $scope.getServiceInstancesSearchResults = + function (selectedCustomer, selectedInstanceIdentifierType, selectedServiceInstance, selectedProject, selectedOwningEntity) { + var isSelectionValid = UtilityService.hasContents(selectedCustomer) || UtilityService.hasContents(selectedProject) + || UtilityService.hasContents(selectedOwningEntity) || UtilityService.hasContents(selectedServiceInstance); + + if (isSelectionValid) { + if (UtilityService.hasContents(selectedServiceInstance)) { + AaiService + .getGlobalCustomerIdByInstanceIdentifier(selectedServiceInstance, selectedInstanceIdentifierType) + .then(handleCustomerIdResponse); + } else { + navigateToSearchResultsPage(selectedCustomer, null, selectedProject, selectedOwningEntity); + } + } else { + alert(FIELD.ERROR.SELECT); + } + + function handleCustomerIdResponse(globalCustomerId) { + if (UtilityService.hasContents(globalCustomerId)) { + navigateToSearchResultsPage(globalCustomerId, selectedServiceInstance, selectedProject, selectedOwningEntity); + } else { + alert(FIELD.ERROR.SERVICE_INST_DNE); + } + } + }; + } +]).directive('restrictInput', function () { + + return { + + restrict: 'A', + require: 'ngModel', + link: function ($scope, element, attr, ctrl) { + ctrl.$parsers.unshift(function (viewValue) { + + var types = $scope.$eval(attr.restrictInput); + if (!types.regex && types.type) { + + switch (types.type) { + case 'Service Instance Name' : + types.regex = '^[a-zA-Z0-9-_]*$'; + break; + default: + types.regex = ''; + } + } + var reg = new RegExp(types.regex); + if (reg.test(viewValue)) { + return viewValue; + } else { + var overrideValue = (reg.test(viewValue) ? viewValue : ''); + element.val(overrideValue); + return overrideValue; + } }); + } + }; + +}); appDS2.controller('TreeCtrl', ['$scope', function ($scope) { - $scope.remove = function (scope) { - scope.remove(); - }; - - $scope.toggle = function (scope) { - scope.toggle(); - }; - - $scope.moveLastToTheBeginning = function () { - var a = $scope.data.pop(); - $scope.data.splice(0, 0, a); - }; - - $scope.newSubItem = function (scope) { - var nodeData = scope.$modelValue; - nodeData.nodes.push({ - id: nodeData.id * 10 + nodeData.nodes.length, - title: nodeData.title + '.' + (nodeData.nodes.length + 1), - nodes: [] - }); - }; - - $scope.collapseAll = function () { - $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_COLLAPSEALL); - }; - - $scope.expandAll = function () { - $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_EXPANDALL); - }; + $scope.remove = function (scope) { + scope.remove(); + }; + + $scope.toggle = function (scope) { + scope.toggle(); + }; + + $scope.moveLastToTheBeginning = function () { + var a = $scope.data.pop(); + $scope.data.splice(0, 0, a); + }; + + $scope.newSubItem = function (scope) { + var nodeData = scope.$modelValue; + nodeData.nodes.push({ + id: nodeData.id * 10 + nodeData.nodes.length, + title: nodeData.title + '.' + (nodeData.nodes.length + 1), + nodes: [] + }); + }; + + $scope.collapseAll = function () { + $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_COLLAPSEALL); + }; + + $scope.expandAll = function () { + $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_EXPANDALL); + }; }]);