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