org.onap migration
[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", "$uibModal", "VIDCONFIGURATION", "UtilityService", "vidService", "AaiService", "MsoService", "OwningEntityService", "$q",\r
24     function (COMPONENT, FIELD, PARAMETER, DataService, PropertyService, $scope, $http, $timeout, $location, $log, $route, $uibModal, VIDCONFIGURATION, UtilityService, vidService, AaiService, MsoService, OwningEntityService, $q) {\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'&& 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].name;\r
140                 }\r
141             }\r
142             ;\r
143             for (var i = 0; i < $scope.custSubList.length; i++) {\r
144                 if ($scope.createSubscriberName === $scope.custSubList[i].subscriberName) {\r
145                     globalCustomerId = $scope.custSubList[i].globalCustomerId;\r
146                     globalCustId = globalCustomerId;\r
147                 }\r
148             }\r
149             ;\r
150             var pathQuery = "";\r
151 \r
152             if (null !== globalCustomerId && "" !== globalCustomerId && undefined !== globalCustomerId\r
153                 && null !== serviceTypeId && "" !== serviceTypeId && undefined !== serviceTypeId) {\r
154                 pathQuery = COMPONENT.SERVICES_PATH + globalCustomerId + "/" + $scope.serviceTypeName;\r
155             }\r
156 \r
157             var namedQueryId = '6e806bc2-8f9b-4534-bb68-be91267ff6c8';\r
158             AaiService.getServiceModelsByServiceType(namedQueryId, globalCustomerId, $scope.serviceTypeName, function (response) { // success\r
159                 $scope.services = [];\r
160                 if (angular.isArray(response.data['inventory-response-item']) && response.data['inventory-response-item'].length > 0 && response.data['inventory-response-item'][0]['inventory-response-items']) {\r
161                     wholeData = response.data['inventory-response-item'][0]['inventory-response-items']['inventory-response-item'];\r
162                     $scope.services = $scope.filterDataWithHigerVersion(response.data['inventory-response-item'][0]['inventory-response-items']['inventory-response-item']);\r
163                     $scope.serviceType = response.data['inventory-response-item'][0]['service-subscription']['service-type'];\r
164                     $scope.viewPerPage = 10;\r
165                     $scope.totalPage = $scope.services.length / $scope.viewPerPage;\r
166                     $scope.sortBy = "name";\r
167                     $scope.scrollViewPerPage = 2;\r
168                     $scope.currentPage = 1;\r
169                     $scope.searchCategory;\r
170                     $scope.searchString = "";\r
171                     $scope.currentPageNum = 1;\r
172                     $scope.isSpinnerVisible = false;\r
173                     $scope.isProgressVisible = false;\r
174                 } else {\r
175                     $scope.status = "Failed to get service models from ASDC.";\r
176                     $scope.error = true;\r
177                     $scope.isSpinnerVisible = false;\r
178                 }\r
179                 DataService.setServiceIdList(response);\r
180             }, function (response) { // failure\r
181                 $scope.showError(FIELD.ERROR.AAI);\r
182                 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status;\r
183                 $scope.errorDetails = response.data;\r
184             });\r
185 \r
186         };\r
187 \r
188         var globalCustId;// This value will be assigned only on create new service instance screen-macro\r
189         $scope.createType = "a la carte";\r
190         $scope.deployService = function (service, hideServiceFields) {\r
191             hideServiceFields = hideServiceFields || false;\r
192             var temp = service;\r
193             service.uuid = service['service-instance']['model-version-id'];\r
194 \r
195             console.log("Instantiating ASDC service " + service.uuid);\r
196 \r
197             $http.get('rest/models/services/' + service.uuid)\r
198                 .then(function successCallback(getServiceResponse) {\r
199                     getServiceResponse.data['service'].serviceTypeName = $scope.serviceTypeName;\r
200                     getServiceResponse.data['service'].createSubscriberName = $scope.createSubscriberName;\r
201                     var serviceModel = getServiceResponse.data;\r
202                     DataService.setServiceName(serviceModel.service.name);\r
203 \r
204                     DataService.setModelInfo(COMPONENT.SERVICE, {\r
205                         "modelInvariantId": serviceModel.service.invariantUuid,\r
206                         "modelVersion": serviceModel.service.version,\r
207                         "modelNameVersionId": serviceModel.service.uuid,\r
208                         "modelName": serviceModel.service.name,\r
209                         "description": serviceModel.service.description,\r
210                         "serviceType": serviceModel.service.serviceType,\r
211                         "serviceRole": serviceModel.service.serviceRole,\r
212                         "category": serviceModel.service.category,\r
213                         "serviceTypeName": serviceModel.service.serviceTypeName,\r
214                         "createSubscriberName": serviceModel.service.createSubscriberName\r
215                     });\r
216                     DataService.setHideServiceFields(hideServiceFields);\r
217                     if (hideServiceFields) {\r
218                         DataService.setServiceType($scope.serviceTypeName);\r
219                         DataService.setGlobalCustomerId(globalCustId);\r
220                     }\r
221 \r
222                     DataService.setALaCarte(true);\r
223                     $scope.createType = "a la carte";\r
224                     var broadcastType = "createComponent";\r
225 \r
226                     if (UtilityService.arrayContains(VIDCONFIGURATION.MACRO_SERVICES, serviceModel.service.invariantUuid)) {\r
227                         DataService.setALaCarte(false);\r
228                         $scope.createType = "Macro";\r
229                         var convertedAsdcModel = UtilityService.convertModel(serviceModel);\r
230 \r
231                         //console.log ("display inputs ");\r
232                         //console.log (JSON.stringify ( convertedAsdcModel.completeDisplayInputs));\r
233 \r
234                         DataService.setModelInfo(COMPONENT.SERVICE, {\r
235                             "modelInvariantId": serviceModel.service.invariantUuid,\r
236                             "modelVersion": serviceModel.service.version,\r
237                             "modelNameVersionId": serviceModel.service.uuid,\r
238                             "modelName": serviceModel.service.name,\r
239                             "description": serviceModel.service.description,\r
240                             "category": serviceModel.service.category,\r
241                             "serviceEcompNaming": serviceModel.service.serviceEcompNaming,\r
242                             "inputs": serviceModel.service.inputs,\r
243                             "displayInputs": convertedAsdcModel.completeDisplayInputs,\r
244                             "serviceTypeName": serviceModel.service.serviceTypeName,\r
245                             "createSubscriberName": serviceModel.service.createSubscriberName,\r
246                             "serviceType": serviceModel.service.serviceType,\r
247                             "serviceRole": serviceModel.service.serviceRole\r
248                         });\r
249                     }\r
250                     ;\r
251 \r
252                     $scope.$broadcast(broadcastType, {\r
253                         componentId: COMPONENT.SERVICE,\r
254                         callbackFunction: function (response) {\r
255                             if (response.isSuccessful) {\r
256                                 vidService.setModel(serviceModel);\r
257 \r
258                                 var subscriberId = "Not Found";\r
259                                 var serviceType = "Not Found";\r
260 \r
261                                 var serviceInstanceId = response.instanceId;\r
262 \r
263                                 for (var i = 0; i < response.control.length; i++) {\r
264                                     if (response.control[i].id == "subscriberName") {\r
265                                         subscriberId = response.control[i].value;\r
266                                     } else if (response.control[i].id == "serviceType") {\r
267                                         serviceType = response.control[i].value;\r
268                                     }\r
269                                 }\r
270 \r
271 \r
272                                 $scope.refreshSubs(subscriberId, serviceType, serviceInstanceId);\r
273 \r
274                             }\r
275                         }\r
276                     });\r
277 \r
278                 }, function errorCallback(response) {\r
279                     $log.error("Error: ", response);\r
280                 });\r
281         };\r
282 \r
283         var wholeData=[];\r
284         //extract all models from service instances properties and filter by the higher model version\r
285         $scope.filterDataWithHigerVersion = function(serviceData){\r
286 \r
287             //get all service instances & models collected into array. key = model invariant id\r
288             var servicesByModelInvariant = _.reduce(serviceData, function(result, item) {\r
289                 if (item['extra-properties']['extra-property']) {\r
290                     var invariantId = item['extra-properties']['extra-property'][4];\r
291                     if (invariantId) {\r
292                         (result[invariantId["property-value"]] || (result[invariantId["property-value"]] = [])).push(item);\r
293                     }\r
294                 }\r
295                 return result;\r
296             }, {});\r
297 \r
298             //iterate over the array and get the highest model version for each group of services\r
299             var filterDataServicesByVersion = [];\r
300             _.forEach(servicesByModelInvariant, function(items) {\r
301                 var maxVersionItem = _.maxBy(items, function(item) { return parseFloat(item['extra-properties']['extra-property'][6]["property-value"]); });\r
302                 filterDataServicesByVersion.push(maxVersionItem);\r
303             });\r
304 \r
305             return filterDataServicesByVersion;\r
306         };\r
307 \r
308         $scope.tableData = [];\r
309         var oldData = [];\r
310         $scope.loadPreviousVersionData = function (version, invariantUUID) {\r
311             $scope.tableData = [];\r
312             oldData = [];\r
313             for (var i = 0; i < wholeData.length; i++) {\r
314                 if (wholeData[i]['extra-properties']['extra-property'] && wholeData[i]['extra-properties']['extra-property'][4]['property-value'] == invariantUUID && version != wholeData[i]['extra-properties']['extra-property'][6]['property-value']) {\r
315                     oldData.push(wholeData[i]);\r
316                 }\r
317             }\r
318             $scope.tableData = oldData;\r
319             $scope.createType = "Previous Version";\r
320             var broadcastType = "createTableComponent";\r
321             $scope.componentName = invariantUUID;\r
322             $scope.$broadcast(broadcastType, {\r
323                 componentId: COMPONENT.OLDVERSION,\r
324                 callbackFunction: function (response) {\r
325                 }\r
326             });\r
327         }\r
328         $scope.cancelCreateSIType = function () {\r
329 \r
330             window.location.href = COMPONENT.SERVICE_MODLES_INSTANCES_SUBSCRIBERS_PATH;\r
331 \r
332         }\r
333 \r
334         $scope.fetchServices = function () {\r
335             var serviceIdList = [];\r
336 \r
337             AaiService.getServices2(function (response) { // success\r
338                 DataService.setServiceIdList(response);\r
339             }, function (response) { // failure\r
340                 $scope.showError(FIELD.ERROR.AAI);\r
341                 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status;\r
342                 $scope.errorDetails = response.data;\r
343             });\r
344         };\r
345 \r
346         $scope.refreshSubs = function () {\r
347             $scope.init();\r
348             $scope.fetchSubs(FIELD.PROMPT.REFRESH_SUB_LIST);\r
349             $scope.fetchServices();\r
350         };\r
351 \r
352         $scope.loadOwningEntity = function () {\r
353             OwningEntityService.getOwningEntityProperties(function (response) {\r
354                 $scope.owningEntities = response.owningEntity;\r
355                 $scope.projects = response.project;\r
356 \r
357                 // working project name: owning-entity-id-val-cp8128\r
358                 // working owning entity name: owning-entity-id-val-cp8128\r
359             });\r
360         };\r
361 \r
362         $scope.fetchSubs = function (status) {\r
363             $scope.status = status;\r
364 \r
365             AaiService.getSubList(function (response) {\r
366                 $scope.setProgress(100); // done\r
367                 $scope.status = FIELD.STATUS.DONE;\r
368                 $scope.isSpinnerVisible = false;\r
369                 $scope.customerList = response;\r
370             }, function (response) { // failure\r
371                 $scope.showError(FIELD.ERROR.AAI);\r
372                 $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;\r
373                 $scope.errorDetails = response.data;\r
374             });\r
375         }\r
376 \r
377         $scope.getPermitted = function (item) {\r
378             return item.isPermitted || item[FIELD.ID.IS_PERMITTED];\r
379 \r
380         }\r
381 \r
382 \r
383         $scope.getSubDetails = function () {\r
384 \r
385             $scope.init();\r
386             //$scope.selectedSubscriber = $location.search().selectedSubscriber;\r
387             // $scope.selectedServiceInstance = $location.search().selectedServiceInstance;\r
388             $scope.status = FIELD.STATUS.FETCHING_SUB_DETAILS + $scope.selectedSubscriber;\r
389             var query = $location.url().replace($location.path(),'');\r
390 \r
391             $scope.displayData = [];\r
392             AaiService.searchServiceInstances(query).then(function (response) {\r
393                 $scope.displayData = response.displayData;\r
394                 if (response.displayData.length)\r
395                 {\r
396                     var first = response.displayData[0];\r
397                     $scope.selectedSubscriberId = first.globalCustomerId;\r
398                     $scope.selectedSubscriberName = first.subscriberName;\r
399                 }\r
400                 $scope.viewPerPage = 10;\r
401                 $scope.totalPage = $scope.displayData.length / $scope.viewPerPage;\r
402                 $scope.scrollViewPerPage = 2;\r
403                 $scope.currentPage = 1;\r
404                 $scope.searchCategory;\r
405                 $scope.searchString = "";\r
406                 $scope.currentPageNum = 1;\r
407                 $scope.defaultSort = COMPONENT.SUBSCRIBER_NAME;\r
408                 $scope.setProgress(100); // done\r
409                 $scope.status = FIELD.STATUS.DONE;\r
410                 $scope.isSpinnerVisible = false;\r
411 \r
412             }).catch(function (response) {\r
413                 $scope.showError(FIELD.ERROR.AAI);\r
414                 $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;\r
415                 $scope.errorDetails = response.data;\r
416             });\r
417         };\r
418 \r
419 \r
420         $scope.$on(COMPONENT.MSO_DELETE_REQ, function (event, request) {\r
421             // $log.debug("deleteInstance: request:");\r
422             // $log.debug(request);\r
423             $scope.init();\r
424 \r
425             $http.post($scope.baseUrl + request.url, {\r
426                 requestDetails: request.requestDetails\r
427             }, {\r
428                 timeout: $scope.responseTimeoutMsec\r
429             }).then($scope.handleInitialResponse)\r
430                 ["catch"]($scope.handleServerError);\r
431         });\r
432 \r
433         $scope.init = function () {\r
434             //PropertyService.setAaiBaseUrl("testaai");\r
435             //PropertyService.setAsdcBaseUrl("testasdc");\r
436 \r
437             // takes a default value, retrieves the prop value from the file system and sets it\r
438             var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec();\r
439             PropertyService.setMsoMaxPollingIntervalMsec(msecs);\r
440 \r
441             // takes a default value, retrieves the prop value from the file system and sets it\r
442             var polls = PropertyService.retrieveMsoMaxPolls();\r
443             PropertyService.setMsoMaxPolls(polls);\r
444 \r
445             //PropertyService.setMsoBaseUrl("testmso");\r
446             PropertyService.setServerResponseTimeoutMsec();\r
447 \r
448             /*\r
449              * Common parameters that would typically be set when the page is\r
450              * displayed for a specific service instance id.\r
451              */\r
452 \r
453             $scope.baseUrl = $scope.defaultBaseUrl;\r
454 \r
455             $scope.isSpinnerVisible = true;\r
456             $scope.isProgressVisible = true;\r
457             $scope.isPopupVisible = true;\r
458             $scope.requestId = "";\r
459             $scope.error = "";\r
460             $scope.pollAttempts = 0;\r
461             $scope.log = "";\r
462             $scope.enableCloseButton(false);\r
463             $scope.resetProgress();\r
464             $scope.setProgress(2); // Show "a little" progress\r
465         }\r
466 \r
467         $scope.getComponentList = function (event, request) {\r
468 \r
469             $scope.isSpinnerVisible = true;\r
470             $scope.isProgressVisible = true;\r
471             $scope.isPopupVisible = true;\r
472             $scope.requestId = "";\r
473             $scope.error = "";\r
474             $scope.pollAttempts = 0;\r
475             $scope.log = "";\r
476 \r
477             $scope.resetProgress();\r
478             $scope.setProgress(2); // Show "a little" progress\r
479 \r
480             $scope.globalCustomerId = $location.search().subscriberId;\r
481             $scope.serviceType = $location.search().serviceType;\r
482             $scope.serviceInstanceId = $location.search().serviceInstanceId;\r
483             $scope.subscriberName = $location.search().subscriberName;\r
484 \r
485             //$scope.getAsdcModel($location.search().modelUuid);\r
486 \r
487             $scope.namedQueryId = VIDCONFIGURATION.COMPONENT_LIST_NAMED_QUERY_ID;\r
488             $scope.status = FIELD.STATUS.FETCHING_SERVICE_INST_DATA + $scope.serviceInstanceId;\r
489 \r
490             AaiService.runNamedQuery($scope.namedQueryId, $scope.globalCustomerId, $scope.serviceType, $scope.serviceInstanceId,\r
491                 function (response) { //success\r
492                     $scope.handleInitialResponseInventoryItems(response);\r
493                     $scope.setProgress(100); // done\r
494                     $scope.status = FIELD.STATUS.DONE;\r
495                     $scope.isSpinnerVisible = false;\r
496                 },\r
497                 function (response) { //failure\r
498                     $scope.showError(FIELD.ERROR.AAI);\r
499                     $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_INSTANCE_DATA + response.status;\r
500                     $scope.errorDetails = response.data;\r
501                 }\r
502             );\r
503 \r
504         }\r
505 \r
506         $scope.handleServerError = function (response, status) {\r
507             alert(response.statusText);\r
508         }\r
509 \r
510         function getModelVersionIdForServiceInstance(instance) {\r
511             if (UtilityService.hasContents(instance.aaiModelVersionId)) {\r
512                 return $q.resolve(instance.aaiModelVersionId);\r
513             } else {\r
514                 return AaiService.getModelVersionId(instance.globalCustomerId, instance.serviceInstanceId);\r
515             }\r
516         }\r
517 \r
518         $scope.onViewEditClick = function (disData) {\r
519             $log.debug("disData", disData, null, 4);\r
520 \r
521             getModelVersionIdForServiceInstance(disData)\r
522                 .then(getAsdcModelByVersionId, handleErrorGettingModelVersion)\r
523                 .then(navigateToViewEditPage);\r
524 \r
525 \r
526             function navigateToViewEditPage() {\r
527                 window.location.href =\r
528                     COMPONENT.INSTANTIATE_ROOT_PATH + disData.globalCustomerId +\r
529                     COMPONENT.SUBSCRIBERNAME_SUB_PATH + disData.subscriberName +\r
530                     COMPONENT.SERVICETYPE_SUB_PATH + disData.serviceType +\r
531                     COMPONENT.SERVICEINSTANCEID_SUB_PATH + disData.serviceInstanceId +\r
532                     COMPONENT.IS_PERMITTED_SUB_PATH + disData.isPermitted;\r
533             }\r
534         };\r
535 \r
536         function handleErrorGettingModelVersion(err) {\r
537             $log.error("aaiSubscriber getModelVersionIdForServiceInstance - " + err);\r
538             $scope.errorMsg = err;\r
539             alert($scope.errorMsg);\r
540             return $q.reject();\r
541         }\r
542 \r
543         function getAsdcModelByVersionId(aaiModelVersionId) {\r
544             // aaiModelVersionId is the model uuid\r
545             var pathQuery = COMPONENT.SERVICES_PATH + aaiModelVersionId;\r
546             return $http({\r
547                 method: 'GET',\r
548                 url: pathQuery\r
549             }).then(function successCallback(response) {\r
550                 vidService.setModel(response.data);\r
551                 console.log("aaiSubscriber getAsdcModel DONE!!!!");\r
552             }, function errorCallback(response) {\r
553                 $log.error("aaiSubscriber getAsdcModel - " + FIELD.ERROR.NO_MATCHING_MODEL_AAI + aaiModelVersionId);\r
554                 $scope.errorMsg = FIELD.ERROR.NO_MATCHING_MODEL_AAI + aaiModelVersionId;\r
555                 alert($scope.errorMsg);\r
556             });\r
557         }\r
558 \r
559         function returnMatchingServiceSubscription(serviceSubs, serviceId){\r
560             var orchStatus;\r
561             serviceSubs.forEach(function(item){\r
562                 if (item[FIELD.ID.SERVICE_INSTANCES] != null) {\r
563                     item[FIELD.ID.SERVICE_INSTANCES][FIELD.ID.SERVICE_INSTANCE].forEach(function (service) {\r
564                         if (service[FIELD.ID.SERVICE_INSTANCE_ID] === serviceId) {\r
565                             orchStatus = service['orchestration-status']\r
566                         }\r
567                     })\r
568                 }\r
569             });\r
570             return orchStatus;\r
571         }\r
572 \r
573         $scope.getTenants = function (globalCustomerId) {\r
574             $http.get(FIELD.ID.AAI_GET_TENTANTS + globalCustomerId)\r
575                 .then(function successCallback(response) {\r
576                     return response.data;\r
577                     //$location.path("/instantiate");\r
578                 }, function errorCallback(response) {\r
579                     //TODO\r
580                 });\r
581         }\r
582 \r
583         $scope.isActivateDeactivateEnabled = function(btnType) {\r
584             if ($scope.serviceOrchestrationStatus && $scope.service.model.service.serviceType.toLowerCase().indexOf('transport') != -1) {\r
585                 switch (btnType) {\r
586                     case "activate":\r
587                         return $scope.serviceOrchestrationStatus === 'Created' ||\r
588                             $scope.serviceOrchestrationStatus.toLowerCase() === 'pendingdelete' || $scope.serviceOrchestrationStatus.toLowerCase() === 'pending-delete';\r
589                         break;\r
590                     case "deactivate":\r
591                         return $scope.serviceOrchestrationStatus === 'Active';\r
592                         break;\r
593                 }\r
594             }\r
595 \r
596             return false;\r
597         };\r
598 \r
599         $scope.handleInitialResponseInventoryItems = function (response) {\r
600 \r
601             $scope.inventoryResponseItemList = response.data[FIELD.ID.INVENTORY_RESPONSE_ITEM]; // get data from json\r
602             $log.debug($scope.inventoryResponseItemList);\r
603 \r
604             $scope.displayData = [];\r
605             $scope.vnfs = [];\r
606 \r
607             $scope.counter = 100;\r
608 \r
609             $scope.subscriberName = "";\r
610             // just look up the subscriber name in A&AI here...\r
611             AaiService.getSubscriberName($scope.globalCustomerId, function (response) {\r
612                 $scope.subscriberName = response.subscriberName;\r
613                 DataService.setSubscriberName($scope.subscriberName);\r
614                 $scope.serviceOrchestrationStatus = returnMatchingServiceSubscription(response.serviceSubscriptions[FIELD.ID.SERVICE_SUBSCRIPTION], $scope.serviceInstanceId);\r
615 \r
616                 angular.forEach($scope.inventoryResponseItemList, function (inventoryResponseItem, key) {\r
617 \r
618                     $scope.inventoryResponseItem = inventoryResponseItem;\r
619 \r
620                     $scope.service.instance = {\r
621                         "name": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE][FIELD.ID.SERVICE_INSTANCE_NAME],\r
622                         "serviceInstanceId": $scope.serviceInstanceId,\r
623                         "serviceType": $scope.serviceType,\r
624                         "globalCustomerId": $scope.globalCustomerId,\r
625                         "subscriberName": $scope.subscriberName,\r
626                         "id": $scope.serviceInstanceId,\r
627                         "inputs": {\r
628                             "a": {\r
629                                 "type": PARAMETER.STRING,\r
630                                 "description": FIELD.PROMPT.VAR_DESCRIPTION_A,\r
631                                 "default": FIELD.PROMPT.DEFAULT_A\r
632                             },\r
633                             "b": {\r
634                                 "type": PARAMETER.STRING,\r
635                                 "description": FIELD.PROMPT.VAR_DESCRIPTION_B,\r
636                                 "default": FIELD.PROMPT.DEFAULT_B\r
637                             }\r
638                         },\r
639                         "object": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE],\r
640                         "vnfs": [],\r
641                         "networks": [],\r
642                         "configurations": []\r
643                     };\r
644 \r
645                     if (inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
646 \r
647                         angular.forEach(inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (subInventoryResponseItem, key) {\r
648                             // i expect to find vnfs now\r
649 \r
650                             if (subInventoryResponseItem[FIELD.ID.L3_NETWORK] != null) {\r
651                                 var l3NetworkObject = subInventoryResponseItem[FIELD.ID.L3_NETWORK];\r
652                                 var l3Network = {\r
653                                     "id": $scope.counter++,\r
654                                     "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],\r
655                                     "itemType": FIELD.ID.L3_NETWORK,\r
656                                     "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],\r
657                                     "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],\r
658                                     "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],\r
659                                     "object": l3NetworkObject,\r
660                                     "nodes": [],\r
661                                     "subnets": []\r
662                                 };\r
663                                 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
664                                     //console.log ("subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS]=");\r
665                                     //console.log (JSON.stringify (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS], null, 4 ));\r
666                                     angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (subSubInventoryResponseItem, key) {\r
667                                         //console.log (JSON.stringify (subSubInventoryResponseItem, null, 4 ));\r
668                                         var subnet = {};\r
669                                         var subnetObject;\r
670                                         if (subSubInventoryResponseItem[FIELD.ID.SUB_NET] != null) {\r
671                                             subnetObject = subSubInventoryResponseItem[FIELD.ID.SUB_NET];\r
672                                             subnet = {\r
673                                                 "subnet-id": subnetObject[FIELD.ID.SUBNET_ID],\r
674                                                 "subnet-name": subnetObject[FIELD.ID.SUBNET_NAME],\r
675                                                 "gateway-address": subnetObject[FIELD.ID.GATEWAY_ADDRESS],\r
676                                                 "network-start-address": subnetObject[FIELD.ID.NETWORK_START_ADDRESS],\r
677                                                 "cidr-mask": subnetObject[FIELD.ID.CIDR_MASK]\r
678                                             };\r
679                                             l3Network.subnets.push(subnet);\r
680                                         }\r
681                                     });\r
682                                 }\r
683                                 $scope.service.instance[FIELD.ID.NETWORKS].push(l3Network);\r
684                             }\r
685 \r
686                             if (subInventoryResponseItem[FIELD.ID.GENERIC_VNF] != null) {\r
687                                 var genericVnfObject = subInventoryResponseItem[FIELD.ID.GENERIC_VNF];\r
688 \r
689                                 var genericVnf = {\r
690                                     "name": genericVnfObject[FIELD.ID.VNF_NAME],\r
691                                     "id": $scope.counter++,\r
692                                     "itemType": COMPONENT.VNF,\r
693                                     "nodeType": genericVnfObject[FIELD.ID.VNF_TYPE],\r
694                                     "nodeId": genericVnfObject[FIELD.ID.VNF_ID],\r
695                                     "nodeStatus": genericVnfObject[FIELD.ID.ORCHESTRATION_STATUS],\r
696                                     "object": genericVnfObject,\r
697                                     "vfModules": [],\r
698                                     "volumeGroups": [],\r
699                                     "availableVolumeGroups": []\r
700                                 };\r
701                                 $scope.service.instance[FIELD.ID.VNFS].push(genericVnf);\r
702 \r
703                                 // look for volume-groups\r
704                                 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
705                                     angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (vfmodules, key) {\r
706 \r
707                                         if (vfmodules[FIELD.ID.VOLUME_GROUP] != null) {\r
708                                             var volumeGroupObject = vfmodules[FIELD.ID.VOLUME_GROUP];\r
709                                             var volumeGroup = {\r
710                                                 "id": $scope.counter++,\r
711                                                 "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],\r
712                                                 "itemType": FIELD.ID.VOLUME_GROUP,\r
713                                                 "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],\r
714                                                 "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],\r
715                                                 "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],\r
716                                                 "object": volumeGroupObject,\r
717                                                 "nodes": []\r
718                                             };\r
719                                             genericVnf[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);\r
720                                             genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS].push(volumeGroup);\r
721                                         }\r
722                                     });\r
723                                 }\r
724                                 // now we've loaded up the availableVolumeGroups, we can use it\r
725                                 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
726                                     angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (vfmodules, key) {\r
727 \r
728                                         if (vfmodules[FIELD.ID.VF_MODULE] != null) {\r
729                                             var vfModuleObject = vfmodules[FIELD.ID.VF_MODULE];\r
730                                             var vfModule = {\r
731                                                 "id": $scope.counter++,\r
732                                                 "name": vfModuleObject[FIELD.ID.VF_MODULE_NAME],\r
733                                                 "itemType": FIELD.ID.VF_MODULE,\r
734                                                 "nodeType": FIELD.ID.VF_MODULE,\r
735                                                 "nodeStatus": vfModuleObject[FIELD.ID.ORCHESTRATION_STATUS],\r
736                                                 "volumeGroups": [],\r
737                                                 "object": vfModuleObject,\r
738                                                 "networks": []\r
739                                             };\r
740                                             genericVnf[FIELD.ID.VF_MODULES].push(vfModule);\r
741                                             if (vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
742                                                 angular.forEach(vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (networks, key) {\r
743                                                     if (networks[FIELD.ID.L3_NETWORK] != null) {\r
744                                                         var l3NetworkObject = networks[FIELD.ID.L3_NETWORK];\r
745                                                         var l3Network = {\r
746                                                             "id": $scope.counter++,\r
747                                                             "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],\r
748                                                             "itemType": FIELD.ID.L3_NETWORK,\r
749                                                             "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],\r
750                                                             "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],\r
751                                                             "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],\r
752                                                             "object": l3NetworkObject,\r
753                                                             "nodes": []\r
754                                                         };\r
755                                                         vfModule[FIELD.ID.NETWORKS].push(l3Network);\r
756                                                     }\r
757                                                     if (networks[FIELD.ID.VOLUME_GROUP] != null) {\r
758                                                         var volumeGroupObject = networks[FIELD.ID.VOLUME_GROUP];\r
759 \r
760                                                         var volumeGroup = {\r
761                                                             "id": $scope.counter++,\r
762                                                             "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],\r
763                                                             "itemType": FIELD.ID.VOLUME_GROUP,\r
764                                                             "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],\r
765                                                             "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],\r
766                                                             "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],\r
767                                                             "object": volumeGroupObject,\r
768                                                             "nodes": []\r
769                                                         };\r
770                                                         var tmpVolGroup = [];\r
771 \r
772                                                         angular.forEach(genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS], function (avgroup, key) {\r
773                                                             if (avgroup.name != volumeGroup.name) {\r
774                                                                 tmpVolGroup.push(avgroup);\r
775                                                             }\r
776                                                         });\r
777 \r
778                                                         genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS] = tmpVolGroup;\r
779 \r
780                                                         vfModule[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);\r
781                                                     }\r
782 \r
783                                                 });\r
784                                             }\r
785                                         }\r
786                                     });\r
787                                 }\r
788                             }\r
789 \r
790                             if (subInventoryResponseItem[FIELD.ID.GENERIC_CONFIGURATION] != null) {\r
791                                 var configObject = subInventoryResponseItem[FIELD.ID.GENERIC_CONFIGURATION];\r
792                                 var config = {\r
793                                     "id": $scope.counter++,\r
794                                     "name": configObject[FIELD.ID.CONFIGURATION_NAME],\r
795                                     "itemType": FIELD.ID.CONFIGURATION,\r
796                                     "nodeId": configObject[FIELD.ID.CONFIGURATION_ID],\r
797                                     "nodeType": configObject[FIELD.ID.CONFIGURATION_TYPE],\r
798                                     "nodeStatus": configObject[FIELD.ID.ORCHESTRATION_STATUS],\r
799                                     "modelInvariantId": configObject[FIELD.ID.MODEL_INVAR_ID],\r
800                                     "modelVersionId": configObject[FIELD.ID.MODEL_VERSION_ID],\r
801                                     "modelCustomizationId": configObject[FIELD.ID.MODEL_CUSTOMIZATION_ID],\r
802                                     "object": configObject,\r
803                                     "ports": []\r
804                                 };\r
805 \r
806                                 $scope.allowConfigurationActions = [FIELD.STATUS.AAI_ACTIVE, FIELD.STATUS.AAI_INACTIVE, FIELD.STATUS.AAI_CREATED].indexOf(config.nodeStatus) != -1;\r
807 \r
808                                 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {\r
809                                     angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (subSubInventoryResponseItem, key) {\r
810                                         var port = {};\r
811                                         var portObject;\r
812                                         if (subSubInventoryResponseItem[FIELD.ID.PORT] != null) {\r
813                                             portObject = subSubInventoryResponseItem[FIELD.ID.PORT];\r
814                                             port = {\r
815                                                 "portId": portObject[FIELD.ID.PORT_ID],\r
816                                                 "portName": portObject[FIELD.ID.PORT_NAME],\r
817                                                 "portStatus": portObject[FIELD.ID.PORT_MIRRORED] === true ? FIELD.STATUS.AAI_ENABLED : FIELD.ID.AAI_DISABLED,\r
818                                                 "object": portObject\r
819                                             };\r
820                                             config.ports.push(port);\r
821                                         }\r
822                                     });\r
823                                 }\r
824                                 $scope.service.instance[FIELD.ID.CONFIGURATIONS].push(config);\r
825                             }\r
826 \r
827                         });\r
828                     }\r
829                 });\r
830             });\r
831         }\r
832 \r
833         $scope.handleInitialResponse = function (response) {\r
834             try {\r
835                 $scope.enableCloseButton(true);\r
836                 $scope.updateLog(response);\r
837                 if (response.data.status < 200 || response.data.status > 202) {\r
838                     $scope.showError(FIELD.ERROR.MSO);\r
839                     $scope.status = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.data.status;\r
840 \r
841                     return;\r
842                 }\r
843 \r
844                 $scope.setProgress(100); // done\r
845                 $scope.status = FIELD.STATUS.DONE;\r
846                 $scope.isSpinnerVisible = false;\r
847 \r
848                 $scope.customer = response.data.customer; // get data from json\r
849 \r
850                 $scope.customerList = [];\r
851 \r
852                 angular.forEach($scope.customer, function (subVal, subKey) {\r
853                     var cust = {\r
854                         "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID],\r
855                         "subscriberName": subVal[FIELD.ID.SUBNAME],\r
856                         "isPermitted": subVal[FIELD.ID.IS_PERMITTED]\r
857                     };\r
858 \r
859                     $scope.customerList.push(cust);\r
860                 });\r
861 \r
862             } catch (error) {\r
863                 $scope.showContentError(error);\r
864             }\r
865         }\r
866 \r
867         $scope.autoGetSubs = function () {\r
868             /*\r
869              * Optionally comment in / out one of these method calls (or add a similar\r
870              * entry) to auto-invoke an entry when the test screen is redrawn.\r
871              */\r
872             $scope.getSubs();\r
873 \r
874         }\r
875 \r
876         $scope.updateLog = function (response) {\r
877 //              $scope.log = UtilityService.getCurrentTime() + " HTTP Status: " + \r
878 //              UtilityService.getHttpStatusText(response.data.status) + "\n" +\r
879 //              angular.toJson(response.data.entity, true) + "\n\n" + $scope.log;\r
880 //              UtilityService.checkUndefined("entity", response.data.entity);\r
881 //              UtilityService.checkUndefined("status", response.data.status);                          \r
882         }\r
883 \r
884         $scope.handleServerError = function (response, status) {\r
885             $scope.enableCloseButton(true);\r
886             var message = UtilityService.getHttpErrorMessage(response);\r
887             if (message != "") {\r
888                 message = " (" + message + ")";\r
889             }\r
890             $scope.showError(FIELD.ERROR.SYSTEM_ERROR + message);\r
891         }\r
892 \r
893         $scope.showContentError = function (message) {\r
894             // $log.debug(message);\r
895             console.log(message);\r
896             if (UtilityService.hasContents(message)) {\r
897                 $scope.showError("System failure (" + message + ")");\r
898             } else {\r
899                 $scope.showError(FIELD.ERROR.SYSTEM_ERROR);\r
900             }\r
901         }\r
902 \r
903         $scope.showError = function (message) {\r
904             $scope.isSpinnerVisible = false;\r
905             $scope.isProgressVisible = false;\r
906             $scope.error = message;\r
907             $scope.status = FIELD.STATUS.ERROR;\r
908         }\r
909 \r
910         $scope.close = function () {\r
911             if ($scope.timer != undefined) {\r
912                 $timeout.cancel($scope.timer);\r
913             }\r
914             $scope.isPopupVisible = false;\r
915         }\r
916 \r
917 \r
918         /*\r
919          * Consider converting the progress bar mechanism, the disabled button handling\r
920          * and the following methods to generic Angular directive(s) and/or approach.\r
921          */\r
922 \r
923         $scope.enableCloseButton = function (isEnabled) {\r
924             var selector = FIELD.STYLE.MSO_CTRL_BTN;\r
925 \r
926             $scope.isCloseEnabled = isEnabled;\r
927 \r
928             if (isEnabled) {\r
929                 $(selector).addClass(FIELD.STYLE.BTN_PRIMARY).removeClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.PRIMARY);\r
930             } else {\r
931                 $(selector).removeClass(FIELD.STYLE.BTN_PRIMARY).addClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.DISABLED);\r
932             }\r
933         }\r
934 \r
935         $scope.resetProgress = function () {\r
936             $scope.percentProgress = 0;\r
937             $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_INFO;\r
938         }\r
939 \r
940         $scope.setProgress = function (percentProgress) {\r
941             percentProgress = parseInt(percentProgress);\r
942             if (percentProgress >= 100) {\r
943                 $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_SUCCESS;\r
944             }\r
945 \r
946             if (percentProgress < $scope.percentProgress) {\r
947                 return;\r
948             }\r
949 \r
950             $scope.percentProgress = percentProgress;\r
951             $scope.progressWidth = {width: percentProgress + "%"};\r
952             if (percentProgress >= 5) {\r
953                 $scope.progressText = percentProgress + " %";\r
954             } else {\r
955                 // Hidden since color combination is barely visible when progress portion is narrow.\r
956                 $scope.progressText = "";\r
957             }\r
958         }\r
959 \r
960         $scope.reloadRoute = function () {\r
961             $route.reload();\r
962         }\r
963 \r
964         $scope.prevPage = function () {\r
965             $scope.currentPage--;\r
966         }\r
967 \r
968         var getAicZoneAndSendToMso = function (msoType, requestParams) {\r
969             AaiService.getAicZoneForPNF(\r
970                 $scope.service.instance.globalCustomerId,\r
971                 $scope.service.instance.serviceType,\r
972                 $scope.service.instance.serviceInstanceId, function (aicZone) {\r
973 \r
974                     requestParams.aicZone = aicZone;\r
975 \r
976                     openMsoModal(msoType, requestParams);\r
977                 });\r
978         };\r
979 \r
980         var activateDeactivateServiceInstance = function(msoType) {\r
981             var requestParams = {\r
982                 model: $scope.service.model,\r
983                 instance: $scope.service.instance\r
984             };\r
985 \r
986             if (DataService.getLoggedInUserId()) {\r
987                 requestParams.userId = DataService.getLoggedInUserId();\r
988                 getAicZoneAndSendToMso(msoType, requestParams)\r
989             } else {\r
990                 AaiService.getLoggedInUserID(function (response) {\r
991                     var userID = response.data;\r
992                     DataService.setLoggedInUserId(userID);\r
993                     requestParams.userId = userID;\r
994 \r
995                     getAicZoneAndSendToMso(msoType, requestParams);\r
996                 });\r
997             }\r
998         };\r
999 \r
1000         $scope.activateMSOInstance = function() {\r
1001 \r
1002             activateDeactivateServiceInstance(COMPONENT.MSO_ACTIVATE_SERVICE_REQ);\r
1003         };\r
1004 \r
1005         $scope.deactivateMSOInstance = function() {\r
1006 \r
1007             activateDeactivateServiceInstance(COMPONENT.MSO_DEACTIVATE_SERVICE_REQ);\r
1008         };\r
1009 \r
1010         $scope.toggleConfigurationStatus = function (serviceObject, configuration) {\r
1011 \r
1012 \r
1013             AaiService.getLoggedInUserID(function (response) {\r
1014                     DataService.setLoggedInUserId(response.data);\r
1015                     var requestParams = {\r
1016                         serviceModel: {\r
1017                             "modelType": "service",\r
1018                             "modelInvariantId": serviceObject.model.service.invariantUuid,\r
1019                             "modelVersionId": "uuid",\r
1020                             "modelName": serviceObject.model.service.name,\r
1021                             "modelVersion": serviceObject.model.service.version\r
1022                         },\r
1023                         configurationModel: {\r
1024                             "modelType": "configuration",\r
1025                             "modelInvariantId": configuration.modelInvariantId,\r
1026                             "modelVersionId": configuration.modelVersionId,\r
1027                             "modelCustomizationId": configuration.modelCustomizationId\r
1028                         },\r
1029                         serviceInstanceId: serviceObject.instance.serviceInstanceId,\r
1030                         configurationId: configuration.nodeId,\r
1031                         configStatus: configuration.nodeStatus,\r
1032                         userId: DataService.getLoggedInUserId()\r
1033                     };\r
1034 \r
1035                     openMsoModal(COMPONENT.MSO_CHANGE_CONFIG_STATUS_REQ, requestParams);\r
1036              });\r
1037 \r
1038         };\r
1039 \r
1040         $scope.togglePortStatus = function(serviceObject, configuration, port) {\r
1041 \r
1042             var requestParams = {\r
1043                 serviceInstanceId: serviceObject.instance.serviceInstanceId,\r
1044                 configurationId: configuration.nodeId,\r
1045                 portId: port.portId,\r
1046                 portStatus: port.portStatus,\r
1047                 serviceModel: {\r
1048                     "modelType": "service",\r
1049                     "modelInvariantId": serviceObject.model.service.invariantUuid,\r
1050                     "modelVersionId": "uuid",\r
1051                     "modelName": serviceObject.model.service.name,\r
1052                     "modelVersion": serviceObject.model.service.version\r
1053                 },\r
1054                 configurationModel: {\r
1055                     "modelType": "configuration",\r
1056                     "modelInvariantId": configuration.modelInvariantId,\r
1057                     "modelVersionId": configuration.modelVersionId,\r
1058                     "modelCustomizationId": configuration.modelCustomizationId\r
1059                 },\r
1060                 userId: DataService.getLoggedInUserId()\r
1061             };\r
1062 \r
1063             openMsoModal(COMPONENT.MSO_CHANGE_PORT_STATUS_REQ, requestParams);\r
1064         };\r
1065 \r
1066         $scope.dissociatePnf = function(pnfName) {\r
1067 \r
1068             var jobInfo = {\r
1069                 status: "confirm",\r
1070                 message: "Are you sure you would like to dissociate " + pnfName + " from the service instance?"\r
1071             };\r
1072 \r
1073             var modalInstance = $uibModal.open({\r
1074                 templateUrl: 'app/vid/scripts/modals/alert-modal/alert-modal.html',\r
1075                 controller: 'alertModalController',\r
1076                 controllerAs: 'vm',\r
1077                 appendTo: angular.element("#pnfs-tree"),\r
1078                 resolve: {\r
1079                     jobInfo: function () {\r
1080                         return jobInfo;\r
1081                     }\r
1082                 }\r
1083             });\r
1084 \r
1085             modalInstance.result.then(function (result) {\r
1086                 console.log("This is the result of the alert modal.", result);\r
1087 \r
1088                 if (result) {\r
1089                     var requestParams = {\r
1090                         pnf: pnfName,\r
1091                         serviceModelInfo: {\r
1092                             invariantUuid: $scope.service.model.service.invariantUuid,\r
1093                             uuid: $scope.service.model.service.uuid,\r
1094                             version: $scope.service.model.service.version,\r
1095                             name: $scope.service.model.service.name\r
1096                         },\r
1097                         serviceInstanceId: $scope.service.instance.serviceInstanceId\r
1098                     };\r
1099 \r
1100                     if (DataService.getLoggedInUserId()) {\r
1101                         requestParams.attuuid = DataService.getLoggedInUserId();\r
1102                         openMsoModal(COMPONENT.MSO_REMOVE_RELATIONSHIP, requestParams);\r
1103                     } else {\r
1104                         AaiService.getLoggedInUserID(function (response) {\r
1105                             DataService.setLoggedInUserId(response.data);\r
1106 \r
1107                             requestParams.attuuid = response.data;\r
1108                             openMsoModal(COMPONENT.MSO_REMOVE_RELATIONSHIP, requestParams);\r
1109                         });\r
1110                     }\r
1111                 }\r
1112             });\r
1113 \r
1114 \r
1115         };\r
1116 \r
1117         var openMsoModal = function (msoType, requestParams) {\r
1118             var modalInstance = $uibModal.open({\r
1119                 templateUrl: 'app/vid/scripts/modals/mso-commit/mso-commit.html',\r
1120                 controller : "msoCommitModalController",\r
1121                 backdrop: false,\r
1122                 resolve: {\r
1123                     msoType: function () {\r
1124                         return msoType;\r
1125                     },\r
1126                     requestParams: function() {\r
1127                         requestParams.callbackFunction = updateViewCallbackFunction;\r
1128                         return requestParams;\r
1129                     }\r
1130                 }\r
1131             });\r
1132         };\r
1133 \r
1134         var updateViewCallbackFunction = function(response) {\r
1135             $scope.callbackResults = "";\r
1136             var color = FIELD.ID.COLOR_NONE;\r
1137             $scope.callbackStyle = {\r
1138                 "background-color" : color\r
1139             };\r
1140 \r
1141             /*\r
1142              * This 1/2 delay was only added to visually highlight the status\r
1143              * change. Probably not needed in the real application code.\r
1144              */\r
1145             $timeout(function() {\r
1146                 $scope.callbackResults = UtilityService.getCurrentTime()\r
1147                     + FIELD.STATUS.IS_SUCCESSFUL + response.isSuccessful;\r
1148                 if (response.isSuccessful) {\r
1149                     color = FIELD.ID.COLOR_8F8;\r
1150                     $scope.reloadRoute();\r
1151                 } else {\r
1152                     color = FIELD.ID.COLOR_F88;\r
1153                 }\r
1154                 $scope.callbackStyle = {\r
1155                     "background-color" : color\r
1156                 };\r
1157             }, 500);\r
1158         };\r
1159 \r
1160         $scope.nextPage = function () {\r
1161             $scope.currentPage++;\r
1162         };\r
1163 \r
1164         $scope.serviceInstanceses = [{"sinstance": FIELD.NAME.SERVICE_INSTANCE_Id}, {"sinstance": FIELD.NAME.SERVICE_INSTANCE_NAME}];\r
1165 \r
1166         function navigateToSearchResultsPage(globalCustomerId, selectedServiceInstance, selectedProjects, selectedOwningEntities) {\r
1167             var projectQuery = AaiService.getMultipleValueParamQueryString(_.map(selectedProjects, 'id'), COMPONENT.PROJECT_SUB_PATH);\r
1168             var owningEntityQuery = AaiService.getMultipleValueParamQueryString(_.map(selectedOwningEntities, 'id'), COMPONENT.OWNING_ENTITY_SUB_PATH);\r
1169             var globalCustomerIdQuery = globalCustomerId ? COMPONENT.SELECTED_SUBSCRIBER_SUB_PATH + globalCustomerId : null;\r
1170             var serviceInstanceQuery = selectedServiceInstance ? COMPONENT.SELECTED_SERVICE_INSTANCE_SUB_PATH + selectedServiceInstance : null;\r
1171             var query = AaiService.getJoinedQueryString([projectQuery, owningEntityQuery, globalCustomerIdQuery, serviceInstanceQuery]);\r
1172 \r
1173             window.location.href = COMPONENT.SELECTED_SERVICE_SUB_PATH + query;\r
1174         }\r
1175 \r
1176         $scope.getServiceInstancesSearchResults =\r
1177             function (selectedCustomer, selectedInstanceIdentifierType, selectedServiceInstance, selectedProject, selectedOwningEntity) {\r
1178                 var isSelectionValid = UtilityService.hasContents(selectedCustomer) || UtilityService.hasContents(selectedProject)\r
1179                     || UtilityService.hasContents(selectedOwningEntity) || UtilityService.hasContents(selectedServiceInstance);\r
1180 \r
1181                 if (isSelectionValid) {\r
1182                     if (UtilityService.hasContents(selectedServiceInstance)) {\r
1183                         AaiService\r
1184                             .getGlobalCustomerIdByInstanceIdentifier(selectedServiceInstance, selectedInstanceIdentifierType)\r
1185                             .then(handleCustomerIdResponse);\r
1186                     } else {\r
1187                         navigateToSearchResultsPage(selectedCustomer, null, selectedProject, selectedOwningEntity);\r
1188                     }\r
1189                 } else {\r
1190                     alert(FIELD.ERROR.SELECT);\r
1191                 }\r
1192 \r
1193                 function handleCustomerIdResponse(globalCustomerId) {\r
1194                     if (UtilityService.hasContents(globalCustomerId)) {\r
1195                         navigateToSearchResultsPage(globalCustomerId, selectedServiceInstance, selectedProject, selectedOwningEntity);\r
1196                     } else {\r
1197                         alert(FIELD.ERROR.SERVICE_INST_DNE);\r
1198                     }\r
1199                 }\r
1200             };\r
1201     }]).directive('restrictInput', function () {\r
1202 \r
1203     return {\r
1204 \r
1205         restrict: 'A',\r
1206         require: 'ngModel',\r
1207         link: function ($scope, element, attr, ctrl) {\r
1208             ctrl.$parsers.unshift(function (viewValue) {\r
1209 \r
1210                 var types = $scope.$eval(attr.restrictInput);\r
1211                 if (!types.regex && types.type) {\r
1212 \r
1213                     switch (types.type) {\r
1214                         case 'Service Instance Name' :\r
1215                             types.regex = '^[a-zA-Z0-9-_]*$';\r
1216                             break;\r
1217                         default:\r
1218                             types.regex = '';\r
1219                     }\r
1220                 }\r
1221                 var reg = new RegExp(types.regex);\r
1222                 if (reg.test(viewValue)) {\r
1223                     return viewValue;\r
1224                 } else {\r
1225                     var overrideValue = (reg.test(viewValue) ? viewValue : '');\r
1226                     element.val(overrideValue);\r
1227                     return overrideValue;\r
1228                 }\r
1229             });\r
1230         }\r
1231     };\r
1232 \r
1233 });\r
1234 appDS2.controller('TreeCtrl', ['$scope', function ($scope) {\r
1235     $scope.remove = function (scope) {\r
1236         scope.remove();\r
1237     };\r
1238 \r
1239     $scope.toggle = function (scope) {\r
1240         scope.toggle();\r
1241     };\r
1242 \r
1243     $scope.moveLastToTheBeginning = function () {\r
1244         var a = $scope.data.pop();\r
1245         $scope.data.splice(0, 0, a);\r
1246     };\r
1247 \r
1248     $scope.newSubItem = function (scope) {\r
1249         var nodeData = scope.$modelValue;\r
1250         nodeData.nodes.push({\r
1251             id: nodeData.id * 10 + nodeData.nodes.length,\r
1252             title: nodeData.title + '.' + (nodeData.nodes.length + 1),\r
1253             nodes: []\r
1254         });\r
1255     };\r
1256 \r
1257     $scope.collapseAll = function () {\r
1258         $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_COLLAPSEALL);\r
1259     };\r
1260 \r
1261     $scope.expandAll = function () {\r
1262         $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_EXPANDALL);\r
1263     };\r
1264 \r
1265 \r
1266 }]);\r
1267 \r
1268 \r
1269 \r