Global Read only role, Support VID specific Roles
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / controller / ServiceModelController.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 (function () {\r
22         'use strict';\r
23 \r
24         appDS2.controller("ServiceModelController", function ($scope, $http, $location, COMPONENT, VIDCONFIGURATION, FIELD, DataService, vidService,\r
25                         PropertyService, UtilityService) {\r
26 \r
27                 $scope.popup = {};\r
28                 \r
29         //      var baseEndpoint = "vid";\r
30                 var pathQuery = COMPONENT.SERVICES_DIST_STATUS_PATH + VIDCONFIGURATION.ASDC_MODEL_STATUS;\r
31                 \r
32                 if ( VIDCONFIGURATION.ASDC_MODEL_STATUS === FIELD.STATUS.ALL) {\r
33                         pathQuery = COMPONENT.SERVICES_PATH;\r
34                 }\r
35                 \r
36                 $scope.getServiceModels = function() {\r
37                         $scope.status = FIELD.STATUS.FETCHING_SERVICE_CATALOG_ASDC;\r
38 \r
39                         $http.get(pathQuery)\r
40                         .then(function successCallback(response) {\r
41                                 $scope.services = [];\r
42                                 if (angular.isArray(response.data.services)) {\r
43                                         wholeData = response.data.services;\r
44                                         $scope.services = $scope.filterDataWithHigerVersion(wholeData);\r
45                                         $scope.viewPerPage=10;\r
46                                         $scope.totalPage=$scope.services.length/$scope.viewPerPage;\r
47                                         $scope.sortBy=COMPONENT.NAME;\r
48                                         $scope.scrollViewPerPage=2;\r
49                                         $scope.currentPage=1;\r
50                                         $scope.searchCategory;\r
51                                         $scope.searchString="";\r
52                                         $scope.currentPageNum=1;\r
53                                         $scope.isSpinnerVisible = false;\r
54                                         $scope.isProgressVisible = false;\r
55                                 } else {\r
56                                         $scope.status = FIELD.STATUS.FAILED_SERVICE_MODELS_ASDC;\r
57                                         $scope.error = true;\r
58                                         $scope.isSpinnerVisible = false;\r
59                                 }\r
60                                 $scope.deployButtonType = response.data.readOnly ? 'disabled' : 'primary';\r
61                         }, function errorCallback(response) {\r
62                                 console.log("Error: " + response);\r
63                         });\r
64                 }\r
65                 $scope.isFiltered=function(arr,obj){\r
66                         var filtered = false;\r
67                         if(arr.length>0){\r
68                                 for(var i=0;i<arr.length;i++){\r
69                                         if((arr[i].name == obj.name) && (obj.invariantUUID == arr[i].invariantUUID)){\r
70                                                 filtered = true;\r
71                                         }\r
72                                 }\r
73                         }\r
74                         return filtered;\r
75                 }\r
76                 var wholeData=[];\r
77                 $scope.filterDataWithHigerVersion = function(serviceData){\r
78                         var fiterDataServices = [];\r
79                         for(var i=0;i<serviceData.length;i++){\r
80                                 var higherVersion = serviceData[i];\r
81                                 if(!$scope.isFiltered(fiterDataServices,serviceData[i])){\r
82                                         for(var j=i;j<serviceData.length;j++){\r
83                                                 if((serviceData[i].invariantUUID.trim() == serviceData[j].invariantUUID.trim()) && (serviceData[i].name.trim() == serviceData[j].name.trim()) && (parseFloat(serviceData[j].version.trim())>=parseFloat(serviceData[i].version.trim()))){\r
84                                                         var data = $scope.isThisHigher(fiterDataServices,serviceData[j]);\r
85                                                         if(data.isHigher){\r
86                                                                 fiterDataServices[data.index] = serviceData[j];\r
87                                                         }\r
88                                                 }\r
89                                         }\r
90                                 }\r
91                         }\r
92                         return fiterDataServices;\r
93                 }\r
94 \r
95                 $scope.isThisHigher = function(arr,obj){\r
96                         var returnObj = {\r
97                                         isHigher:false,\r
98                                         index:0\r
99                         };\r
100                         if(arr.length>0){\r
101                                 var isNotMatched = true;\r
102                                 for(var i=0;i<arr.length;i++){\r
103                                         if((arr[i].name == obj.name) && (arr[i].invariantUUID == obj.invariantUUID ) && (arr[i].version<obj.version) ){\r
104                                                 isNotMatched = false;\r
105                                                 returnObj = {\r
106                                                                 isHigher:true,\r
107                                                                 index:i\r
108                                                 };\r
109                                         }\r
110                                 }\r
111                                 if(isNotMatched && !$scope.isFiltered(arr,obj)){\r
112                                         returnObj = {\r
113                                                         isHigher:true,\r
114                                                         index:arr.length\r
115                                         };\r
116                                 }\r
117                         }else{\r
118                                 returnObj = {\r
119                                                 isHigher:true,\r
120                                                 index:0\r
121                                 }\r
122                         }\r
123                         return returnObj;\r
124                 }\r
125 \r
126                 $scope.init = function() {\r
127                 var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec();\r
128                 PropertyService.setMsoMaxPollingIntervalMsec(msecs);\r
129                 \r
130                 var polls = PropertyService.retrieveMsoMaxPolls();\r
131                 PropertyService.setMsoMaxPolls(polls);\r
132                 \r
133                 //PropertyService.setMsoBaseUrl("testmso");\r
134                 PropertyService.setServerResponseTimeoutMsec(30000);\r
135         }\r
136                 \r
137                 $scope.prevPage = function() {\r
138                         $scope.currentPage--;\r
139                 }\r
140                 \r
141                 $scope.nextPage = function() {\r
142                         $scope.currentPage++;\r
143                 }\r
144                 \r
145                 $scope.createType = COMPONENT.A_LA_CARTE;\r
146                 $scope.deployService = function(service) {\r
147                         \r
148                         \r
149                         console.log("Instantiating SDC service " + service.uuid);\r
150                         \r
151                         $http.get(COMPONENT.SERVICES_PATH + service.uuid)\r
152                                 .then(function successCallback(getServiceResponse) {\r
153                                         \r
154                                         var serviceModel = getServiceResponse.data;\r
155                                         DataService.setServiceName(serviceModel.service.name);\r
156                                         \r
157                                         DataService.setModelInfo(COMPONENT.SERVICE, {\r
158                                                 "modelInvariantId": serviceModel.service.invariantUuid,\r
159                                                 "modelVersion": serviceModel.service.version,\r
160                                                 "serviceType" : serviceModel.service.serviceType,\r
161                                                 "serviceRole": serviceModel.service.serviceRole,\r
162                                                 "modelNameVersionId": serviceModel.service.uuid,\r
163                                                 "modelName": serviceModel.service.name,\r
164                                                 "description": serviceModel.service.description,\r
165                                                 "category":serviceModel.service.category\r
166                                         });\r
167                                         DataService.setALaCarte (true);\r
168                                         $scope.createType = COMPONENT.A_LA_CARTE;\r
169                                         var broadcastType = COMPONENT.CREATE_COMPONENT;\r
170                                         \r
171                                         if (UtilityService.arrayContains (VIDCONFIGURATION.MACRO_SERVICES, serviceModel.service.invariantUuid )) {\r
172                                                 DataService.setALaCarte (false);\r
173                                                 $scope.createType = COMPONENT.MACRO;\r
174                                                 var convertedAsdcModel = UtilityService.convertModel(serviceModel);\r
175                                                 \r
176                                                 //console.log ("display inputs "); \r
177                                                 //console.log (JSON.stringify ( convertedAsdcModel.completeDisplayInputs));\r
178                                                 \r
179                                                 DataService.setModelInfo(COMPONENT.SERVICE, {\r
180                                                         "modelInvariantId": serviceModel.service.invariantUuid,\r
181                                                         "modelVersion": serviceModel.service.version,\r
182                                                         "modelNameVersionId": serviceModel.service.uuid,\r
183                                                         "modelName": serviceModel.service.name,\r
184                                                         "description": serviceModel.service.description,\r
185                                                         "category":serviceModel.service.category,\r
186                                                         "serviceEcompNaming": serviceModel.service.serviceEcompNaming,\r
187                                                         "inputs": serviceModel.service.inputs,\r
188                                                         "serviceType": serviceModel.service.serviceType,\r
189                                                         "serviceRole": serviceModel.service.serviceRole,\r
190                                                         "displayInputs": convertedAsdcModel.completeDisplayInputs\r
191                                                 });\r
192                                         };\r
193                                         \r
194                                         $scope.$broadcast(broadcastType, {\r
195                                             componentId : COMPONENT.SERVICE,\r
196                                             callbackFunction : function(response) {\r
197                                                 if (response.isSuccessful) {\r
198                                                                 vidService.setModel(serviceModel);\r
199                                                                 \r
200                                                                 var subscriberId = FIELD.STATUS.NOT_FOUND;\r
201                                                                 var serviceType = FIELD.STATUS.NOT_FOUND;\r
202                                                                 \r
203                                                                 var serviceInstanceId = response.instanceId;\r
204                                                                 \r
205                                                                 for (var i = 0; i < response.control.length; i++) {\r
206                                                                         if (response.control[i].id == COMPONENT.SUBSCRIBER_NAME) {\r
207                                                                                 subscriberId = response.control[i].value;\r
208                                                                         } else if (response.control[i].id == FIELD.ID.SERVICE_TYPE) {\r
209                                                                                 serviceType = response.control[i].value;\r
210                                                                         }\r
211                                                                 }\r
212                                                                 \r
213                                                                 \r
214                                                                 $scope.refreshSubs(subscriberId,serviceType,serviceInstanceId);\r
215                                                         \r
216                                                 }\r
217                                             }\r
218                                         });\r
219                                         \r
220                                 }, function errorCallback(response) {\r
221                                         console.log("Error: " + response);\r
222                                 });\r
223                 };\r
224                 \r
225                 $scope.tableData=[];\r
226                 var oldData=[];\r
227                 $scope.loadPreviousVersionData=function(invariantUUID , name, version){\r
228                         $scope.tableData =[];\r
229                         oldData=[];\r
230                         for(var i=0;i<wholeData.length;i++){\r
231                                 if(wholeData[i].invariantUUID == invariantUUID && wholeData[i].name == name && version!=wholeData[i].version){\r
232                                         oldData.push(wholeData[i]);\r
233                                 }\r
234                         }\r
235                         $scope.tableData = oldData;\r
236                         $scope.createType = "Previous Version";\r
237                         var broadcastType = "createTableComponent";\r
238                         $scope.componentName = name;\r
239                         $scope.$broadcast(broadcastType, {\r
240                             componentId : COMPONENT.OLDVERSION,\r
241                             callbackFunction : function(response) {\r
242                             }\r
243                         });\r
244                 }\r
245 \r
246                 $scope.refreshSubs = function(subscriberId, serviceType, serviceInstanceId) {\r
247                         $scope.status = FIELD.STATUS.FETCHING_SUBSCRIBER_LIST_AAI;\r
248                         $scope.init();\r
249                         $http.get( FIELD.ID.AAI_REFRESH_FULL_SUBSCRIBERS, {\r
250 \r
251                         },{\r
252                                 timeout: $scope.responseTimeoutMsec\r
253                         }).then(function(response){\r
254                                 \r
255                                 if (response.data.status < 200 || response.data.status > 202) {\r
256                                         $scope.showError(FIELD.ERROR.MSO)\r
257                                         return;\r
258                                 }\r
259 \r
260                                 $scope.customer = response.data.customer; // get data from json\r
261 \r
262                                 $scope.customerList = [];\r
263 \r
264                                 $scope.serviceInstanceToCustomer = [];\r
265                                 \r
266                                 angular.forEach($scope.customer, function(subVal, subKey) {\r
267                                         var cust = { "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID], "subscriberName": subVal[FIELD.ID.SUBNAME] };\r
268                                         $scope.customerList.push(cust);\r
269                                         if (subVal[FIELD.ID.SERVICE_SUBSCRIPTIONS] != null) {\r
270                                                         angular.forEach(subVal[FIELD.ID.SERVICE_SUBSCRIPTIONS][FIELD.ID.SERVICE_SUBSCRIPTION], function(serviceSubscription, key) {\r
271                                                                 $scope.serviceInstanceId = [];\r
272                                                                 if (serviceSubscription[FIELD.ID.SERVICETYPE] != null) {\r
273                                                                         $scope.serviceType = serviceSubscription[FIELD.ID.SERVICETYPE];\r
274                                                                 } else {\r
275                                                                         $scope.serviceType = FIELD.STATUS.NO_SERVICE_SUBSCRIPTION_FOUND;\r
276                                                                 }\r
277                                                                 if (serviceSubscription[FIELD.ID.SERVICE_INSTANCES] != null) {\r
278                                                                         angular.forEach(serviceSubscription[FIELD.ID.SERVICE_INSTANCES][FIELD.ID.SERVICE_INSTANCE], function(instValue, instKey) {\r
279                                                                                 var foo = { "serviceInstanceId": instValue[FIELD.ID.SERVICE_INSTANCE_ID], \r
280                                                                                                 "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID],\r
281                                                                                                 "subscriberName": subVal[FIELD.ID.SUBNAME] };\r
282                                                                                 $scope.serviceInstanceToCustomer.push(foo);\r
283                                                                         });\r
284                                                                 }\r
285                                                         });\r
286                                         }\r
287                                 });     \r
288                                 DataService.setServiceInstanceToCustomer($scope.serviceInstanceToCustomer);\r
289                                 var serviceIdList = [];\r
290                                 $http.get( FIELD.ID.AAI_GET_SERVICES, {\r
291                                 },{\r
292                                         timeout: $scope.responseTimeoutMsec\r
293                                 }).then(function(response) {\r
294                                         angular.forEach(response.data, function(value, key) {\r
295                                                 angular.forEach(value, function(subVal, key) {\r
296                                                         var newVal = { "id" : subVal[FIELD.ID.SERVICE_ID], "description" : subVal[FIELD.ID.SERVICE_DESCRIPTION] ,"isPermitted" : subVal[FIELD.ID.IS_PERMITTED] };\r
297                                                         serviceIdList.push(newVal);\r
298                                                         DataService.setServiceIdList(serviceIdList);\r
299                                                         \r
300                                                         $location.search({\r
301                                                                 "subscriberId": subscriberId,\r
302                                                                 "serviceType": serviceType,\r
303                                                                 "serviceInstanceId": serviceInstanceId,\r
304                                                                 "isPermitted": newVal.isPermitted.toString()\r
305                                                         });\r
306                                                         \r
307                                                         $location.path(COMPONENT.INSTANTIATE_PATH);\r
308                                                 });\r
309                                         });\r
310                                 });     \r
311                         })\r
312                         ["catch"]($scope.handleServerError);\r
313                 };\r
314         });\r
315 })();\r