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