[VID-12] Delivery of remaining features for v1.1
[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                         var namedQueryId='6e806bc2-8f9b-4534-bb68-be91267ff6c8';\r
156                         AaiService.getServiceModelsByServiceType(namedQueryId,globalCustomerId,$scope.serviceTypeName,function(response) { // success\r
157                                 $scope.services = [];\r
158                                 if (angular.isArray(response.data['inventory-response-item'])) {\r
159                                         $scope.services = response.data['inventory-response-item'][0]['inventory-response-items']['inventory-response-item'];\r
160                                         $scope.serviceType = response.data['inventory-response-item'][0]['service-subscription']['service-type'];\r
161                                         $scope.viewPerPage=10;\r
162                                         $scope.totalPage=$scope.services.length/$scope.viewPerPage;\r
163                                         $scope.sortBy="name";\r
164                                         $scope.scrollViewPerPage=2;\r
165                                         $scope.currentPage=1;\r
166                                         $scope.searchCategory;\r
167                                         $scope.searchString="";\r
168                                         $scope.currentPageNum=1;\r
169                                         $scope.isSpinnerVisible = false;\r
170                                         $scope.isProgressVisible = false;\r
171                                 } else {\r
172                                         $scope.status = "Failed to get service models from ASDC.";\r
173                                         $scope.error = true;\r
174                                         $scope.isSpinnerVisible = false;\r
175                                 }\r
176                                 DataService.setServiceIdList(response);\r
177                         },  function(response) { // failure\r
178                                 $scope.showError(FIELD.ERROR.AAI);\r
179                                 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES+ response.status;\r
180                                 $scope.errorDetails = response.data;\r
181                         });\r
182                         \r
183                         };\r
184                         \r
185                         $scope.createType = "a la carte";\r
186                 $scope.deployService = function(service,hideServiceFields) {\r
187                         hideServiceFields = hideServiceFields|| false;\r
188                         var temp = service;\r
189                         service.uuid = service['service-instance']['model-version-id'];\r
190                         \r
191                         console.log("Instantiating ASDC service " + service.uuid);\r
192                         \r
193                         $http.get('rest/models/services/' + service.uuid)\r
194                                 .then(function successCallback(getServiceResponse) {\r
195                                         getServiceResponse.data['service'].serviceTypeName =$scope.serviceTypeName ;\r
196                                         getServiceResponse.data['service'].createSubscriberName =$scope.createSubscriberName ;\r
197                                         var serviceModel = getServiceResponse.data;\r
198                                         DataService.setServiceName(serviceModel.service.name);\r
199                                         \r
200                                         DataService.setModelInfo(COMPONENT.SERVICE, {\r
201                                                 "modelInvariantId": serviceModel.service.invariantUuid,\r
202                                                 "modelVersion": serviceModel.service.version,\r
203                                                 "modelNameVersionId": serviceModel.service.uuid,\r
204                                                 "modelName": serviceModel.service.name,\r
205                                                 "description": serviceModel.service.description,\r
206                                                 "category":serviceModel.service.category,\r
207                                                 "serviceTypeName":serviceModel.service.serviceTypeName,\r
208                                                 "createSubscriberName":serviceModel.service.createSubscriberName\r
209                                         });\r
210                                         DataService.setHideServiceFields(hideServiceFields);\r
211                                         DataService.setALaCarte (true);\r
212                                         $scope.createType = "a la carte";\r
213                                         var broadcastType = "createComponent";\r
214                                         \r
215                                         if (UtilityService.arrayContains (VIDCONFIGURATION.MACRO_SERVICES, serviceModel.service.invariantUuid )) {\r
216                                                 DataService.setALaCarte (false);\r
217                                                 $scope.createType = "Macro";\r
218                                                 var convertedAsdcModel = UtilityService.convertModel(serviceModel);\r
219                                                 \r
220                                                 //console.log ("display inputs "); \r
221                                                 //console.log (JSON.stringify ( convertedAsdcModel.completeDisplayInputs));\r
222                                                 \r
223                                                 DataService.setModelInfo(COMPONENT.SERVICE, {\r
224                                                         "modelInvariantId": serviceModel.service.invariantUuid,\r
225                                                         "modelVersion": serviceModel.service.version,\r
226                                                         "modelNameVersionId": serviceModel.service.uuid,\r
227                                                         "modelName": serviceModel.service.name,\r
228                                                         "description": serviceModel.service.description,\r
229                                                         "category":serviceModel.service.category,\r
230                                                         "inputs": serviceModel.service.inputs,\r
231                                                         "displayInputs": convertedAsdcModel.completeDisplayInputs,\r
232                                                         "serviceTypeName":serviceModel.service.serviceTypeName,\r
233                                                         "createSubscriberName":serviceModel.service.createSubscriberName\r
234                                                 });\r
235                                         };\r
236                                         \r
237                                         $scope.$broadcast(broadcastType, {\r
238                                             componentId : COMPONENT.SERVICE,\r
239                                             callbackFunction : function(response) {\r
240                                                 if (response.isSuccessful) {\r
241                                                                 vidService.setModel(serviceModel);\r
242                                                                 \r
243                                                                 var subscriberId = "Not Found";\r
244                                                                 var serviceType = "Not Found";\r
245                                                                 \r
246                                                                 var serviceInstanceId = response.instanceId;\r
247                                                                 \r
248                                                                 for (var i = 0; i < response.control.length; i++) {\r
249                                                                         if (response.control[i].id == "subscriberName") {\r
250                                                                                 subscriberId = response.control[i].value;\r
251                                                                         } else if (response.control[i].id == "serviceType") {\r
252                                                                                 serviceType = response.control[i].value;\r
253                                                                         }\r
254                                                                 }\r
255                                                                 \r
256                                                                 \r
257                                                                 $scope.refreshSubs(subscriberId,serviceType,serviceInstanceId);\r
258                                                         \r
259                                                 }\r
260                                             }\r
261                                         });\r
262                                         \r
263                                 }, function errorCallback(response) {\r
264                                         console.log("Error: " + response);\r
265                                 });\r
266                 };\r
267                 \r
268                  $scope.cancelCreateSIType = function(){\r
269                                 \r
270                                 window.location.href = COMPONENT.SERVICE_MODLES_INSTANCES_SUBSCRIBERS_PATH;\r
271                                 \r
272                         }\r
273 \r
274         $scope.fetchServices = function() { \r
275                 var serviceIdList = [];\r
276 \r
277                 AaiService.getServices2(function(response) { // success\r
278                         DataService.setServiceIdList(response);\r
279                 },  function(response) { // failure\r
280                         $scope.showError(FIELD.ERROR.AAI);\r
281                         $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status;\r
282                         $scope.errorDetails = response.data;\r
283                 });\r
284         }\r
285 \r
286         $scope.refreshSubs = function() {\r
287                 $scope.init();\r
288                 $scope.fetchSubs(FIELD.PROMPT.REFRESH_SUB_LIST);\r
289                 $scope.fetchServices();\r
290         };\r
291 \r
292         $scope.fetchSubs = function(status) {\r
293                 $scope.status = status;\r
294 \r
295                 AaiService.getSubList(function(response) { // sucesss\r
296                         $scope.setProgress(100); // done\r
297                         $scope.status = FIELD.STATUS.DONE;\r
298                         $scope.isSpinnerVisible = false;\r
299                         $scope.customerList = response;\r
300                 },  function(response) { // failure\r
301                         $scope.showError(FIELD.ERROR.AAI);\r
302                         $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;\r
303                         $scope.errorDetails = response.data;\r
304                 });\r
305         }\r
306 \r
307 \r
308         $scope.getSubDetails = function(request) {\r
309 \r
310                 $scope.init();\r
311                 $scope.selectedSubscriber = $location.search().selectedSubscriber;\r
312                 $scope.selectedServiceInstance = $location.search().selectedServiceInstance;\r
313                 $scope.status = FIELD.STATUS.FETCHING_SUB_DETAILS + $scope.selectedSubscriber;\r
314 \r
315                 $scope.displayData = [];\r
316                 AaiService.getSubDetails($scope.selectedSubscriber, $scope.selectedServiceInstance, function(displayData, subscriberName) {\r
317                         $scope.displayData = displayData;\r
318                         $scope.viewPerPage=10;\r
319                         $scope.totalPage=$scope.displayData.length/$scope.viewPerPage;\r
320                         $scope.scrollViewPerPage=2;\r
321                         $scope.currentPage=1;\r
322                         $scope.searchCategory;\r
323                         $scope.searchString="";\r
324                         $scope.currentPageNum=1;\r
325                         $scope.defaultSort=COMPONENT.SUBSCRIBER_NAME;\r
326                                 $scope.setProgress(100); // done\r
327                         $scope.status = FIELD.STATUS.DONE;\r
328                         $scope.isSpinnerVisible = false;\r
329                         $scope.subscriberName = subscriberName;\r
330                 }, function(response) { \r
331                         $scope.showError(FIELD.ERROR.AAI);\r
332                         $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;\r
333                         $scope.errorDetails = response.data;\r
334                 });\r
335         }\r
336 \r
337 \r
338         $scope.$on(COMPONENT.MSO_DELETE_REQ, function(event, request) {\r
339                 // $log.debug("deleteInstance: request:");\r
340                 // $log.debug(request);\r
341                 $scope.init();\r
342 \r
343                 $http.post($scope.baseUrl + request.url, {\r
344                         requestDetails: request.requestDetails\r
345                 },{\r
346                         timeout: $scope.responseTimeoutMsec\r
347                 }).then($scope.handleInitialResponse)\r
348                 ["catch"]($scope.handleServerError);\r
349         });\r
350 \r
351         $scope.init = function() {\r
352 \r
353                 //PropertyService.setAaiBaseUrl("testaai");\r
354                 //PropertyService.setAsdcBaseUrl("testasdc");\r
355 \r
356                 // takes a default value, retrieves the prop value from the file system and sets it\r
357                 var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec();\r
358                 PropertyService.setMsoMaxPollingIntervalMsec(msecs);\r
359 \r
360                 // takes a default value, retrieves the prop value from the file system and sets it\r
361                 var polls = PropertyService.retrieveMsoMaxPolls();\r
362                 PropertyService.setMsoMaxPolls(polls);\r
363 \r
364                 //PropertyService.setMsoBaseUrl("testmso");\r
365                 PropertyService.setServerResponseTimeoutMsec();\r
366 \r
367                 /*\r
368                  * Common parameters that would typically be set when the page is\r
369                  * displayed for a specific service instance id.\r
370                  */\r
371 \r
372                 $scope.baseUrl = $scope.defaultBaseUrl;\r
373 \r
374                 $scope.isSpinnerVisible = true;\r
375                 $scope.isProgressVisible = true;\r
376                 $scope.isPopupVisible = true;\r
377                 $scope.requestId = "";\r
378                 $scope.error = "";\r
379                 $scope.pollAttempts = 0;\r
380                 $scope.log = "";                                \r
381                 $scope.enableCloseButton(false);\r
382                 $scope.resetProgress();\r
383                 $scope.setProgress(2); // Show "a little" progress\r
384         }\r
385 \r
386         $scope.getComponentList = function(event, request) {\r
387 \r
388                 $scope.isSpinnerVisible = true;\r
389                 $scope.isProgressVisible = true;\r
390                 $scope.isPopupVisible = true;\r
391                 $scope.requestId = "";\r
392                 $scope.error = "";\r
393                 $scope.pollAttempts = 0;\r
394                 $scope.log = "";                                \r
395 \r
396                 $scope.resetProgress();\r
397                 $scope.setProgress(2); // Show "a little" progress\r
398 \r
399                 $scope.globalCustomerId = $location.search().subscriberId;\r
400                 $scope.serviceType = $location.search().serviceType;\r
401                 $scope.serviceInstanceId = $location.search().serviceInstanceId;\r
402                 $scope.subscriberName = $location.search().subscriberName;\r
403 \r
404                 //$scope.getAsdcModel($location.search().modelUuid);\r
405 \r
406                 $scope.namedQueryId = VIDCONFIGURATION.COMPONENT_LIST_NAMED_QUERY_ID;\r
407                 $scope.status = FIELD.STATUS.FETCHING_SERVICE_INST_DATA + $scope.serviceInstanceId;\r
408 \r
409                 AaiService.runNamedQuery($scope.namedQueryId, $scope.globalCustomerId, $scope.serviceType, $scope.serviceInstanceId, \r
410                                 function(response) { //success\r
411                         $scope.handleInitialResponseInventoryItems(response);\r
412                         $scope.setProgress(100); // done\r
413                         $scope.status = FIELD.STATUS.DONE;\r
414                         $scope.isSpinnerVisible = false;\r
415                 }, \r
416                 function(response){ //failure\r
417                         $scope.showError(FIELD.ERROR.AAI);\r
418                         $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_INSTANCE_DATA + response.status;\r
419                         $scope.errorDetails = response.data;\r
420                 }\r
421                 );\r
422 \r
423         }\r
424 \r
425         $scope.handleServerError = function(response, status) {                         \r
426                 alert(response.statusText);\r
427         }\r
428         \r
429         $scope.getAsdcModel = function(disData) {\r
430 \r
431                 console.log ("disData"); console.log (JSON.stringify (disData, null, 4));\r
432                 \r
433                 if ( !(UtilityService.hasContents (disData.aaiModelVersionId)) ) {\r
434                         $scope.errorMsg = FIELD.ERROR.MODEL_VERSION_ID_MISSING;\r
435                         alert($scope.errorMsg);\r
436                         return;\r
437                 }\r
438                 \r
439                 // aaiModelVersionId is the model uuid\r
440                 var pathQuery = COMPONENT.SERVICES_PATH + disData.aaiModelVersionId;\r
441                 $http({\r
442                           method: 'GET',\r
443                           url: pathQuery\r
444                         }).then(function successCallback(response) {\r
445                                 vidService.setModel(response.data);\r
446                                 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
447                                 console.log("aaiSubscriber getAsdcModel DONE!!!!");\r
448                           }, function errorCallback(response) {\r
449                                   console.log("aaiSubscriber getAsdcModel - No matching model found matching the A&AI model version ID = " + disData.aaiModelVersionId);\r
450                                         $scope.errorMsg = FIELD.ERROR.NO_MATCHING_MODEL_AAI + disData.aaiModelVersionId;\r
451                                         alert($scope.errorMsg);\r
452                           });\r
453 \r
454         }\r
455 \r
456         $scope.getTenants = function(globalCustomerId) {\r
457                 $http.get(FIELD.ID.AAI_GET_TENTANTS + globalCustomerId)\r
458                 .then(function successCallback(response) {\r
459                         return response.data;\r
460                         //$location.path("/instantiate");\r
461                 }, function errorCallback(response) {\r
462                         //TODO\r
463                 });\r
464         }\r
465 \r
466         $scope.handleInitialResponseInventoryItems = function(response) {\r
467 \r
468                 $scope.inventoryResponseItemList = response.data[FIELD.ID.INVENTORY_RESPONSE_ITEM]; // get data from json\r
469                 console.log($scope.inventoryResponseItemList.toString());\r
470 \r
471                 $scope.displayData = [];\r
472                 $scope.vnfs = [];\r
473 \r
474                 $scope.counter = 100;\r
475 \r
476                 $scope.subscriberName = "";\r
477                 // just look up the subscriber name in A&AI here...\r
478                 AaiService.getSubscriberName($scope.globalCustomerId, function(response) {\r
479                         $scope.subscriberName = response;\r
480                         DataService.setSubscriberName($scope.subscriberName);\r
481 \r
482                         angular.forEach($scope.inventoryResponseItemList, function(inventoryResponseItem, key) {\r
483 \r
484                                 $scope.inventoryResponseItem = inventoryResponseItem;\r
485 \r
486                                 $scope.service.instance = {\r
487                                                 "name": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE][FIELD.ID.SERVICE_INSTANCE_NAME],\r
488                                                 "serviceInstanceId": $scope.serviceInstanceId,\r
489                                                 "serviceType": $scope.serviceType,\r
490                                                 "globalCustomerId": $scope.globalCustomerId,\r
491                                                 "subscriberName": $scope.subscriberName,\r
492                                                 "id": $scope.serviceInstanceId,\r
493                                                 "inputs": {\r
494                                                         "a": {\r
495                                                                 "type": PARAMETER.STRING,\r
496                                                                 "description": FIELD.PROMPT.VAR_DESCRIPTION_A,\r
497                                                                 "default": FIELD.PROMPT.DEFAULT_A\r
498                                                         },\r
499                                                         "b": {\r
500                                                                 "type": PARAMETER.STRING,\r
501                                                                 "description": FIELD.PROMPT.VAR_DESCRIPTION_B,\r
502                                                                 "default": FIELD.PROMPT.DEFAULT_B\r
503                                                         },\r
504                                                 },\r
505                                                 "object": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE],\r
506                                                 "vnfs": [],\r
507                                                 "networks": []\r
508                                 }\r
509 \r
510                                 if (inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
511 \r
512                                         angular.forEach(inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(subInventoryResponseItem, key) {\r
513                                                 // i expect to find vnfs now\r
514 \r
515                                                 if (subInventoryResponseItem[FIELD.ID.L3_NETWORK] != null) { \r
516                                                         var l3NetworkObject = subInventoryResponseItem[FIELD.ID.L3_NETWORK];\r
517                                                         var l3Network = { "id": $scope.counter++, \r
518                                                                         "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],\r
519                                                                         "itemType": FIELD.ID.L3_NETWORK,\r
520                                                                         "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],\r
521                                                                         "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],\r
522                                                                         "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],\r
523                                                                         "object": l3NetworkObject,\r
524                                                                         "nodes": [],\r
525                                                                         "subnets": []\r
526                                                         };\r
527                                                         if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
528                                                                 //console.log ("subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS]=");\r
529                                                                 //console.log (JSON.stringify (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS], null, 4 ));\r
530                                                                 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(subSubInventoryResponseItem, key) {\r
531                                                                         //console.log (JSON.stringify (subSubInventoryResponseItem, null, 4 ));\r
532                                                                         var subnet = {};\r
533                                                                         var subnetObject;\r
534                                                                         if (subSubInventoryResponseItem[FIELD.ID.SUB_NET] != null) {\r
535                                                                                 subnetObject = subSubInventoryResponseItem[FIELD.ID.SUB_NET];\r
536                                                                                 subnet = {\r
537                                                                                                 "subnet-id": subnetObject[FIELD.ID.SUBNET_ID],\r
538                                                                                                 "subnet-name": subnetObject[FIELD.ID.SUBNET_NAME],\r
539                                                                                                 "gateway-address": subnetObject[FIELD.ID.GATEWAY_ADDRESS],\r
540                                                                                                 "network-start-address": subnetObject[FIELD.ID.NETWORK_START_ADDRESS],\r
541                                                                                                 "cidr-mask": subnetObject[FIELD.ID.CIDR_MASK]\r
542                                                                                 };\r
543                                                                                 l3Network.subnets.push(subnet);\r
544                                                                         }\r
545                                                                 });\r
546                                                         }\r
547                                                         $scope.service.instance[FIELD.ID.NETWORKS].push(l3Network);\r
548                                                 }\r
549 \r
550                                                 if (subInventoryResponseItem[FIELD.ID.GENERIC_VNF] != null) {\r
551                                                         var genericVnfObject = subInventoryResponseItem[FIELD.ID.GENERIC_VNF];\r
552 \r
553                                                         var genericVnf = {\r
554                                                                         "name": genericVnfObject[FIELD.ID.VNF_NAME],\r
555                                                                         "id": $scope.counter++, \r
556                                                                         "itemType": COMPONENT.VNF, \r
557                                                                         "nodeType": genericVnfObject[FIELD.ID.VNF_TYPE],\r
558                                                                         "nodeId": genericVnfObject[FIELD.ID.VNF_ID],\r
559                                                                         "nodeStatus": genericVnfObject[FIELD.ID.ORCHESTRATION_STATUS],\r
560                                                                         "object": genericVnfObject,\r
561                                                                         "vfModules": [],\r
562                                                                         "volumeGroups": [],\r
563                                                                         "availableVolumeGroups": []\r
564                                                         };\r
565                                                         $scope.service.instance[FIELD.ID.VNFS].push(genericVnf);\r
566 \r
567                                                         // look for volume-groups\r
568                                                         if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
569                                                                 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(vfmodules, key) {\r
570 \r
571                                                                         if (vfmodules[FIELD.ID.VOLUME_GROUP] != null) { \r
572                                                                                 var volumeGroupObject = vfmodules[FIELD.ID.VOLUME_GROUP];\r
573                                                                                 var volumeGroup = { "id": $scope.counter++, \r
574                                                                                                 "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],\r
575                                                                                                 "itemType": FIELD.ID.VOLUME_GROUP,\r
576                                                                                                 "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],\r
577                                                                                                 "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],\r
578                                                                                                 "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],\r
579                                                                                                 "object": volumeGroupObject,\r
580                                                                                                 "nodes": []\r
581                                                                                 };\r
582                                                                                 genericVnf[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);\r
583                                                                                 genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS].push(volumeGroup);\r
584                                                                         }\r
585                                                                 });\r
586                                                         }\r
587                                                         // now we've loaded up the availableVolumeGroups, we can use it\r
588                                                         if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
589                                                                 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(vfmodules, key) {\r
590 \r
591                                                                         if (vfmodules[FIELD.ID.VF_MODULE] != null) { \r
592                                                                                 var vfModuleObject = vfmodules[FIELD.ID.VF_MODULE];\r
593                                                                                 var vfModule = { "id": $scope.counter++,\r
594                                                                                                 "name": vfModuleObject[FIELD.ID.VF_MODULE_NAME],\r
595                                                                                                 "itemType": FIELD.ID.VF_MODULE,\r
596                                                                                                 "nodeType": FIELD.ID.VF_MODULE, \r
597                                                                                                 "nodeStatus": vfModuleObject[FIELD.ID.ORCHESTRATION_STATUS],\r
598                                                                                                 "volumeGroups": [],\r
599                                                                                                 "object": vfModuleObject,\r
600                                                                                                 "networks": []\r
601                                                                                 };\r
602                                                                                 genericVnf[FIELD.ID.VF_MODULES].push(vfModule);\r
603                                                                                 if (vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
604                                                                                         angular.forEach(vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(networks, key) {\r
605                                                                                                 if (networks[FIELD.ID.L3_NETWORK] != null) { \r
606                                                                                                         var l3NetworkObject = networks[FIELD.ID.L3_NETWORK];\r
607                                                                                                         var l3Network = { "id": $scope.counter++, \r
608                                                                                                                         "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],\r
609                                                                                                                         "itemType": FIELD.ID.L3_NETWORK,\r
610                                                                                                                         "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],\r
611                                                                                                                         "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],\r
612                                                                                                                         "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],\r
613                                                                                                                         "object": l3NetworkObject,\r
614                                                                                                                         "nodes": []\r
615                                                                                                         };\r
616                                                                                                         vfModule[FIELD.ID.NETWORKS].push(l3Network);\r
617                                                                                                 }\r
618                                                                                                 if (networks[FIELD.ID.VOLUME_GROUP] != null) { \r
619                                                                                                         var volumeGroupObject = networks[FIELD.ID.VOLUME_GROUP];\r
620 \r
621                                                                                                         var volumeGroup = { "id": $scope.counter++, \r
622                                                                                                                         "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],\r
623                                                                                                                         "itemType": FIELD.ID.VOLUME_GROUP,\r
624                                                                                                                         "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],\r
625                                                                                                                         "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],\r
626                                                                                                                         "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],\r
627                                                                                                                         "object": volumeGroupObject,\r
628                                                                                                                         "nodes": []\r
629                                                                                                         };\r
630                                                                                                         var tmpVolGroup = [];\r
631 \r
632                                                                                                         angular.forEach(genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS], function(avgroup, key) {\r
633                                                                                                                 if (avgroup.name != volumeGroup.name) { \r
634                                                                                                                         tmpVolGroup.push(avgroup);\r
635                                                                                                                 }\r
636                                                                                                         });\r
637 \r
638                                                                                                         genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS] = tmpVolGroup;\r
639 \r
640                                                                                                         vfModule[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);\r
641                                                                                                 }\r
642 \r
643                                                                                         });\r
644                                                                                 }\r
645                                                                         }\r
646                                                                 });\r
647                                                         }\r
648                                                 }\r
649                                         });\r
650                                 }\r
651                         });\r
652                 });\r
653         }\r
654 \r
655         $scope.handleInitialResponse = function(response) {\r
656                 try {\r
657                         $scope.enableCloseButton(true);\r
658                         $scope.updateLog(response);\r
659                         if (response.data.status < 200 || response.data.status > 202) {\r
660                                 $scope.showError(FIELD.ERROR.MSO);\r
661                                 $scope.status = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.data.status;\r
662 \r
663                                 return;\r
664                         }\r
665 \r
666                         $scope.setProgress(100); // done\r
667                         $scope.status = FIELD.STATUS.DONE;\r
668                         $scope.isSpinnerVisible = false;\r
669 \r
670                         $scope.customer = response.data.customer; // get data from json\r
671 \r
672                         $scope.customerList = [];\r
673 \r
674                         angular.forEach($scope.customer, function(subVal, subKey) {\r
675                                 var cust = { "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID], "subscriberName": subVal[FIELD.ID.SUBNAME] };\r
676                                 $scope.customerList.push(cust);\r
677                         });     \r
678 \r
679                 } catch (error) {\r
680                         $scope.showContentError(error);\r
681                 }\r
682         }\r
683 \r
684         $scope.autoGetSubs = function() {\r
685                 /*\r
686                  * Optionally comment in / out one of these method calls (or add a similar\r
687                  * entry) to auto-invoke an entry when the test screen is redrawn.\r
688                  */\r
689                 $scope.getSubs();\r
690 \r
691         }\r
692 \r
693         $scope.updateLog = function(response) {\r
694 //              $scope.log = UtilityService.getCurrentTime() + " HTTP Status: " + \r
695 //              UtilityService.getHttpStatusText(response.data.status) + "\n" +\r
696 //              angular.toJson(response.data.entity, true) + "\n\n" + $scope.log;\r
697 //              UtilityService.checkUndefined("entity", response.data.entity);\r
698 //              UtilityService.checkUndefined("status", response.data.status);                          \r
699         }\r
700 \r
701         $scope.handleServerError = function(response, status) {                         \r
702                 $scope.enableCloseButton(true);\r
703                 var message = UtilityService.getHttpErrorMessage(response);\r
704                 if (message != ""){\r
705                         message = " (" + message + ")";\r
706                 }\r
707                 $scope.showError(FIELD.ERROR.SYSTEM_ERROR + message);\r
708         }\r
709 \r
710         $scope.showContentError = function(message) {\r
711                 // $log.debug(message);\r
712                 console.log(message);\r
713                 if (UtilityService.hasContents(message)) {\r
714                         $scope.showError("System failure (" + message + ")");\r
715                 } else {\r
716                         $scope.showError(FIELD.ERROR.SYSTEM_ERROR);\r
717                 }\r
718         }\r
719 \r
720         $scope.showError = function(message) {\r
721                 $scope.isSpinnerVisible = false;\r
722                 $scope.isProgressVisible = false;\r
723                 $scope.error = message;\r
724                 $scope.status = FIELD.STATUS.ERROR;\r
725         }\r
726 \r
727         $scope.close = function() {\r
728                 if ($scope.timer != undefined) {\r
729                         $timeout.cancel($scope.timer);                                  \r
730                 }\r
731                 $scope.isPopupVisible = false;\r
732         }\r
733 \r
734 \r
735 \r
736         /*\r
737          * Consider converting the progress bar mechanism, the disabled button handling\r
738          * and the following methods to generic Angular directive(s) and/or approach.\r
739          */\r
740 \r
741         $scope.enableCloseButton = function(isEnabled) {\r
742                 var selector = FIELD.STYLE.MSO_CTRL_BTN;\r
743 \r
744                 $scope.isCloseEnabled = isEnabled;\r
745 \r
746                 if (isEnabled) {\r
747                         $(selector).addClass(FIELD.STYLE.BTN_PRIMARY).removeClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.PRIMARY);\r
748                 } else {\r
749                         $(selector).removeClass(FIELD.STYLE.BTN_PRIMARY).addClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.DISABLED);                                   \r
750                 }\r
751         }\r
752 \r
753         $scope.resetProgress = function() {\r
754                 $scope.percentProgress = 0;\r
755                 $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_INFO;\r
756         }\r
757 \r
758         $scope.setProgress = function(percentProgress) {\r
759                 percentProgress = parseInt(percentProgress);\r
760                 if (percentProgress >= 100) {\r
761                         $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_SUCCESS;                                        \r
762                 }\r
763 \r
764                 if (percentProgress < $scope.percentProgress) {\r
765                         return;\r
766                 }\r
767 \r
768                 $scope.percentProgress = percentProgress;\r
769                 $scope.progressWidth = {width: percentProgress + "%"};\r
770                 if (percentProgress >= 5) {\r
771                         $scope.progressText =  percentProgress + " %";\r
772                 } else {\r
773                         // Hidden since color combination is barely visible when progress portion is narrow.\r
774                         $scope.progressText = "";\r
775                 }\r
776         }\r
777 \r
778         $scope.reloadRoute = function() {\r
779                 $route.reload();\r
780         }\r
781 \r
782         $scope.prevPage = function() {\r
783                 $scope.currentPage--;\r
784         }\r
785 \r
786         $scope.nextPage = function() {\r
787                 $scope.currentPage++;\r
788         }\r
789         $scope.serviceInstanceses = [{"sinstance":FIELD.NAME.SERVICE_INSTANCE_Id},{"sinstance":FIELD.NAME.SERVICE_INSTANCE_NAME}]\r
790         $scope.getSubscriberDet = function(selectedCustomer,selectedserviceinstancetype,selectedServiceInstance){\r
791                 \r
792                 var sintype =selectedserviceinstancetype;\r
793                 if (selectedServiceInstance != "" && selectedServiceInstance != undefined) {\r
794                         selectedServiceInstance.trim();\r
795 \r
796                         // check with A&AI\r
797                         $http.get(COMPONENT.AAI_GET_SERVICE_INSTANCE_PATH  + selectedServiceInstance+"/"+sintype + "?r=" + Math.random(), {\r
798 \r
799                         },{\r
800                                 timeout: $scope.responseTimeoutMsec\r
801                         }).then(function(response) {\r
802                                 var notFound = true;\r
803                                 if (angular.isArray(response.data[FIELD.ID.RESULT_DATA])) {\r
804                                         var item = [];\r
805                                         var urlParts = [];\r
806                                         item = response.data[FIELD.ID.RESULT_DATA][0];\r
807                                         var url = item[FIELD.ID.RESOURCE_LINK];\r
808                                         var globalCustomerId = "";\r
809                                         var serviceSubscription = "";\r
810                                         // split it and find the customer Id and service-subscription\r
811                                         urlParts = url.split("/");\r
812                                         if (urlParts[7] === FIELD.ID.CUSTOMER) { \r
813                                                 globalCustomerId = urlParts[8];\r
814                                         }\r
815                                         if (urlParts[10] === FIELD.ID.SERVICE_SUBSCRIPTION) { \r
816                                                 serviceSubscription = urlParts[11];\r
817                                         }\r
818 \r
819                                         if (globalCustomerId !== "") {\r
820                                                 notFound = false;\r
821                                                 window.location.href = COMPONENT.SELECTED_SERVICE_SUB_PATH + serviceSubscription + COMPONENT.SELECTEDSUBSCRIBER_SUB_PATH + globalCustomerId + COMPONENT.SELECTEDSERVICEINSTANCE_SUB_PATH + selectedServiceInstance;\r
822                                         }\r
823                                 }\r
824                                 if (notFound) {\r
825                                         alert(FIELD.ERROR.SERVICE_INST_DNE);\r
826                                 }\r
827                         }); // add a failure callback...\r
828                 } else if (selectedCustomer != null) { \r
829                         window.location.href = COMPONENT.SELECTED_SUB_PATH + selectedCustomer;\r
830                 } else {\r
831                         alert(FIELD.ERROR.SELECT);\r
832                 }\r
833         };\r
834   }]).directive('restrictInput', function(){\r
835                 \r
836                 return {\r
837                         \r
838                         restrict: 'A',\r
839                         require: 'ngModel',\r
840                         link: function($scope, element, attr, ctrl){\r
841                                 ctrl.$parsers.unshift(function(viewValue){\r
842                                         \r
843                                         var types = $scope.$eval(attr.restrictInput);\r
844                                         if(!types.regex && types.type){\r
845                                                 \r
846                                                 switch(types.type){\r
847                                                         case 'Service Instance Name' : types.regex = '^[a-zA-Z0-9-_]*$'; break;\r
848                                                         default: types.regex= '';\r
849                                                 }\r
850                                         }\r
851                                         var reg = new RegExp(types.regex);\r
852                                         if(reg.test(viewValue)){\r
853                                                 return viewValue;\r
854                                         } else {\r
855                                                 var overrideValue = (reg.test(viewValue) ? viewValue : '');\r
856                                                 element.val(overrideValue);\r
857                                                 return overrideValue;\r
858                                         }\r
859                                 });\r
860                         }\r
861                 };\r
862 \r
863             });\r
864 appDS2.controller('TreeCtrl', ['$scope', function ($scope) {\r
865         $scope.remove = function (scope) {\r
866                 scope.remove();\r
867         };\r
868 \r
869         $scope.toggle = function (scope) {\r
870                 scope.toggle();\r
871         };\r
872 \r
873         $scope.moveLastToTheBeginning = function () {\r
874                 var a = $scope.data.pop();\r
875                 $scope.data.splice(0, 0, a);\r
876         };\r
877 \r
878         $scope.newSubItem = function (scope) {\r
879                 var nodeData = scope.$modelValue;\r
880                 nodeData.nodes.push({\r
881                         id: nodeData.id * 10 + nodeData.nodes.length,\r
882                         title: nodeData.title + '.' + (nodeData.nodes.length + 1),\r
883                         nodes: []\r
884                 });\r
885         };\r
886 \r
887         $scope.collapseAll = function () {\r
888                 $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_COLLAPSEALL);\r
889         };\r
890 \r
891         $scope.expandAll = function () {\r
892                 $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_EXPANDALL);\r
893         };\r
894 \r
895 \r
896 }]);\r
897 \r
898 \r
899 \r