e8fa529fc2e1b49418abefb5bf3325b0efd5f9fa
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / controller / creationDialogController.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 var creationDialogController = function (COMPONENT, FIELD, PARAMETER, $scope, $http, $timeout, $log,\r
24                                          CreationService, UtilityService, DataService, VIDCONFIGURATION, $location) {\r
25 \r
26     $scope.isDialogVisible = false;\r
27     $scope.summaryControl = {};\r
28     $scope.userProvidedControl = {};\r
29 \r
30     var callbackFunction = undefined;\r
31     var componentId = undefined;\r
32 \r
33     $scope.shouldShowOldPopup = function () {\r
34         return DataService.getALaCarte() || DataService.getShouldExcludeMacroFromAsyncInstatiationFlow()\r
35     };\r
36 \r
37     function receiveMessage(event) {\r
38         if (event.data == 'closeIframe') {\r
39             window.removeEventListener("message", receiveMessage, false);\r
40 \r
41             $scope.cancel();\r
42         }\r
43         else if (event.data.eventId == 'submitIframe') {\r
44             {\r
45                 $location.path('/servicePlanning').search({serviceModelId: event.data.data.serviceModelId});\r
46             }\r
47         }\r
48         $scope.$apply();\r
49     }\r
50 \r
51     $scope.$on(COMPONENT.CREATE_COMPONENT, function (event, request) {\r
52         $scope.isSpinnerVisible = true;\r
53         $scope.isErrorVisible = false;\r
54         $scope.isDataVisible = false;\r
55         $scope.isConfirmEnabled = false;\r
56         $scope.isDialogVisible = true;\r
57         $scope.popup.isVisible = true;\r
58 \r
59 \r
60         if (!$scope.shouldShowOldPopup()) {\r
61             $scope.url = COMPONENT.SERVICE_POPUP_IFRAME_URL + request.modelNameVersionId + "&isCreate=true&r=" + Math.random();\r
62             window.addEventListener("message", receiveMessage, false);\r
63 \r
64         }\r
65         else {\r
66             callbackFunction = request.callbackFunction;\r
67             componentId = request.componentId;\r
68             CreationService.initializeComponent(request.componentId);\r
69 \r
70             CreationService.setHttpErrorHandler(function (response) {\r
71                 showError(FIELD.ERROR.SYSTEM_FAILURE, UtilityService\r
72                     .getHttpErrorMessage(response));\r
73             });\r
74 \r
75             $scope.componentName = CreationService.getComponentDisplayName();\r
76 \r
77             CreationService.getParameters(handleGetParametersResponse);\r
78         }\r
79 \r
80     });\r
81 \r
82     var handleGetParametersResponse = function (parameters) {\r
83         $scope.summaryControl.setList(parameters.summaryList);\r
84         $scope.userProvidedControl.setList(parameters.userProvidedList);\r
85 \r
86         $scope.isSpinnerVisible = false;\r
87         $scope.isDataVisible = true;\r
88         $scope.isConfirmEnabled = true;\r
89     };\r
90 \r
91     var validateInstanceName = function (iname) {\r
92         var patt1 = /^([a-z])+([0-9a-z\-_\.]*)$/i;\r
93 \r
94         if (iname == null) {\r
95             return false;\r
96         }\r
97         if (!iname.match(patt1)) {\r
98             return false;\r
99         }\r
100         return true;\r
101     };\r
102     var validateMap = function (mname) {\r
103         var patt1 = /^{(\s*\w+\s*:\s*\w+\s*)(\s*,\s*\w+\s*:\s*\w+\s*)*}$/im;\r
104         if (mname == null) {\r
105             return true;\r
106         }\r
107         if (!mname.match(patt1)) {\r
108             return false;\r
109         }\r
110         return true;\r
111     };\r
112 \r
113     var validateList = function (lname) {\r
114         var patt1 = /^\[(\s*\w+\s*)(\s*,\s*\w+\s*)*\]$/i;\r
115         if (lname == null) {\r
116             return true;\r
117         }\r
118         if (!lname.match(patt1)) {\r
119             return false;\r
120         }\r
121         return true;\r
122     };\r
123 \r
124     $scope.userParameterChanged = function (id) {\r
125         CreationService.updateUserParameterList(id, $scope.userProvidedControl);\r
126     };\r
127 \r
128     $scope.confirm = function () {\r
129 \r
130         var requiredFields = $scope.userProvidedControl.getRequiredFields();\r
131         if (requiredFields !== "") {\r
132             showError(FIELD.ERROR.MISSING_DATA, requiredFields);\r
133             return;\r
134         }\r
135 \r
136         var isUploadAvailable = false;\r
137         var uploadIndex = 0;\r
138         var paramList = $scope.userProvidedControl.getList();\r
139         var isAnyError = false;\r
140         for (var i = 0; i < paramList.length; i++) {\r
141             if (paramList[i].id === FIELD.ID.SUPPLEMENTORY_DATA_FILE) {\r
142                 isUploadAvailable = true;\r
143                 uploadIndex = i;\r
144             }\r
145             if (paramList[i].id === FIELD.ID.UPLOAD_SUPPLEMENTORY_DATA_FILE && paramList[i].value && document.getElementById(FIELD.ID.SUPPLEMENTORY_DATA_FILE).value == '') {\r
146                 isAnyError = true;\r
147             }\r
148         }\r
149 \r
150         if (isUploadAvailable && isAnyError) {\r
151             showError(FIELD.ERROR.MISSING_DATA, FIELD.ERROR.MISSING_FILE);\r
152 \r
153         } else if (isUploadAvailable && document.getElementById(FIELD.ID.SUPPLEMENTORY_DATA_FILE).value != '') {\r
154             var errorMsg = "";\r
155             var fileInput = document.getElementById(FIELD.ID.SUPPLEMENTORY_DATA_FILE);\r
156             var file = fileInput.files[0];\r
157             var reader = new FileReader();\r
158             reader.onload = function (e) {\r
159                 try {\r
160                     paramList[uploadIndex].value = JSON.parse(reader.result);\r
161                     FIELD.PARAMETER.SUPPLEMENTORY_DATA_FILE['value'] = paramList[uploadIndex].value;\r
162 \r
163                     var instanceName = "";\r
164 \r
165                     if (DataService.getALaCarte()) {\r
166                         if (paramList != null) {\r
167                             for (var i = 0; i < paramList.length; i++) {\r
168                                 if (paramList[i].id === FIELD.ID.INSTANCE_NAME) {\r
169                                     instanceName = paramList[i].value;\r
170                                     break;\r
171                                 }\r
172                             }\r
173                         }\r
174                         var isValid = validateInstanceName(instanceName);\r
175                         if (isValid) {\r
176                             $scope.isErrorVisible = false;\r
177                         } else {\r
178                             showError(FIELD.ERROR.INVALID_INSTANCE_NAME + instanceName,\r
179                                 FIELD.ERROR.INSTANCE_NAME_VALIDATE);\r
180                             return;\r
181                         }\r
182                     }\r
183                     var arbitraryParametersList = DataService.getArbitraryParameters();\r
184                     var p = null;\r
185                     if (UtilityService.hasContents(arbitraryParametersList)) {\r
186                         for (var i = 0; i < arbitraryParametersList.length; i++) {\r
187                             p = arbitraryParametersList[i];\r
188                             if (p.type === PARAMETER.MAP) {\r
189                                 //validate a map: { <entry_key_1>: <entry_value_1>, ... , <entry_key_n>: <entry_value_n> }\r
190                                 // need to find the value in paramList\r
191                                 for (var j = 0; j < paramList.length; j++) {\r
192                                     if (paramList[j].id === p.id) {\r
193                                         p.value = paramList[j].value;\r
194                                         var isValid = validateMap(p.value);\r
195                                         if (isValid) {\r
196                                             $scope.isErrorVisible = false;\r
197                                             break;\r
198                                         }\r
199                                         else {\r
200                                             showError(FIELD.ERROR.INVALID_MAP + p.id,\r
201                                                 FIELD.ERROR.MAP_VALIDATE);\r
202                                             return;\r
203                                         }\r
204                                     }\r
205                                 }\r
206                             } else if (p.type === PARAMETER.LIST) {\r
207                                 //validate a list: { value or a list of comma separated values }\r
208                                 // need to find the value in paramList\r
209                                 for (var j = 0; j < paramList.length; j++) {\r
210                                     if (paramList[j].id === p.id) {\r
211                                         p.value = paramList[j].value;\r
212                                         var isValid = validateList(p.value);\r
213                                         if (isValid) {\r
214                                             $scope.isErrorVisible = false;\r
215                                             break;\r
216                                         }\r
217                                         else {\r
218                                             showError(FIELD.ERROR.INVALID_LIST + p.id,\r
219                                                 FIELD.ERROR.LIST_VALIDATE);\r
220                                             return;\r
221                                         }\r
222                                     }\r
223                                 }\r
224                             }\r
225                         }\r
226                     }\r
227                     var requestDetails = CreationService\r
228                         .getMsoRequestDetails($scope.userProvidedControl.getList());\r
229 \r
230                     $scope.isDialogVisible = false;\r
231 \r
232                     $scope.$broadcast(COMPONENT.MSO_CREATE_REQ, {\r
233                         url: CreationService.getMsoUrl(),\r
234                         requestDetails: requestDetails,\r
235                         componentId: componentId,\r
236                         callbackFunction: function (response) {\r
237                             if (response.isSuccessful) {\r
238                                 $scope.popup.isVisible = false;\r
239                                 runCallback(response);\r
240                             } else {\r
241                                 $scope.isDialogVisible = false;\r
242                                 $scope.popup.isVisible = false;\r
243                             }\r
244                         }\r
245                     });\r
246 \r
247                 } catch (e) {\r
248                     errorMsg = errorMsg + FIELD.ERROR.INVALID_DATA_FORMAT;\r
249                 }\r
250                 if (errorMsg !== "") {\r
251                     showError(FIELD.ERROR.SYSTEM_FAILURE, errorMsg);\r
252 \r
253                 }\r
254             };\r
255             reader.readAsText(file);\r
256         } else {\r
257 \r
258             var paramList = $scope.userProvidedControl.getList();\r
259             var instanceName = "";\r
260 \r
261             if (DataService.getALaCarte()) {\r
262                 if (paramList != null) {\r
263                     for (var i = 0; i < paramList.length; i++) {\r
264                         if (paramList[i].id === FIELD.ID.INSTANCE_NAME) {\r
265                             instanceName = paramList[i].value;\r
266                             break;\r
267                         }\r
268                     }\r
269                 }\r
270                 var isValid = validateInstanceName(instanceName);\r
271                 if (isValid) {\r
272                     $scope.isErrorVisible = false;\r
273                 } else {\r
274                     showError(FIELD.ERROR.INVALID_INSTANCE_NAME + instanceName,\r
275                         FIELD.ERROR.INSTANCE_NAME_VALIDATE);\r
276                     return;\r
277                 }\r
278             }\r
279             var arbitraryParametersList = DataService.getArbitraryParameters();\r
280             var p = null;\r
281             if (UtilityService.hasContents(arbitraryParametersList)) {\r
282                 for (var i = 0; i < arbitraryParametersList.length; i++) {\r
283                     p = arbitraryParametersList[i];\r
284                     if (p.type === PARAMETER.MAP) {\r
285                         //validate a map: { <entry_key_1>: <entry_value_1>, ... , <entry_key_n>: <entry_value_n> }\r
286                         // need to find the value in paramList\r
287                         for (var j = 0; j < paramList.length; j++) {\r
288                             if (paramList[j].id === p.id) {\r
289                                 p.value = paramList[j].value;\r
290                                 var isValid = validateMap(p.value);\r
291                                 if (isValid) {\r
292                                     $scope.isErrorVisible = false;\r
293                                     break;\r
294                                 }\r
295                                 else {\r
296                                     showError(FIELD.ERROR.INVALID_MAP + p.id,\r
297                                         FIELD.ERROR.MAP_VALIDATE);\r
298                                     return;\r
299                                 }\r
300                             }\r
301                         }\r
302                     } else if (p.type === PARAMETER.LIST) {\r
303                         //validate a list: { value or a list of comma separated values }\r
304                         // need to find the value in paramList\r
305                         for (var j = 0; j < paramList.length; j++) {\r
306                             if (paramList[j].id === p.id) {\r
307                                 p.value = paramList[j].value;\r
308                                 var isValid = validateList(p.value);\r
309                                 if (isValid) {\r
310                                     $scope.isErrorVisible = false;\r
311                                     break;\r
312                                 }\r
313                                 else {\r
314                                     showError(FIELD.ERROR.INVALID_LIST + p.id,\r
315                                         FIELD.ERROR.LIST_VALIDATE);\r
316                                     return;\r
317                                 }\r
318                             }\r
319                         }\r
320                     }\r
321                 }\r
322             }\r
323             var requestDetails = CreationService\r
324                 .getMsoRequestDetails($scope.userProvidedControl.getList());\r
325 \r
326             $scope.isDialogVisible = false;\r
327 \r
328             $scope.$broadcast(COMPONENT.MSO_CREATE_REQ, {\r
329                 url: CreationService.getMsoUrl(),\r
330                 requestDetails: requestDetails,\r
331                 componentId: componentId,\r
332                 callbackFunction: function (response) {\r
333                     if (response.isSuccessful) {\r
334                         $scope.popup.isVisible = false;\r
335                         runCallback(response);\r
336                     } else {\r
337                         $scope.isDialogVisible = false;\r
338                         $scope.popup.isVisible = false;\r
339                     }\r
340                 }\r
341             });\r
342         }\r
343     };\r
344 \r
345     $scope.cancel = function () {\r
346         $scope.isDialogVisible = false;\r
347         $scope.popup.isVisible = false;\r
348         runCallback(false);\r
349     };\r
350 \r
351 \r
352     var runCallback = function (response) {\r
353         if (angular.isFunction(callbackFunction)) {\r
354             callbackFunction({\r
355                 isSuccessful: response.isSuccessful,\r
356                 control: $scope.userProvidedControl.getList(),\r
357                 instanceId: response.instanceId\r
358             });\r
359         }\r
360     };\r
361 \r
362     var showError = function (summary, details) {\r
363         var message = summary;\r
364         if (UtilityService.hasContents(details)) {\r
365             message += " (" + details + ")";\r
366         }\r
367         $scope.isSpinnerVisible = false;\r
368         $scope.isErrorVisible = true;\r
369         $scope.error = message;\r
370     }\r
371 \r
372 };\r
373 \r
374 appDS2.controller("creationDialogController", ["COMPONENT", "FIELD", "PARAMETER", "$scope", "$http",\r
375     "$timeout", "$log", "CreationService", "UtilityService", "DataService", "VIDCONFIGURATION", "$location",\r
376     creationDialogController]);\r