org.onap migration
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / services / utilityService.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 /*\r
24  * "UtilityService" contains various generic methods.\r
25  * \r
26  * (*** DEPRECATED - Use PropertyService instead ***) setProperties() and\r
27  * getProperties()\r
28  * \r
29  * SYNTAX: hasContents(object)\r
30  * \r
31  * Returns "true" if "object" contains contents (i.e. is NOT undefined, null or\r
32  * ""), "false" otherwise.\r
33  * \r
34  * SYNTAX: checkUndefined(name, value)\r
35  * \r
36  * Throws an exception if "value" is undefined. The exception includes "name" as\r
37  * the cause of the exception. Returns "value" if it is defined.\r
38  * \r
39  * SYNTAX: getCurrentTime()\r
40  * \r
41  * Returns the current local date and time in the format "MM/DD/YY HH:MM:SS"\r
42  * \r
43  * SYNTAX: setHttpErrorHandler(function)\r
44  * \r
45  * Sets the HTTP error handler to "function".\r
46  * \r
47  * SYNTAX: runHttpErrorHandler(response, status)\r
48  * \r
49  * Logs warning messages and the runs the HTTP error handler previously set by\r
50  * "setHttpErrorHandler". The intended usage is for "$http" calls. Example:\r
51  * $http.get(...).then(...)["catch"](UtilityService.runHttpErrorHandler);\r
52  * \r
53  * SYNTAX: getHttpStatusText(statusCode)\r
54  * \r
55  * Expects "statusCode" to be an HTTP response code (e.g. 404). The function\r
56  * returns a string that includes both the code and an equivalent text summary.\r
57  * Example: "Not found (404)"\r
58  * \r
59  * SYNTAX: getHttpErrorMessage(response)\r
60  * \r
61  * Expects "response" to be the response object generated by a "$http" error\r
62  * condition. "getHttpErrorMessage" examines the object and returns a summary\r
63  * string for some known conditions.\r
64  */\r
65 \r
66 var UtilityService = function($log, DataService, PARAMETER) {\r
67 \r
68     var _this = this;\r
69     var convertModel = function (serviceModel) {\r
70 \r
71         var isNewFlow = false;\r
72 \r
73         for (var networkCustomizationName in serviceModel.networks) {\r
74             var networkModel = serviceModel.networks[networkCustomizationName];\r
75             if ( networkModel.customizationUuid != null ) {\r
76                 isNewFlow = true;\r
77                 break;\r
78             }\r
79         }\r
80         if ( !isNewFlow ) {\r
81             for (var vnfCustomizationName in serviceModel.vnfs) {\r
82                 var vnfModel = serviceModel.vnfs[vnfCustomizationName];\r
83                 if ( vnfModel.customizationUuid != null ) {\r
84                     isNewFlow = true;\r
85                     break;\r
86                 }\r
87             }\r
88         }\r
89         if ( isNewFlow ) {\r
90             return (convertNewModel (serviceModel) );\r
91         }\r
92         else {\r
93             return (convertOldModel (serviceModel) );\r
94         }\r
95     };\r
96     var convertNewModel = function (serviceModel ) {\r
97         var completeResources = new Array();\r
98                 var resource = {};\r
99                 var convertedAsdcModel = {\r
100                                 "service": serviceModel.service,\r
101                                 "networks": {},\r
102                                 "vnfs": {},\r
103                                 "pnfs": serviceModel.pnfs,\r
104                                 "serviceProxies": serviceModel.serviceProxies,\r
105                                 "completeDisplayInputs": {},\r
106                                 "isNewFlow": true\r
107                         };\r
108                 var networkModelDisplayInputs = {};\r
109                 var vnfModelDisplayInputs = {};\r
110         for (var networkCustomizationName in serviceModel.networks) {\r
111                         var networkModel = serviceModel.networks[networkCustomizationName];\r
112                         \r
113                         convertedAsdcModel.networks[networkModel.customizationUuid] = {\r
114                                         "uuid": networkModel.uuid,\r
115                                         "invariantUuid": networkModel.invariantUuid,\r
116                                         "version": networkModel.version,\r
117                                         "name": networkModel.name,\r
118                                         "modelCustomizationName": networkModel.modelCustomizationName,\r
119                                         "customizationUuid": networkModel.customizationUuid,\r
120                                         "inputs": "",\r
121                                         "description": networkModel.description,\r
122                                         "commands": {},\r
123                                         "displayInputs": {}\r
124                         }\r
125                         resource = {\r
126                                         "name": networkModel.modelCustomizationName,\r
127                                         "description": networkModel.description\r
128                         };\r
129                         completeResources.push (resource);\r
130                         \r
131                         if (networkModel.commands != null) {\r
132                                 /*\r
133                                  * commands: \r
134                                  *  internal_net_param_ntu: {\r
135                                  *              command: get_input,\r
136                                  *              displaName: internal_net_param_ntu,\r
137                                  *              inputName: vccfd1_internal_net_param_ntu // pointer to input key\r
138                                  * }\r
139                                  * If the input name (ptr) is one of instance_node_target,  naming_policy or vf_instance_name\r
140                                  * then ignore it\r
141                                  * \r
142                                  */\r
143                                 \r
144                                 for ( var cmd in networkModel.commands ) {\r
145                                         var cmdObj = networkModel.commands[cmd];\r
146                                         if ( cmdObj.inputName != null ) {\r
147                                                 switch (cmdObj.inputName) {\r
148                                                         case "instance_node_target":\r
149                                                                 break;\r
150                                                         case "naming_policy":\r
151                                                                 break;\r
152                                                         case "vf_instance_name":\r
153                                                                 break;\r
154                                                         default: \r
155                                                                 if (serviceModel.service != null && serviceModel.service.inputs != null &&\r
156                                                                                 serviceModel.service.inputs[cmdObj.inputName] != null ) {\r
157                                                                         networkModelDisplayInputs[cmdObj.inputName] = (serviceModel.service.inputs[cmdObj.inputName]);\r
158                                                                         networkModelDisplayInputs[cmdObj.inputName][PARAMETER.DISPLAY_NAME] = cmdObj.displayName;\r
159                                                                 }\r
160                                                 }\r
161                                                                 \r
162                                         }\r
163                                         \r
164                                 }\r
165                                 convertedAsdcModel.networks[networkModel.customizationUuid].displayInputs=networkModelDisplayInputs;\r
166                                 \r
167                         }\r
168                 }\r
169 \r
170         _.forEach(serviceModel.configurations, function(element, key) {\r
171             element.isConfig = true;\r
172         });\r
173         _.forEach(serviceModel.pnfs, function(element, key) {\r
174                 element.isPnf= true;\r
175                 element.modelCustomizationName= key;\r
176         });\r
177         var mergedVnfs = Object.assign(serviceModel.vnfs, serviceModel.configurations, serviceModel.pnfs);\r
178 \r
179                 for (var vnfCustomizationName in mergedVnfs) {\r
180                         var vnfModel = mergedVnfs[vnfCustomizationName];\r
181                         var vnfCustomizationUuid = vnfModel.customizationUuid;\r
182                         convertedAsdcModel.vnfs[vnfModel.customizationUuid] = {\r
183                                         "uuid": vnfModel.uuid,\r
184                                         "invariantUuid": vnfModel.invariantUuid,\r
185                                         "version": vnfModel.version,\r
186                                         "name": vnfModel.name,\r
187                                         "modelCustomizationName": vnfModel.modelCustomizationName,\r
188                                         "customizationUuid": vnfModel.customizationUuid,\r
189                                         "inputs": "",\r
190                                         "description": vnfModel.description,\r
191                                         "vfModules": {},\r
192                                         "volumeGroups": {},\r
193                                         "commands": {},\r
194                                         "displayInputs": {},\r
195                                         "properties": {},\r
196                                         "nfRole": "",\r
197                                         "nfType": "",\r
198                                         "sourceNodes": vnfModel.sourceNodes,\r
199                                         "collectorNodes": vnfModel.collectorNodes,\r
200                         "isConfigurationByPolicy": vnfModel.configurationByPolicy ? vnfModel.configurationByPolicy : false,\r
201                         "isConfig": vnfModel.isConfig ? vnfModel.isConfig : false,\r
202                         "isPnf": vnfModel.isPnf ? vnfModel.isPnf : false\r
203                         };\r
204                         \r
205                         resource = {\r
206                                         "name": vnfModel.modelCustomizationName,\r
207                                         "description": vnfModel.description\r
208                         };\r
209                         completeResources.push (resource);\r
210                         \r
211                         if (vnfModel.commands != null) {\r
212                                 /*\r
213                                  * commands: {\r
214                                  *  internal_net_param_ntu: {\r
215                                  *              command: get_input,\r
216                                  *              displaName: internal_net_param_ntu,\r
217                                  *              inputName: vccfd1_internal_net_param_ntu // pointer to input key\r
218                                  * }\r
219                                  * If the input name (ptr) is one of instance_node_target,  naming_policy or vf_instance_name\r
220                                  * then ignore it\r
221                                  * \r
222                                  */\r
223                                 \r
224                                 for ( var cmd in vnfModel.commands ) {\r
225                                         var cmdObj = vnfModel.commands[cmd];\r
226                                         if ( cmdObj.inputName != null ) {\r
227                                                 // To Do: Make this list configurable\r
228                                                 switch (cmdObj.inputName) {\r
229                                                         case "instance_node_target":\r
230                                                                 break;\r
231                                                         case "naming_policy":\r
232                                                                 break;\r
233                                                         case "vf_instance_name":\r
234                                                                 break;\r
235                                                         default: \r
236                                                                 if (serviceModel.service != null && serviceModel.service.inputs != null &&\r
237                                                                                 serviceModel.service.inputs[cmdObj.inputName] != null ) {\r
238                                                                         vnfModelDisplayInputs[cmdObj.inputName] = (serviceModel.service.inputs[cmdObj.inputName]);\r
239                                                                         vnfModelDisplayInputs[cmdObj.inputName][PARAMETER.DISPLAY_NAME] = cmdObj.displayName;\r
240                                                                 }\r
241                                                 }\r
242                                                                 \r
243                                         }\r
244                                         \r
245                                 }\r
246                                 \r
247                                 convertedAsdcModel.vnfs[vnfCustomizationUuid].displayInputs=vnfModelDisplayInputs;\r
248                                 convertedAsdcModel.vnfs[vnfCustomizationUuid].properties=vnfModel.properties;\r
249                                 //\r
250                                 var vnf_type = "";\r
251                                 var vnf_role = "";\r
252                                 var vnf_function = "";\r
253                                 var vnf_code = "";\r
254                                 if ( !( isObjectEmpty(vnfModel.properties) ) ) {\r
255                                         if (hasContents (vnfModel.properties.nf_type) ) {\r
256                                                 vnf_type = vnfModel.properties.nf_type;\r
257                                         }\r
258                                         if (hasContents (vnfModel.properties.nf_role) ) {\r
259                                                 vnf_role = vnfModel.properties.nf_role;\r
260                                         }\r
261                                         if (hasContents (vnfModel.properties.nf_function) ) {\r
262                                                 vnf_function = vnfModel.properties.nf_function;\r
263                                         }\r
264                                         if (hasContents (vnfModel.properties.nf_naming_code) ) {\r
265                                                 vnf_code = vnfModel.properties.nf_naming_code;\r
266                                         }\r
267                                 }\r
268                                 convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfType"] = vnf_type;\r
269                                 convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfRole"] = vnf_role;\r
270                                 convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfFunction"] = vnf_function;\r
271                                 convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfCode"] = vnf_code;\r
272                                 //\r
273                                 for (var vfModuleCustomizationName in serviceModel.vnfs[vnfCustomizationName].vfModules) {\r
274                                         var vfModuleModel = serviceModel.vnfs[vnfCustomizationName].vfModules[vfModuleCustomizationName];\r
275                                         convertedAsdcModel.vnfs[vnfCustomizationUuid].vfModules[vfModuleModel.customizationUuid] = vfModuleModel;\r
276                                 }\r
277                                 \r
278                                 for (var volumeGroupCustomizationName in serviceModel.vnfs[vnfCustomizationName].volumeGroups) {\r
279                                         var volumeGroupModel = serviceModel.vnfs[vnfCustomizationName].volumeGroups[volumeGroupCustomizationName];\r
280                                         convertedAsdcModel.vnfs[vnfCustomizationUuid].volumeGroups[volumeGroupModel.customizationUuid] = volumeGroupModel;\r
281                                 }\r
282                         }\r
283                 }\r
284                 \r
285                 var completeDisplayInputs = {};\r
286                 \r
287                 for (var key in vnfModelDisplayInputs) {\r
288                         completeDisplayInputs[key] = vnfModelDisplayInputs[key];\r
289                 }\r
290                 for (var key in networkModelDisplayInputs) {\r
291                         completeDisplayInputs[key] = networkModelDisplayInputs[key];\r
292                 }\r
293                 \r
294                 convertedAsdcModel.completeDisplayInputs = completeDisplayInputs;\r
295                 // Need to collect all the model customization names (node template tag) and descriptions\r
296                 DataService.setResources (completeResources);\r
297 \r
298         $log.debug ("convertedAsdcModel: ", convertedAsdcModel);\r
299                 return (convertedAsdcModel);\r
300     };\r
301 \r
302     var convertOldModel = function (serviceModel ) {\r
303         \r
304                 var resource = {};\r
305                 var convertedAsdcModel = {\r
306                                 "service": serviceModel.service,\r
307                                 "networks": {},\r
308                                 "vnfs": {},\r
309                 "pnfs": serviceModel.pnfs,\r
310                 "serviceProxies": serviceModel.serviceProxies,\r
311                                 "completeDisplayInputs": {},\r
312                                 "isNewFlow": false\r
313                         };\r
314                 var completeResources = new Array();\r
315                 var resource = {};\r
316                 var vnfModelDisplayInputs = {};\r
317                 var networkModelDisplayInputs = {};\r
318                 for (var networkCustomizationName in serviceModel.networks) {\r
319                         var networkModel = serviceModel.networks[networkCustomizationName];\r
320                         convertedAsdcModel.networks[networkModel.invariantUuid] = {};\r
321                         //convertedAsdcModel.networks[networkModel.invariantUuid][networkModel.version] = networkModel;\r
322                         // need a network model to test this\r
323                         convertedAsdcModel.networks[networkModel.uuid] = {\r
324                                         "uuid": networkModel.uuid,\r
325                                         "invariantUuid": networkModel.invariantUuid,\r
326                                         "version": networkModel.version,\r
327                                         "name": networkModel.name,\r
328                                         "modelCustomizationName": networkModel.modelCustomizationName,\r
329                                         "customizationUuid": networkModel.customizationUuid,\r
330                                         "inputs": "",\r
331                                         "description": networkModel.description,\r
332                                         "commands": {},\r
333                                         "displayInputs": {}\r
334                         }\r
335                         resource = {\r
336                                         "name": networkModel.modelCustomizationName,\r
337                                         "description": networkModel.description\r
338                         };\r
339                         completeResources.push (resource);\r
340                         if (networkModel.commands != null) {\r
341                                 /*\r
342                                  * commands: \r
343                                  *  internal_net_param_ntu: {\r
344                                  *              command: get_input,\r
345                                  *              displaName: internal_net_param_ntu,\r
346                                  *              inputName: vccfd1_internal_net_param_ntu // pointer to input key\r
347                                  * }\r
348                                  * If the input name (ptr) is one of instance_node_target,  naming_policy or vf_instance_name\r
349                                  * then ignore it\r
350                                  * \r
351                                  */\r
352                                 \r
353                                 for ( var cmd in networkModel.commands ) {\r
354                                         var cmdObj = networkModel.commands[cmd];\r
355                                         if ( cmdObj.inputName != null ) {\r
356                                                 switch (cmdObj.inputName) {\r
357                                                         case "instance_node_target":\r
358                                                                 break;\r
359                                                         case "naming_policy":\r
360                                                                 break;\r
361                                                         case "vf_instance_name":\r
362                                                                 break;\r
363                                                         default: \r
364                                                                 if (serviceModel.service != null && serviceModel.service.inputs != null &&\r
365                                                                                 serviceModel.service.inputs[cmdObj.inputName] != null ) {\r
366                                                                         networkModelDisplayInputs[cmdObj.inputName] = (serviceModel.service.inputs[cmdObj.inputName]);\r
367                                                                         networkModelDisplayInputs[cmdObj.inputName][PARAMETER.DISPLAY_NAME] = cmdObj.displayName;\r
368                                                                 }\r
369                                                 }\r
370                                                                 \r
371                                         }\r
372                                         \r
373                                 }\r
374                                 convertedAsdcModel.networks[networkModel.uuid].displayInputs=networkModelDisplayInputs;\r
375                         }\r
376                 }\r
377 \r
378         _.forEach(serviceModel.configurations, function(element, key) {\r
379             element.isConfig = true;\r
380         });\r
381         _.forEach(serviceModel.pnfs, function(element, key) {\r
382             element.isPnf= true;\r
383             element.modelCustomizationName= key;\r
384         });\r
385         var mergedVnfs = Object.assign(serviceModel.vnfs, serviceModel.configurations, serviceModel.pnfs);\r
386 \r
387                 for (var vnfCustomizationName in mergedVnfs) {\r
388                         var vnfModel = mergedVnfs[vnfCustomizationName];\r
389                         convertedAsdcModel.vnfs[vnfModel.uuid] = {\r
390                                         "uuid": vnfModel.uuid,\r
391                                         "invariantUuid": vnfModel.invariantUuid,\r
392                                         "version": vnfModel.version,\r
393                                         "name": vnfModel.name,\r
394                                         "modelCustomizationName": vnfModel.modelCustomizationName,\r
395                                         "customizationUuid": vnfModel.customizationUuid,\r
396                                         "inputs": "",\r
397                                         "description": vnfModel.description,\r
398                                         "vfModules": {},\r
399                                         "volumeGroups": {},\r
400                                         "commands": {},\r
401                                         "displayInputs": {},\r
402                                         "sourceNodes": vnfModel.sourceNodes,\r
403                                         "collectorNodes": vnfModel.collectorNodes,\r
404                                         "isConfigurationByPolicy": vnfModel.configurationByPolicy ? vnfModel.configurationByPolicy : false,\r
405                                         "isConfig": vnfModel.isConfig ? vnfModel.isConfig : false,\r
406                         "isPnf": vnfModel.isPnf ? vnfModel.isPnf : false\r
407                         };\r
408                         resource = {\r
409                                         "name": vnfModel.modelCustomizationName,\r
410                                         "description": vnfModel.description\r
411                         };\r
412                         completeResources.push (resource);\r
413                         \r
414                         if (vnfModel.commands != null) {\r
415                                 /*\r
416                                  * commands: {\r
417                                  *  internal_net_param_ntu: {\r
418                                  *              command: get_input,\r
419                                  *              displaName: internal_net_param_ntu,\r
420                                  *              inputName: vccfd1_internal_net_param_ntu // pointer to input key\r
421                                  * }\r
422                                  * If the input name (ptr) is one of instance_node_target,  naming_policy or vf_instance_name\r
423                                  * then ignore it\r
424                                  * \r
425                                  */\r
426                                 \r
427                                 for ( var cmd in vnfModel.commands ) {\r
428                                         var cmdObj = vnfModel.commands[cmd];\r
429                                         if ( cmdObj.inputName != null ) {\r
430                                                 // To Do: Make this list configurable\r
431                                                 switch (cmdObj.inputName) {\r
432                                                         case "instance_node_target":\r
433                                                                 break;\r
434                                                         case "naming_policy":\r
435                                                                 break;\r
436                                                         case "vf_instance_name":\r
437                                                                 break;\r
438                                                         default: \r
439                                                                 if (serviceModel.service != null && serviceModel.service.inputs != null &&\r
440                                                                                 serviceModel.service.inputs[cmdObj.inputName] != null ) {\r
441                                                                         vnfModelDisplayInputs[cmdObj.inputName] = (serviceModel.service.inputs[cmdObj.inputName]);\r
442                                                                         vnfModelDisplayInputs[cmdObj.inputName][PARAMETER.DISPLAY_NAME] = cmdObj.displayName;\r
443                                                                 }\r
444                                                 }\r
445                                                                 \r
446                                         }\r
447                                         \r
448                                 }\r
449                                 convertedAsdcModel.vnfs[vnfModel.uuid].displayInputs=vnfModelDisplayInputs;\r
450                         }\r
451                         \r
452                         for (var vfModuleCustomizationName in serviceModel.vnfs[vnfCustomizationName].vfModules) {\r
453                                 var vfModuleModel = serviceModel.vnfs[vnfCustomizationName].vfModules[vfModuleCustomizationName];\r
454                                 convertedAsdcModel.vnfs[vnfModel.uuid].vfModules[vfModuleModel.uuid] = vfModuleModel;\r
455                         }\r
456                         \r
457                         for (var volumeGroupCustomizationName in serviceModel.vnfs[vnfCustomizationName].volumeGroups) {\r
458                                 var volumeGroupModel = serviceModel.vnfs[vnfCustomizationName].volumeGroups[volumeGroupCustomizationName];\r
459                                 convertedAsdcModel.vnfs[vnfModel.uuid].volumeGroups[volumeGroupModel.uuid] = volumeGroupModel;\r
460                         }\r
461                 }\r
462                 //console.log ("convertedAsdcModel: "); console.log (JSON.stringify ( convertedAsdcModel, null, 4 ) );\r
463                 \r
464                 var completeDisplayInputs = {};\r
465                 \r
466                 for (var key in vnfModelDisplayInputs) {\r
467                         completeDisplayInputs[key] = vnfModelDisplayInputs[key];\r
468                 }\r
469                 for (var key in networkModelDisplayInputs) {\r
470                         completeDisplayInputs[key] = networkModelDisplayInputs[key];\r
471                 }\r
472                 \r
473                 convertedAsdcModel.completeDisplayInputs = completeDisplayInputs;\r
474                 // Need to collect all the model customization names (node template tag) and descriptions\r
475                 DataService.setResources (completeResources);\r
476                 $log.debug ("convertedAsdcModel: ", convertedAsdcModel);\r
477                 return (convertedAsdcModel);\r
478     };\r
479 \r
480     function hasContents(object) {\r
481         if (object === undefined || object === null || object === "") {\r
482             return false;\r
483         }\r
484         return true;\r
485     };\r
486     function isObjectEmpty(o) {\r
487         var len = 0;\r
488         if (hasContents(o)){\r
489             var keys = Object.keys(o);\r
490             len = keys.length;\r
491             if ( len == 0 ) {\r
492                 return true;\r
493             }\r
494             else {\r
495                 return false;\r
496             }\r
497         }\r
498         else {\r
499             return true;\r
500         }\r
501     };\r
502     function padZero(number) {\r
503         if (number < 10) {\r
504             return "0" + number;\r
505         } else {\r
506             return "" + number;\r
507         }\r
508     };\r
509 \r
510     var httpErrorHandler = function(response, status) {\r
511         $log.warn("UtilityService:httpErrorHandler: response:");\r
512         $log.warn(response);\r
513         $log.warn("UtilityService:httpErrorHandler: status:");\r
514         $log.warn(status);\r
515         if (angular.isFunction(_this.httpErrorHandler)) {\r
516             _this.httpErrorHandler(response, status);\r
517         }\r
518     };\r
519 \r
520     var startNextAsyncOperation = function() {\r
521         if (_this.asyncOperations.count < _this.asyncOperations.operationList.length) {\r
522             _this.asyncOperations.operationList[_this.asyncOperations.count++]\r
523             ();\r
524         } else {\r
525             if (angular.isFunction(_this.asyncOperations.callbackFunction)) {\r
526                 _this.asyncOperations.callbackFunction();\r
527             }\r
528         }\r
529     };\r
530 \r
531     return {\r
532         setProperties : function(properties) {\r
533             _this.properties = properties;\r
534         },\r
535         getProperties : function() {\r
536             return _this.properties;\r
537         },\r
538         hasContents : hasContents,\r
539         checkUndefined : function(name, value) {\r
540             if (value === undefined) {\r
541                 throw {\r
542                     type : "undefinedObject",\r
543                     message : "undefined object: \"" + name + "\""\r
544                 };\r
545             }\r
546             return value;\r
547         },\r
548         jsonConcat : function (o1, o2) {\r
549             for (var key in o2) {\r
550                 o1[key] = o2[key];\r
551             }\r
552             return o1;\r
553         },\r
554         getCurrentTime : function() {\r
555             var time = new Date();\r
556             return padZero(time.getMonth() + 1) + "/"\r
557                 + padZero(time.getDate()) + "/"\r
558                 + (time.getFullYear() - 2000) + " "\r
559                 + padZero(time.getHours()) + ":"\r
560                 + padZero(time.getMinutes()) + ":"\r
561                 + padZero(time.getSeconds())\r
562         },\r
563         getHttpStatusText : function(statusCode) {\r
564             var statusMap = {\r
565                 "200" : "OK",\r
566                 "201" : "Created",\r
567                 "202" : "Accepted",\r
568                 "400" : "Bad Request",\r
569                 "401" : "Unauthorized",\r
570                 "404" : "Not Found",\r
571                 "405" : "Method Not Allowed",\r
572                 "409" : "Locked",\r
573                 "500" : "Internal Server Error",\r
574                 "503" : "Service Unavailable",\r
575                 "504" : "Gateway Timeout"\r
576             }\r
577 \r
578             if (status === undefined) {\r
579                 return "Undefined";\r
580             }\r
581 \r
582             var statusText = statusMap[statusCode];\r
583             if (statusText === undefined) {\r
584                 statusText = "Unknown";\r
585             }\r
586 \r
587             return statusText + " (" + statusCode + ")";\r
588         },\r
589         getHttpErrorMessage : function(response) {\r
590             var data = response.data;\r
591             if ((response.status >= 400 && response.status < 600) && hasContents(data.exception)) {\r
592                 var summary = "exception: " + data.exception;\r
593                 if (hasContents(data.message)) {\r
594                     summary += " message: " + data.message;\r
595                 }\r
596                 return summary;\r
597             }\r
598             if (response.status === 0 && response.statusText === "") {\r
599                                 /*\r
600                                  * This logic is somewhat "fuzzy". Potential (brainstorming)\r
601                                  * enhancements if users find the message unreliable include:\r
602                                  *\r
603                                  * A) SERVER TIMEOUT: perhaps a newer version of Angular can\r
604                                  * reliably determine timeouts.\r
605                                  *\r
606                                  * B) SERVER TIMEOUT: recording start / end times and using that\r
607                                  * to determine if timeout occured\r
608                                  *\r
609                                  * C) SESSION TIMEOUT "Potentially" examine cookies, although\r
610                                  * that may not be feasible if cookies are set to "httponly".\r
611                                  */\r
612                 if (data === null) {\r
613                     //return "possible server timeout";\r
614                     return "VID has timed out waiting for a response. To see status, close this popup and the screen will be refreshed automatically";\r
615                 }\r
616                 if (data === "") {\r
617                     return "Possible reasons include a session timeout or a server issue. "\r
618                         + "A session timeout might be resolved by refreshing the screen and re-logging in";\r
619                 }\r
620             }\r
621             var summary = "";\r
622             if (response.status !== undefined && response.status > 0) {\r
623                 summary = "status: " + response.status;\r
624             }\r
625             if (hasContents(response.statusText)) {\r
626                 if (summary !== "") {\r
627                     summary += " ";\r
628                 }\r
629                 summary += "message: " + response.statusText;\r
630             }\r
631             return summary;\r
632         },\r
633         setHttpErrorHandler : function(httpErrorHandler) {\r
634             _this.httpErrorHandler = httpErrorHandler;\r
635         },\r
636         runHttpErrorHandler : function(response, status) {\r
637             httpErrorHandler(response, status);\r
638         },\r
639         startAsyncOperations : function(operationList, callbackFunction) {\r
640             for (var i = 0; i < operationList.length; i++) {\r
641                 if (!angular.isFunction(operationList[i])) {\r
642                     throw "UtilityService:startAsyncOperations: invalid function: index: "\r
643                     + i;\r
644                 }\r
645             }\r
646             _this.asyncOperations = {\r
647                 operationList : operationList,\r
648                 callbackFunction : callbackFunction,\r
649                 count : 0\r
650             };\r
651             startNextAsyncOperation();\r
652         },\r
653         startNextAsyncOperation : startNextAsyncOperation,\r
654         stopAsyncOperations : function() {\r
655             _this.asyncOperations.count = _this.asyncOperations.operationList.length;\r
656         },\r
657         isObjectEmpty : isObjectEmpty,\r
658         convertModel : convertModel,\r
659         convertNewModel : convertNewModel,\r
660         convertOldModel : convertOldModel,\r
661         arrayContains : function (a, obj) {\r
662             var i = a.length;\r
663             if ( i > 0 ) {\r
664                 while (i--) {\r
665                     if (a[i] === obj) {\r
666                         return true;\r
667                     }\r
668                 }\r
669             }\r
670             return false;\r
671         }\r
672     }\r
673 }\r
674 \r
675 //app.factory("UtilityService", UtilityService);\r
676 appDS2.factory("UtilityService", [ "$log", "DataService", "PARAMETER", UtilityService ]);\r