[VID-6] Initial rebase push
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / controller / aaiSubscriberController.js
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * VID\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ============LICENSE_END=========================================================\r
19  */\r
20 \r
21 "use strict";\r
22 \r
23 appDS2.controller("aaiSubscriberController", [ "COMPONENT", "FIELD", "PARAMETER", "DataService", "PropertyService", "$scope", "$http", "$timeout", "$location", "$log", "$route", "VIDCONFIGURATION", "UtilityService", "vidService","AaiService",\r
24                                             function(COMPONENT, FIELD, PARAMETER, DataService, PropertyService, $scope, $http, $timeout, $location, $log, $route, VIDCONFIGURATION, UtilityService, vidService, AaiService) {\r
25 \r
26         $scope.showVnfDetails = function(vnf) {\r
27                 console.log("showVnfDetails");\r
28                 DataService.setVnfInstanceId(COMPONENT.VNF_INSTANCE_ID);\r
29                 DataService\r
30                 .setInventoryItem(aaiResult[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM][0]);\r
31 \r
32                 $scope.$broadcast(COMPONENT.SHOW_COMPONENT_DETAILS, {\r
33                         componentId : COMPONENT.VNF,\r
34                         callbackFunction : callbackFunction\r
35                 });\r
36         }\r
37         $scope.popup = new Object();\r
38 \r
39 \r
40         $scope.isPopupVisible = false;\r
41         $scope.defaultBaseUrl = "";\r
42         $scope.responseTimeoutMsec = 60000;\r
43 \r
44         $scope.serviceTypes=[ FIELD.PROMPT.SELECT_SERVICE ];\r
45         $scope.defaultSubscriberName=[ FIELD.PROMPT.SELECT_SUB ];\r
46 \r
47         var callbackFunction = function(response) {\r
48                 alert(response);\r
49         };\r
50 \r
51         $scope.getSubs = function() {\r
52                 $scope.init();\r
53                 $scope.fetchSubs(FIELD.PROMPT.FETCHING_SUBS);\r
54                 $scope.fetchServices();\r
55 \r
56         };\r
57         \r
58          $scope.cancelCreateSI = function(){\r
59                         \r
60                         window.location.href = COMPONENT.WELCOME_PATH;\r
61                         \r
62                 };\r
63          \r
64                 $scope.getServiceTypes = function(globalCustomerId){\r
65                         DataService.setGlobalCustomerId(globalCustomerId);\r
66                         DataService.setServiceIdList($scope.customerList)\r
67 \r
68                         if (globalCustomerId !== "" && globalCustomerId !== undefined ) {\r
69                                 window.location.href = COMPONENT.SERVICE_TYPE_LIST_PATH + $scope.serviceTypeList;\r
70                         }\r
71                 }\r
72                 \r
73                 $scope.refreshServiceTypes = function(globalCustomerId){\r
74                         DataService.setGlobalCustomerId(globalCustomerId);\r
75                         \r
76                         $scope.getServiceTypesList();\r
77                 }\r
78                 \r
79                 $scope.subId="";\r
80                 $scope.createSubscriberName="";\r
81                 $scope.serviceTypeList={};\r
82                 $scope.custSubList=[];\r
83                 $scope.getServiceTypesList = function(){\r
84                         var notFound = true;\r
85                         var globalCustomerId = DataService.getGlobalCustomerId();\r
86                         $scope.custSubList = DataService.getServiceIdList();\r
87                         if(globalCustomerId !== "" && globalCustomerId !== undefined ){\r
88                                 $scope.subId=globalCustomerId;\r
89                                 $scope.init();\r
90                                 $scope.status = FIELD.PROMPT.FETCHING_SERVICE_TYPES;\r
91                                 DataService.setGlobalCustomerId(globalCustomerId);\r
92                                 \r
93                                 AaiService.getSubscriptionServiceTypeList(DataService\r
94                                                 .getGlobalCustomerId(), function(response) {\r
95                                         notFound = false;\r
96                                         $scope.setProgress(100); // done\r
97                                         $scope.status = FIELD.STATUS.DONE;\r
98                                         $scope.isSpinnerVisible = false;\r
99                                         $scope.serviceTypeList = response;\r
100                                         for(var i=0; i<$scope.custSubList.length;i++){\r
101                                                 if(globalCustomerId === $scope.custSubList[i].globalCustomerId){\r
102                                                         $scope.createSubscriberName = $scope.custSubList[i].subscriberName;\r
103                                                 }\r
104                                         }\r
105                                 }, function(response) { // failure\r
106                                         $scope.showError(FIELD.ERROR.AAI);\r
107                                         $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_TYPES + response.status;\r
108                                         $scope.errorDetails = response.data;\r
109                                 });\r
110                         } else {\r
111                                 alert(FIELD.ERROR.SELECT);\r
112                         }\r
113                         \r
114                 };\r
115                 \r
116                 $scope.subList = [];\r
117                 $scope.getAaiServiceModels = function(selectedServicetype,subName){\r
118                         DataService.setGlobalCustomerId(selectedServicetype);\r
119                         DataService.setServiceIdList($scope.serviceTypeList)\r
120                         DataService.setSubscriberName(subName);\r
121                         \r
122                         DataService.setSubscribers($scope.custSubList);\r
123 \r
124                         if (selectedServicetype !== "" && selectedServicetype !== 'undefined') {\r
125                                 $location.path(COMPONENT.CREATE_INSTANCE_PATH);\r
126                         }                       \r
127                 };\r
128                 \r
129                 $scope.serviceTypeName="";\r
130                 $scope.getAaiServiceModelsList = function(){\r
131                         var globalCustomerId="";\r
132              var serviceTypeId = DataService.getGlobalCustomerId();                     \r
133                         $scope.serviceTypeList = DataService.getServiceIdList();\r
134                         $scope.createSubscriberName = DataService.getSubscriberName();\r
135                         $scope.status = FIELD.STATUS.FETCHING_SERVICE_CATALOG;\r
136                         $scope.custSubList = DataService.getSubscribers();\r
137                         for(var i=0; i<$scope.serviceTypeList.length;i++){\r
138                                                 if(parseInt(serviceTypeId) === i ){\r
139                                                         $scope.serviceTypeName = $scope.serviceTypeList[i];\r
140                                                 }\r
141                                         };\r
142                     for(var i=0; i<$scope.custSubList.length;i++){\r
143                                                 if($scope.createSubscriberName === $scope.custSubList[i].subscriberName){\r
144                                                         globalCustomerId = $scope.custSubList[i].globalCustomerId;\r
145                                                 }\r
146                                         };\r
147                         \r
148                         var pathQuery ="";\r
149                         \r
150                         if(null !== globalCustomerId && "" !== globalCustomerId && undefined !== globalCustomerId\r
151                                         && null !== serviceTypeId && "" !== serviceTypeId && undefined !== serviceTypeId){\r
152                                 pathQuery = COMPONENT.SERVICES_PATH +globalCustomerId+"/"+$scope.serviceTypeName;\r
153                         }\r
154                         \r
155                         AaiService.getServiceModels(globalCustomerId,$scope.serviceTypeName,function(response) { // success\r
156                                 console.log("service models : "+response.data);\r
157                                 DataService.setServiceIdList(response);\r
158                         },  function(response) { // failure\r
159                                 $scope.showError(FIELD.ERROR.AAI);\r
160                                 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES+ response.status;\r
161                                 $scope.errorDetails = response.data;\r
162                         });\r
163                         \r
164                         /*$http.get('/aai_get_services/'+globalCustomerId+''+$scope.serviceTypeName)\r
165                         .then(function successCallback(response) {\r
166                                 $scope.services = [];\r
167                                 if (angular.isArray(response.data)) {\r
168                                         $scope.services = response.data;\r
169                                         $scope.viewPerPage=10;\r
170                                         $scope.totalPage=$scope.services.length/$scope.viewPerPage;\r
171                                         $scope.sortBy="name";\r
172                                         $scope.scrollViewPerPage=2;\r
173                                         $scope.currentPage=1;\r
174                                         $scope.searchCategory;\r
175                                         $scope.searchString="";\r
176                                         $scope.currentPageNum=1;\r
177                                         $scope.isSpinnerVisible = false;\r
178                                         $scope.isProgressVisible = false;\r
179                                 } else {\r
180                                         $scope.status = "Failed to get service models from SDC.";\r
181                                         $scope.error = true;\r
182                                         $scope.isSpinnerVisible = false;\r
183                                 }\r
184                         }, function errorCallback(response) {\r
185                                 console.log("Error: " + response);\r
186                         }); */\r
187                 \r
188                         \r
189                 };\r
190                 \r
191                  $scope.cancelCreateSIType = function(){\r
192                                 \r
193                                 window.location.href = COMPONENT.SERVICE_MODLES_INSTANCES_SUBSCRIBERS_PATH;\r
194                                 \r
195                         }\r
196 \r
197         $scope.fetchServices = function() { \r
198                 var serviceIdList = [];\r
199 \r
200                 AaiService.getServices2(function(response) { // success\r
201                         DataService.setServiceIdList(response);\r
202                 },  function(response) { // failure\r
203                         $scope.showError(FIELD.ERROR.AAI);\r
204                         $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status;\r
205                         $scope.errorDetails = response.data;\r
206                 });\r
207         }\r
208 \r
209         $scope.refreshSubs = function() {\r
210                 $scope.fetchSubs(FIELD.PROMPT.REFRESH_SUB_LIST);\r
211                 $scope.fetchServices();\r
212         };\r
213 \r
214         $scope.fetchSubs = function(status) {\r
215                 $scope.status = status;\r
216 \r
217                 AaiService.getSubList(function(response) { // sucesss\r
218                         $scope.setProgress(100); // done\r
219                         $scope.status = FIELD.STATUS.DONE;\r
220                         $scope.isSpinnerVisible = false;\r
221                         $scope.customerList = response;\r
222                 },  function(response) { // failure\r
223                         $scope.showError(FIELD.ERROR.AAI);\r
224                         $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;\r
225                         $scope.errorDetails = response.data;\r
226                 });\r
227         }\r
228 \r
229 \r
230         $scope.getSubDetails = function(request) {\r
231 \r
232                 $scope.init();\r
233                 $scope.selectedSubscriber = $location.search().selectedSubscriber;\r
234                 $scope.selectedServiceInstance = $location.search().selectedServiceInstance;\r
235                 $scope.status = FIELD.STATUS.FETCHING_SUB_DETAILS + $scope.selectedSubscriber;\r
236 \r
237                 $scope.displayData = [];\r
238                 AaiService.getSubDetails($scope.selectedSubscriber, $scope.selectedServiceInstance, function(displayData, subscriberName) {\r
239                         $scope.displayData = displayData;\r
240                         $scope.viewPerPage=10;\r
241                         $scope.totalPage=$scope.displayData.length/$scope.viewPerPage;\r
242                         $scope.scrollViewPerPage=2;\r
243                         $scope.currentPage=1;\r
244                         $scope.searchCategory;\r
245                         $scope.searchString="";\r
246                         $scope.currentPageNum=1;\r
247                         $scope.defaultSort=COMPONENT.SUBSCRIBER_NAME;\r
248                                 $scope.setProgress(100); // done\r
249                         $scope.status = FIELD.STATUS.DONE;\r
250                         $scope.isSpinnerVisible = false;\r
251                         $scope.subscriberName = subscriberName;\r
252                 }, function(response) { \r
253                         $scope.showError(FIELD.ERROR.AAI);\r
254                         $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;\r
255                         $scope.errorDetails = response.data;\r
256                 });\r
257         }\r
258 \r
259 \r
260         $scope.$on(COMPONENT.MSO_DELETE_REQ, function(event, request) {\r
261                 // $log.debug("deleteInstance: request:");\r
262                 // $log.debug(request);\r
263                 $scope.init();\r
264 \r
265                 $http.post($scope.baseUrl + request.url, {\r
266                         requestDetails: request.requestDetails\r
267                 },{\r
268                         timeout: $scope.responseTimeoutMsec\r
269                 }).then($scope.handleInitialResponse)\r
270                 ["catch"]($scope.handleServerError);\r
271         });\r
272 \r
273         $scope.init = function() {\r
274 \r
275                 //PropertyService.setAaiBaseUrl("testaai");\r
276                 //PropertyService.setAsdcBaseUrl("testasdc");\r
277 \r
278                 // takes a default value, retrieves the prop value from the file system and sets it\r
279                 var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec();\r
280                 PropertyService.setMsoMaxPollingIntervalMsec(msecs);\r
281 \r
282                 // takes a default value, retrieves the prop value from the file system and sets it\r
283                 var polls = PropertyService.retrieveMsoMaxPolls();\r
284                 PropertyService.setMsoMaxPolls(polls);\r
285 \r
286                 //PropertyService.setMsoBaseUrl("testmso");\r
287                 PropertyService.setServerResponseTimeoutMsec();\r
288 \r
289                 /*\r
290                  * Common parameters that would typically be set when the page is\r
291                  * displayed for a specific service instance id.\r
292                  */\r
293 \r
294                 $scope.baseUrl = $scope.defaultBaseUrl;\r
295 \r
296                 $scope.isSpinnerVisible = true;\r
297                 $scope.isProgressVisible = true;\r
298                 $scope.isPopupVisible = true;\r
299                 $scope.requestId = "";\r
300                 $scope.error = "";\r
301                 $scope.pollAttempts = 0;\r
302                 $scope.log = "";                                \r
303                 $scope.enableCloseButton(false);\r
304                 $scope.resetProgress();\r
305                 $scope.setProgress(2); // Show "a little" progress\r
306         }\r
307 \r
308         $scope.getComponentList = function(event, request) {\r
309 \r
310                 $scope.isSpinnerVisible = true;\r
311                 $scope.isProgressVisible = true;\r
312                 $scope.isPopupVisible = true;\r
313                 $scope.requestId = "";\r
314                 $scope.error = "";\r
315                 $scope.pollAttempts = 0;\r
316                 $scope.log = "";                                \r
317 \r
318                 $scope.resetProgress();\r
319                 $scope.setProgress(2); // Show "a little" progress\r
320 \r
321                 $scope.globalCustomerId = $location.search().subscriberId;\r
322                 $scope.serviceType = $location.search().serviceType;\r
323                 $scope.serviceInstanceId = $location.search().serviceInstanceId;\r
324                 $scope.subscriberName = $location.search().subscriberName;\r
325 \r
326                 //$scope.getAsdcModel($location.search().modelUuid);\r
327 \r
328                 $scope.namedQueryId = VIDCONFIGURATION.COMPONENT_LIST_NAMED_QUERY_ID;\r
329                 $scope.status = FIELD.STATUS.FETCHING_SERVICE_INST_DATA + $scope.serviceInstanceId;\r
330 \r
331                 AaiService.runNamedQuery($scope.namedQueryId, $scope.globalCustomerId, $scope.serviceType, $scope.serviceInstanceId, \r
332                                 function(response) { //success\r
333                         $scope.handleInitialResponseInventoryItems(response);\r
334                         $scope.setProgress(100); // done\r
335                         $scope.status = FIELD.STATUS.DONE;\r
336                         $scope.isSpinnerVisible = false;\r
337                 }, \r
338                 function(response){ //failure\r
339                         $scope.showError(FIELD.ERROR.AAI);\r
340                         $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_INSTANCE_DATA + response.status;\r
341                         $scope.errorDetails = response.data;\r
342                 }\r
343                 );\r
344 \r
345         }\r
346 \r
347         $scope.handleServerError = function(response, status) {                         \r
348                 alert(response.statusText);\r
349         }\r
350         \r
351         $scope.getAsdcModel = function(disData) {\r
352 \r
353                 console.log ("disData"); console.log (JSON.stringify (disData, null, 4));\r
354                 \r
355                 if ( !(UtilityService.hasContents (disData.aaiModelVersionId)) ) {\r
356                         $scope.errorMsg = FIELD.ERROR.MODEL_VERSION_ID_MISSING;\r
357                         alert($scope.errorMsg);\r
358                         return;\r
359                 }\r
360                 \r
361                 // aaiModelVersionId is the model uuid\r
362                 var pathQuery = COMPONENT.SERVICES_PATH + disData.aaiModelVersionId;\r
363                 $http({\r
364                           method: 'GET',\r
365                           url: pathQuery\r
366                         }).then(function successCallback(response) {\r
367                                 vidService.setModel(response.data);\r
368                                 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
369                                 console.log("aaiSubscriber getAsdcModel DONE!!!!");\r
370                           }, function errorCallback(response) {\r
371                                   console.log("aaiSubscriber getAsdcModel - No matching model found matching the A&AI model version ID = " + disData.aaiModelVersionId);\r
372                                         $scope.errorMsg = FIELD.ERROR.NO_MATCHING_MODEL_AAI + disData.aaiModelVersionId;\r
373                                         alert($scope.errorMsg);\r
374                           });\r
375 \r
376         }\r
377 \r
378         $scope.getTenants = function(globalCustomerId) {\r
379                 $http.get(FIELD.ID.AAI_GET_TENTANTS + globalCustomerId)\r
380                 .then(function successCallback(response) {\r
381                         return response.data;\r
382                         //$location.path("/instantiate");\r
383                 }, function errorCallback(response) {\r
384                         //TODO\r
385                 });\r
386         }\r
387 \r
388         $scope.handleInitialResponseInventoryItems = function(response) {\r
389 \r
390                 $scope.inventoryResponseItemList = response.data[FIELD.ID.INVENTORY_RESPONSE_ITEM]; // get data from json\r
391                 console.log($scope.inventoryResponseItemList.toString());\r
392 \r
393                 $scope.displayData = [];\r
394                 $scope.vnfs = [];\r
395 \r
396                 $scope.counter = 100;\r
397 \r
398                 $scope.subscriberName = "";\r
399                 // just look up the subscriber name in A&AI here...\r
400                 AaiService.getSubscriberName($scope.globalCustomerId, function(response) {\r
401                         $scope.subscriberName = response;\r
402                         DataService.setSubscriberName($scope.subscriberName);\r
403 \r
404                         angular.forEach($scope.inventoryResponseItemList, function(inventoryResponseItem, key) {\r
405 \r
406                                 $scope.inventoryResponseItem = inventoryResponseItem;\r
407 \r
408                                 $scope.service.instance = {\r
409                                                 "name": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE][FIELD.ID.SERVICE_INSTANCE_NAME],\r
410                                                 "serviceInstanceId": $scope.serviceInstanceId,\r
411                                                 "serviceType": $scope.serviceType,\r
412                                                 "globalCustomerId": $scope.globalCustomerId,\r
413                                                 "subscriberName": $scope.subscriberName,\r
414                                                 "id": $scope.serviceInstanceId,\r
415                                                 "inputs": {\r
416                                                         "a": {\r
417                                                                 "type": PARAMETER.STRING,\r
418                                                                 "description": FIELD.PROMPT.VAR_DESCRIPTION_A,\r
419                                                                 "default": FIELD.PROMPT.DEFAULT_A\r
420                                                         },\r
421                                                         "b": {\r
422                                                                 "type": PARAMETER.STRING,\r
423                                                                 "description": FIELD.PROMPT.VAR_DESCRIPTION_B,\r
424                                                                 "default": FIELD.PROMPT.DEFAULT_B\r
425                                                         },\r
426                                                 },\r
427                                                 "object": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE],\r
428                                                 "vnfs": [],\r
429                                                 "networks": []\r
430                                 }\r
431 \r
432                                 if (inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
433 \r
434                                         angular.forEach(inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(subInventoryResponseItem, key) {\r
435                                                 // i expect to find vnfs now\r
436 \r
437                                                 if (subInventoryResponseItem[FIELD.ID.L3_NETWORK] != null) { \r
438                                                         var l3NetworkObject = subInventoryResponseItem[FIELD.ID.L3_NETWORK];\r
439                                                         var l3Network = { "id": $scope.counter++, \r
440                                                                         "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],\r
441                                                                         "itemType": FIELD.ID.L3_NETWORK,\r
442                                                                         "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],\r
443                                                                         "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],\r
444                                                                         "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],\r
445                                                                         "object": l3NetworkObject,\r
446                                                                         "nodes": [],\r
447                                                                         "subnets": []\r
448                                                         };\r
449                                                         if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
450                                                                 //console.log ("subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS]=");\r
451                                                                 //console.log (JSON.stringify (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS], null, 4 ));\r
452                                                                 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(subSubInventoryResponseItem, key) {\r
453                                                                         //console.log (JSON.stringify (subSubInventoryResponseItem, null, 4 ));\r
454                                                                         var subnet = {};\r
455                                                                         var subnetObject;\r
456                                                                         if (subSubInventoryResponseItem[FIELD.ID.SUB_NET] != null) {\r
457                                                                                 subnetObject = subSubInventoryResponseItem[FIELD.ID.SUB_NET];\r
458                                                                                 subnet = {\r
459                                                                                                 "subnet-id": subnetObject[FIELD.ID.SUBNET_ID],\r
460                                                                                                 "subnet-name": subnetObject[FIELD.ID.SUBNET_NAME],\r
461                                                                                                 "gateway-address": subnetObject[FIELD.ID.GATEWAY_ADDRESS],\r
462                                                                                                 "network-start-address": subnetObject[FIELD.ID.NETWORK_START_ADDRESS],\r
463                                                                                                 "cidr-mask": subnetObject[FIELD.ID.CIDR_MASK]\r
464                                                                                 };\r
465                                                                                 l3Network.subnets.push(subnet);\r
466                                                                         }\r
467                                                                 });\r
468                                                         }\r
469                                                         $scope.service.instance[FIELD.ID.NETWORKS].push(l3Network);\r
470                                                 }\r
471 \r
472                                                 if (subInventoryResponseItem[FIELD.ID.GENERIC_VNF] != null) {\r
473                                                         var genericVnfObject = subInventoryResponseItem[FIELD.ID.GENERIC_VNF];\r
474 \r
475                                                         var genericVnf = {\r
476                                                                         "name": genericVnfObject[FIELD.ID.VNF_NAME],\r
477                                                                         "id": $scope.counter++, \r
478                                                                         "itemType": COMPONENT.VNF, \r
479                                                                         "nodeType": genericVnfObject[FIELD.ID.VNF_TYPE],\r
480                                                                         "nodeId": genericVnfObject[FIELD.ID.VNF_ID],\r
481                                                                         "nodeStatus": genericVnfObject[FIELD.ID.ORCHESTRATION_STATUS],\r
482                                                                         "object": genericVnfObject,\r
483                                                                         "vfModules": [],\r
484                                                                         "volumeGroups": [],\r
485                                                                         "availableVolumeGroups": []\r
486                                                         };\r
487                                                         $scope.service.instance[FIELD.ID.VNFS].push(genericVnf);\r
488 \r
489                                                         // look for volume-groups\r
490                                                         if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
491                                                                 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(vfmodules, key) {\r
492 \r
493                                                                         if (vfmodules[FIELD.ID.VOLUME_GROUP] != null) { \r
494                                                                                 var volumeGroupObject = vfmodules[FIELD.ID.VOLUME_GROUP];\r
495                                                                                 var volumeGroup = { "id": $scope.counter++, \r
496                                                                                                 "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],\r
497                                                                                                 "itemType": FIELD.ID.VOLUME_GROUP,\r
498                                                                                                 "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],\r
499                                                                                                 "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],\r
500                                                                                                 "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],\r
501                                                                                                 "object": volumeGroupObject,\r
502                                                                                                 "nodes": []\r
503                                                                                 };\r
504                                                                                 genericVnf[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);\r
505                                                                                 genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS].push(volumeGroup);\r
506                                                                         }\r
507                                                                 });\r
508                                                         }\r
509                                                         // now we've loaded up the availableVolumeGroups, we can use it\r
510                                                         if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
511                                                                 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(vfmodules, key) {\r
512 \r
513                                                                         if (vfmodules[FIELD.ID.VF_MODULE] != null) { \r
514                                                                                 var vfModuleObject = vfmodules[FIELD.ID.VF_MODULE];\r
515                                                                                 var vfModule = { "id": $scope.counter++,\r
516                                                                                                 "name": vfModuleObject[FIELD.ID.VF_MODULE_NAME],\r
517                                                                                                 "itemType": FIELD.ID.VF_MODULE,\r
518                                                                                                 "nodeType": FIELD.ID.VF_MODULE, \r
519                                                                                                 "nodeStatus": vfModuleObject[FIELD.ID.ORCHESTRATION_STATUS],\r
520                                                                                                 "volumeGroups": [],\r
521                                                                                                 "object": vfModuleObject,\r
522                                                                                                 "networks": []\r
523                                                                                 };\r
524                                                                                 genericVnf[FIELD.ID.VF_MODULES].push(vfModule);\r
525                                                                                 if (vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
526                                                                                         angular.forEach(vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(networks, key) {\r
527                                                                                                 if (networks[FIELD.ID.L3_NETWORK] != null) { \r
528                                                                                                         var l3NetworkObject = networks[FIELD.ID.L3_NETWORK];\r
529                                                                                                         var l3Network = { "id": $scope.counter++, \r
530                                                                                                                         "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],\r
531                                                                                                                         "itemType": FIELD.ID.L3_NETWORK,\r
532                                                                                                                         "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],\r
533                                                                                                                         "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],\r
534                                                                                                                         "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],\r
535                                                                                                                         "object": l3NetworkObject,\r
536                                                                                                                         "nodes": []\r
537                                                                                                         };\r
538                                                                                                         vfModule[FIELD.ID.NETWORKS].push(l3Network);\r
539                                                                                                 }\r
540                                                                                                 if (networks[FIELD.ID.VOLUME_GROUP] != null) { \r
541                                                                                                         var volumeGroupObject = networks[FIELD.ID.VOLUME_GROUP];\r
542 \r
543                                                                                                         var volumeGroup = { "id": $scope.counter++, \r
544                                                                                                                         "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],\r
545                                                                                                                         "itemType": FIELD.ID.VOLUME_GROUP,\r
546                                                                                                                         "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],\r
547                                                                                                                         "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],\r
548                                                                                                                         "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],\r
549                                                                                                                         "object": volumeGroupObject,\r
550                                                                                                                         "nodes": []\r
551                                                                                                         };\r
552                                                                                                         var tmpVolGroup = [];\r
553 \r
554                                                                                                         angular.forEach(genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS], function(avgroup, key) {\r
555                                                                                                                 if (avgroup.name != volumeGroup.name) { \r
556                                                                                                                         tmpVolGroup.push(avgroup);\r
557                                                                                                                 }\r
558                                                                                                         });\r
559 \r
560                                                                                                         genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS] = tmpVolGroup;\r
561 \r
562                                                                                                         vfModule[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);\r
563                                                                                                 }\r
564 \r
565                                                                                         });\r
566                                                                                 }\r
567                                                                         }\r
568                                                                 });\r
569                                                         }\r
570                                                 }\r
571                                         });\r
572                                 }\r
573                         });\r
574                 });\r
575         }\r
576 \r
577         $scope.handleInitialResponse = function(response) {\r
578                 try {\r
579                         $scope.enableCloseButton(true);\r
580                         $scope.updateLog(response);\r
581                         if (response.data.status < 200 || response.data.status > 202) {\r
582                                 $scope.showError(FIELD.ERROR.MSO);\r
583                                 $scope.status = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.data.status;\r
584 \r
585                                 return;\r
586                         }\r
587 \r
588                         $scope.setProgress(100); // done\r
589                         $scope.status = FIELD.STATUS.DONE;\r
590                         $scope.isSpinnerVisible = false;\r
591 \r
592                         $scope.customer = response.data.customer; // get data from json\r
593 \r
594                         $scope.customerList = [];\r
595 \r
596                         angular.forEach($scope.customer, function(subVal, subKey) {\r
597                                 var cust = { "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID], "subscriberName": subVal[FIELD.ID.SUBNAME] };\r
598                                 $scope.customerList.push(cust);\r
599                         });     \r
600 \r
601                 } catch (error) {\r
602                         $scope.showContentError(error);\r
603                 }\r
604         }\r
605 \r
606         $scope.autoGetSubs = function() {\r
607                 /*\r
608                  * Optionally comment in / out one of these method calls (or add a similar\r
609                  * entry) to auto-invoke an entry when the test screen is redrawn.\r
610                  */\r
611                 $scope.getSubs();\r
612 \r
613         }\r
614 \r
615         $scope.updateLog = function(response) {\r
616 //              $scope.log = UtilityService.getCurrentTime() + " HTTP Status: " + \r
617 //              UtilityService.getHttpStatusText(response.data.status) + "\n" +\r
618 //              angular.toJson(response.data.entity, true) + "\n\n" + $scope.log;\r
619 //              UtilityService.checkUndefined("entity", response.data.entity);\r
620 //              UtilityService.checkUndefined("status", response.data.status);                          \r
621         }\r
622 \r
623         $scope.handleServerError = function(response, status) {                         \r
624                 $scope.enableCloseButton(true);\r
625                 var message = UtilityService.getHttpErrorMessage(response);\r
626                 if (message != ""){\r
627                         message = " (" + message + ")";\r
628                 }\r
629                 $scope.showError(FIELD.ERROR.SYSTEM_ERROR + message);\r
630         }\r
631 \r
632         $scope.showContentError = function(message) {\r
633                 // $log.debug(message);\r
634                 console.log(message);\r
635                 if (UtilityService.hasContents(message)) {\r
636                         $scope.showError("System failure (" + message + ")");\r
637                 } else {\r
638                         $scope.showError(FIELD.ERROR.SYSTEM_ERROR);\r
639                 }\r
640         }\r
641 \r
642         $scope.showError = function(message) {\r
643                 $scope.isSpinnerVisible = false;\r
644                 $scope.isProgressVisible = false;\r
645                 $scope.error = message;\r
646                 $scope.status = FIELD.STATUS.ERROR;\r
647         }\r
648 \r
649         $scope.close = function() {\r
650                 if ($scope.timer != undefined) {\r
651                         $timeout.cancel($scope.timer);                                  \r
652                 }\r
653                 $scope.isPopupVisible = false;\r
654         }\r
655 \r
656 \r
657 \r
658         /*\r
659          * Consider converting the progress bar mechanism, the disabled button handling\r
660          * and the following methods to generic Angular directive(s) and/or approach.\r
661          */\r
662 \r
663         $scope.enableCloseButton = function(isEnabled) {\r
664                 var selector = FIELD.STYLE.MSO_CTRL_BTN;\r
665 \r
666                 $scope.isCloseEnabled = isEnabled;\r
667 \r
668                 if (isEnabled) {\r
669                         $(selector).addClass(FIELD.STYLE.BTN_PRIMARY).removeClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.PRIMARY);\r
670                 } else {\r
671                         $(selector).removeClass(FIELD.STYLE.BTN_PRIMARY).addClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.DISABLED);                                   \r
672                 }\r
673         }\r
674 \r
675         $scope.resetProgress = function() {\r
676                 $scope.percentProgress = 0;\r
677                 $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_INFO;\r
678         }\r
679 \r
680         $scope.setProgress = function(percentProgress) {\r
681                 percentProgress = parseInt(percentProgress);\r
682                 if (percentProgress >= 100) {\r
683                         $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_SUCCESS;                                        \r
684                 }\r
685 \r
686                 if (percentProgress < $scope.percentProgress) {\r
687                         return;\r
688                 }\r
689 \r
690                 $scope.percentProgress = percentProgress;\r
691                 $scope.progressWidth = {width: percentProgress + "%"};\r
692                 if (percentProgress >= 5) {\r
693                         $scope.progressText =  percentProgress + " %";\r
694                 } else {\r
695                         // Hidden since color combination is barely visible when progress portion is narrow.\r
696                         $scope.progressText = "";\r
697                 }\r
698         }\r
699 \r
700         $scope.reloadRoute = function() {\r
701                 $route.reload();\r
702         }\r
703 \r
704         $scope.prevPage = function() {\r
705                 $scope.currentPage--;\r
706         }\r
707 \r
708         $scope.nextPage = function() {\r
709                 $scope.currentPage++;\r
710         }\r
711         $scope.serviceInstanceses = [{"sinstance":FIELD.NAME.SERVICE_INSTANCE_Id},{"sinstance":FIELD.NAME.SERVICE_INSTANCE_NAME}]\r
712         $scope.getSubscriberDet = function(selectedCustomer,selectedserviceinstancetype,selectedServiceInstance){\r
713                 \r
714                 var sintype =selectedserviceinstancetype;\r
715                 if (selectedServiceInstance != "" && selectedServiceInstance != undefined) {\r
716                         selectedServiceInstance.trim();\r
717 \r
718                         // check with A&AI\r
719                         $http.get(COMPONENT.AAI_GET_SERVICE_INSTANCE_PATH  + selectedServiceInstance+"/"+sintype + "?r=" + Math.random(), {\r
720 \r
721                         },{\r
722                                 timeout: $scope.responseTimeoutMsec\r
723                         }).then(function(response) {\r
724                                 var notFound = true;\r
725                                 if (angular.isArray(response.data[FIELD.ID.RESULT_DATA])) {\r
726                                         var item = [];\r
727                                         var urlParts = [];\r
728                                         item = response.data[FIELD.ID.RESULT_DATA][0];\r
729                                         var url = item[FIELD.ID.RESOURCE_LINK];\r
730                                         var globalCustomerId = "";\r
731                                         var serviceSubscription = "";\r
732                                         // split it and find the customer Id and service-subscription\r
733                                         urlParts = url.split("/");\r
734                                         if (urlParts[7] === FIELD.ID.CUSTOMER) { \r
735                                                 globalCustomerId = urlParts[8];\r
736                                         }\r
737                                         if (urlParts[10] === FIELD.ID.SERVICE_SUBSCRIPTION) { \r
738                                                 serviceSubscription = urlParts[11];\r
739                                         }\r
740 \r
741                                         if (globalCustomerId !== "") {\r
742                                                 notFound = false;\r
743                                                 window.location.href = COMPONENT.SELECTED_SERVICE_SUB_PATH + serviceSubscription + COMPONENT.SELECTEDSUBSCRIBER_SUB_PATH + globalCustomerId + COMPONENT.SELECTEDSERVICEINSTANCE_SUB_PATH + selectedServiceInstance;\r
744                                         }\r
745                                 }\r
746                                 if (notFound) {\r
747                                         alert(FIELD.ERROR.SERVICE_INST_DNE);\r
748                                 }\r
749                         }); // add a failure callback...\r
750                 } else if (selectedCustomer != null) { \r
751                         window.location.href = COMPONENT.SELECTED_SUB_PATH + selectedCustomer;\r
752                 } else {\r
753                         alert(FIELD.ERROR.SELECT);\r
754                 }\r
755         };\r
756   }]).directive('restrictInput', function(){\r
757                 \r
758                 return {\r
759                         \r
760                         restrict: 'A',\r
761                         require: 'ngModel',\r
762                         link: function($scope, element, attr, ctrl){\r
763                                 ctrl.$parsers.unshift(function(viewValue){\r
764                                         \r
765                                         var types = $scope.$eval(attr.restrictInput);\r
766                                         if(!types.regex && types.type){\r
767                                                 \r
768                                                 switch(types.type){\r
769                                                         case 'Service Instance Name' : types.regex = '^[a-zA-Z0-9-_]*$'; break;\r
770                                                         default: types.regex= '';\r
771                                                 }\r
772                                         }\r
773                                         var reg = new RegExp(types.regex);\r
774                                         if(reg.test(viewValue)){\r
775                                                 return viewValue;\r
776                                         } else {\r
777                                                 var overrideValue = (reg.test(viewValue) ? viewValue : '');\r
778                                                 element.val(overrideValue);\r
779                                                 return overrideValue;\r
780                                         }\r
781                                 });\r
782                         }\r
783                 };\r
784 \r
785             });\r
786 appDS2.controller('TreeCtrl', ['$scope', function ($scope) {\r
787         $scope.remove = function (scope) {\r
788                 scope.remove();\r
789         };\r
790 \r
791         $scope.toggle = function (scope) {\r
792                 scope.toggle();\r
793         };\r
794 \r
795         $scope.moveLastToTheBeginning = function () {\r
796                 var a = $scope.data.pop();\r
797                 $scope.data.splice(0, 0, a);\r
798         };\r
799 \r
800         $scope.newSubItem = function (scope) {\r
801                 var nodeData = scope.$modelValue;\r
802                 nodeData.nodes.push({\r
803                         id: nodeData.id * 10 + nodeData.nodes.length,\r
804                         title: nodeData.title + '.' + (nodeData.nodes.length + 1),\r
805                         nodes: []\r
806                 });\r
807         };\r
808 \r
809         $scope.collapseAll = function () {\r
810                 $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_COLLAPSEALL);\r
811         };\r
812 \r
813         $scope.expandAll = function () {\r
814                 $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_EXPANDALL);\r
815         };\r
816 \r
817 \r
818 }]);\r
819 \r
820 \r
821 \r