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