[VID-6] Initial rebase push
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / services / creationService.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  * "CreationService" isolates the "component-specific" logic required by the\r
25  * "CreationDialog" controller.\r
26  *\r
27  * "Components" are defined as the 5 element types managed by the dialogs: A)\r
28  * Service B) VNF C) VF Module D) Volume Group and E) Network.\r
29  * \r
30  */\r
31 \r
32 var CreationService = function($log, AaiService, AsdcService, DataService,\r
33                 ComponentService, COMPONENT, FIELD, PARAMETER, UtilityService) {\r
34 \r
35         var _this = this;\r
36 \r
37         var getAsyncOperationList = function() {\r
38                 if (DataService.getLoggedInUserId() == null)\r
39                         getLoggedInUserID();\r
40                 switch (_this.componentId) {\r
41                 case COMPONENT.SERVICE:\r
42                         return [ getSubscribers, getServices ];\r
43                 case COMPONENT.NETWORK:\r
44                         return [ getLcpCloudRegionTenantList ];\r
45                 case COMPONENT.VNF:\r
46                         return [ getLcpCloudRegionTenantList ];\r
47                 case COMPONENT.VF_MODULE:\r
48                         return [ getLcpCloudRegionTenantList ];\r
49                 case COMPONENT.VOLUME_GROUP:\r
50                         return [ getLcpCloudRegionTenantList ];\r
51                 }\r
52         };\r
53 \r
54         /*\r
55          * "getSummaryList" and "getUserProvidedList" return parameters that should\r
56          * be displayed in the summary and user provided sections, respectively. The\r
57          * functions are expected to return lists that are in the format needed by\r
58          * the parameter-block directive.\r
59          */\r
60 \r
61         var getSummaryList = function() {\r
62 \r
63                 /*\r
64                  * These placeholders should be removed and their usage in\r
65                  * "getSummaryList" should be replaced by appropriate code as the\r
66                  * requirements and interfaces firm up.\r
67                  */\r
68 \r
69                 var PLACEHOLDER_RESOURCE_DESCRIPTION = "Resource Description (PLACEHOLDER)";\r
70                 var PLACEHOLDER_SERVICE_CATEGORY = "Service Category (PLACEHOLDER)";\r
71                 var PLACEHOLDER_VF_MODULE_DESCRIPTION = "VF Module Description (PLACEHOLDER)";\r
72                 var PLACEHOLDER_VF_MODULE_LABEL = "VF Module Label (PLACEHOLDER)";\r
73                 var PLACEHOLDER_VF_MODULE_TYPE = "VF Module Type (PLACEHOLDER)";\r
74 \r
75                 _this.parameterList = new Array();\r
76 \r
77                 /*\r
78                  * Common fields displayed at the top of all create instance screens.\r
79                  */\r
80                 addToList(FIELD.NAME.SERVICE_NAME, DataService.getServiceName());\r
81 \r
82                 switch (_this.componentId) {\r
83                 case COMPONENT.SERVICE:\r
84                         if ( !DataService.getALaCarte() ) {\r
85                                 // for macro instantiation need to add the resource names under the node template list\r
86                                 // this field is called modelCustomizationName in the asdc client code\r
87                                 var p;\r
88                                 var rlist = DataService.getResources();\r
89                                 var res;\r
90                                 if ( rlist != null ) { \r
91                                         for (var i = 0; i < rlist.length; i++) {\r
92                                                 res = rlist[i];\r
93                                         \r
94                                                 p = FIELD.NAME.RESOURCE_NAME.concat(" " + (i+1));\r
95                                                 addToList(p, res.name );\r
96                                                 p = FIELD.NAME.RESOURCE_DESCRIPTION.concat(" " + (i+1));\r
97                                                 addToList(p, res.description );\r
98                                         }\r
99                                 }\r
100                         }\r
101                         addToList(FIELD.NAME.SERVICE_INVARIANT_UUID, DataService\r
102                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_INVARIANT_ID]);\r
103                         addToList(FIELD.NAME.SERVICE_VERSION, DataService\r
104                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_VERSION]);\r
105                         addToList(FIELD.NAME.SERVICE_UUID, DataService\r
106                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_NAME_VERSION_ID]);\r
107                         addToList(FIELD.NAME.SERVICE_DESCRIPTION, DataService\r
108                                         .getModelInfo(_this.componentId)[FIELD.ID.DESCRIPTION]);\r
109                         addToList(FIELD.NAME.SERVICE_CATEGORY, DataService\r
110                                         .getModelInfo(_this.componentId)[FIELD.ID.CATEGORY]);\r
111                         break;\r
112                 case COMPONENT.VF_MODULE:\r
113                         addToList(FIELD.NAME.SUBSCRIBER_NAME, DataService\r
114                                         .getSubscriberName());\r
115                         addToList(FIELD.NAME.SERVICE_INSTANCE_NAME, DataService\r
116                                         .getServiceInstanceName());\r
117                         addToList(FIELD.NAME.MODEL_NAME, DataService\r
118                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_INVARIANT_ID]);\r
119                         addToList(FIELD.NAME.MODEL_INVARIANT_UUID, DataService\r
120                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_INVARIANT_ID]);\r
121                         addToList(FIELD.NAME.MODEL_VERSION, DataService\r
122                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_VERSION]);\r
123                         addToList(FIELD.NAME.MODEL_UUID, DataService\r
124                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_NAME_VERSION_ID]);\r
125                         addToList(FIELD.NAME.MODEL_CUSTOMIZATION_UUID, DataService\r
126                                         .getModelInfo(_this.componentId)[FIELD.ID.CUSTOMIZATION_UUID]);\r
127                         break;\r
128                 case COMPONENT.VNF:\r
129                         addToList(FIELD.NAME.SUBSCRIBER_NAME, DataService\r
130                                         .getSubscriberName());\r
131                         addToList(FIELD.NAME.SERVICE_INSTANCE_NAME, DataService\r
132                                         .getServiceInstanceName());\r
133                         addToList(FIELD.NAME.MODEL_NAME, DataService\r
134                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_INVARIANT_ID]);\r
135                         addToList(FIELD.NAME.MODEL_INVARIANT_UUID, DataService\r
136                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_INVARIANT_ID]);\r
137                         addToList(FIELD.NAME.MODEL_VERSION, DataService\r
138                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_VERSION]);\r
139                         addToList(FIELD.NAME.MODEL_UUID, DataService\r
140                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_NAME_VERSION_ID]);\r
141                         addToList(FIELD.NAME.MODEL_CUSTOMIZATION_UUID, DataService\r
142                                         .getModelInfo(_this.componentId)[FIELD.ID.CUSTOMIZATION_UUID]);\r
143                         addToList(FIELD.NAME.MODEL_CUSTOMIZATION_NAME, DataService\r
144                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_CUSTOMIZATION_NAME]);\r
145                         addToList(FIELD.NAME.MODEL_VNF_TYPE, DataService\r
146                                         .getModelInfo(_this.componentId)[COMPONENT.VNF_TYPE]);\r
147                         addToList(FIELD.NAME.MODEL_VNF_ROLE, DataService\r
148                                         .getModelInfo(_this.componentId)[COMPONENT.VNF_ROLE]);\r
149                         addToList(FIELD.NAME.MODEL_VNF_FUNCTION, DataService\r
150                                         .getModelInfo(_this.componentId)[COMPONENT.VNF_FUNCTION]);\r
151                         addToList(FIELD.NAME.MODEL_VNF_CODE, DataService\r
152                                         .getModelInfo(_this.componentId)[COMPONENT.VNF_CODE]);\r
153                         break;\r
154                 case COMPONENT.NETWORK:\r
155                 case COMPONENT.VOLUME_GROUP:\r
156                         addToList(FIELD.NAME.SUBSCRIBER_NAME, DataService\r
157                                         .getSubscriberName());\r
158                         addToList(FIELD.NAME.SERVICE_INSTANCE_NAME, DataService\r
159                                         .getServiceInstanceName());\r
160                         addToList(FIELD.NAME.MODEL_NAME, DataService\r
161                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_INVARIANT_ID]);\r
162                         addToList(FIELD.NAME.MODEL_INVARIANT_UUID, DataService\r
163                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_INVARIANT_ID]);\r
164                         addToList(FIELD.NAME.MODEL_VERSION, DataService\r
165                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_VERSION]);\r
166                         addToList(FIELD.NAME.MODEL_UUID, DataService\r
167                                         .getModelInfo(_this.componentId)[FIELD.ID.MODEL_NAME_VERSION_ID]);\r
168                         addToList(FIELD.NAME.MODEL_CUSTOMIZATION_UUID, DataService\r
169                                         .getModelInfo(_this.componentId)[FIELD.ID.CUSTOMIZATION_UUID]);\r
170                         break;\r
171                 }\r
172 \r
173                 return _this.parameterList;\r
174         };\r
175 \r
176         var getUserProvidedList = function() {\r
177                 parameterList = [];\r
178                 var isUserProvidedNaming = false;\r
179                 if ( (DataService.getModelInfo(_this.componentId).serviceEcompNaming != null) \r
180                                 && (DataService.getModelInfo(_this.componentId).serviceEcompNaming === "false") ) {\r
181                         isUserProvidedNaming = true;\r
182                 }\r
183                 var parameterList;\r
184                 if (_this.componentId === COMPONENT.SERVICE) {\r
185                         if ( DataService.getALaCarte() ) {\r
186                                 parameterList = [ FIELD.PARAMETER.INSTANCE_NAME ];\r
187                                 parameterList = parameterList.concat([ getSubscribersParameter(),\r
188                                     FIELD.PARAMETER.SERVICE_TYPE_DISABLED ]);\r
189                         }\r
190                         else {\r
191                                 // macro\r
192                                 if (isUserProvidedNaming) {\r
193                                         parameterList = [ FIELD.PARAMETER.INSTANCE_NAME ];\r
194                                         \r
195                                 }\r
196                                 parameterList = parameterList.concat([ getSubscribersParameter(),\r
197                                     FIELD.PARAMETER.SERVICE_TYPE_DISABLED ]);\r
198                                 parameterList = parameterList.concat([ getServiceId(),\r
199                                         FIELD.PARAMETER.SERVICE_TYPE,\r
200                                         FIELD.PARAMETER.LCP_REGION,\r
201                                         FIELD.PARAMETER.TENANT_DISABLED ]);\r
202                         }\r
203                 }\r
204                 else {\r
205                         parameterList = [ FIELD.PARAMETER.INSTANCE_NAME ];\r
206                         switch (_this.componentId) {\r
207                         case COMPONENT.NETWORK:\r
208                         case COMPONENT.VNF:\r
209                                 parameterList = parameterList.concat([ getServiceId(),\r
210                                                 getLcpRegion(), FIELD.PARAMETER.LCP_REGION_TEXT_HIDDEN,\r
211                                                 FIELD.PARAMETER.TENANT_DISABLED ]);\r
212                                 break;\r
213                         case COMPONENT.VF_MODULE:\r
214                                 parameterList = parameterList.concat([\r
215                                         getLcpRegion(),\r
216                                                 FIELD.PARAMETER.LCP_REGION_TEXT_HIDDEN,\r
217                                                 FIELD.PARAMETER.TENANT_DISABLED\r
218                                 ]);\r
219                                 \r
220                                 var availableVolumeGroupList = DataService.getAvailableVolumeGroupList();\r
221                                 \r
222                                 if (availableVolumeGroupList && availableVolumeGroupList.length > 0) {\r
223                                         var availableVolumeGroupNames = [FIELD.STATUS.NONE];\r
224         \r
225                                         for (var i = 0; i < availableVolumeGroupList.length; i++) {\r
226                                                 availableVolumeGroupNames.push(availableVolumeGroupList[i].instance.name);\r
227                                         }\r
228                                         \r
229                                         parameterList.push(addOptionList(\r
230                                                         FIELD.PARAMETER.AVAILABLE_VOLUME_GROUP,\r
231                                                         availableVolumeGroupNames));\r
232                                 }\r
233                                 break;\r
234                         case COMPONENT.VOLUME_GROUP:\r
235                                 parameterList = parameterList.concat([ getLcpRegion(),\r
236                                                 FIELD.PARAMETER.LCP_REGION_TEXT_HIDDEN,\r
237                                                 FIELD.PARAMETER.TENANT_DISABLED ]);\r
238                         }\r
239                 }\r
240 \r
241                 parameterList.push(FIELD.PARAMETER.SUPPRESS_ROLLBACK);\r
242 \r
243                 addArbitraryParameters(parameterList);\r
244 \r
245                 return parameterList;\r
246         };\r
247 \r
248         var addArbitraryParameters = function(parameterList) {\r
249                 if ( DataService.getModelInfo(_this.componentId).displayInputs != null ) {\r
250                         var inputs = DataService.getModelInfo(_this.componentId).displayInputs;  \r
251                         for ( var key in inputs) {\r
252                                 var parameter = {\r
253                                                 id : key,\r
254                                                 type : PARAMETER.STRING,\r
255                                                 name : ComponentService.getFieldDisplayName(key),\r
256                                                 value : inputs[key][PARAMETER.DEFAULT],\r
257                                                 isRequired : inputs[key][PARAMETER.REQUIRED],\r
258                                                 description : inputs[key][PARAMETER.DESCRIPTION]\r
259                                 };\r
260                                 switch (inputs[key][PARAMETER.TYPE]) {\r
261                                         case PARAMETER.INTEGER:\r
262                                                 parameter.type = PARAMETER.NUMBER;\r
263                                                 break;\r
264                                         case PARAMETER.BOOLEAN:\r
265                                                 parameter.type = PARAMETER.BOOLEAN;\r
266                                                 break;\r
267                                         case PARAMETER.RANGE:\r
268                                                 break;\r
269                                         case PARAMETER.LIST:\r
270                                                 break;\r
271                                         case PARAMETER.MAP:\r
272                                                 parameter.type = PARAMETER.MAP;\r
273                                                 break;\r
274                                 }\r
275                         \r
276                                 if ( UtilityService.hasContents(inputs[key][PARAMETER.CONSTRAINTS]) \r
277                                                 && ( inputs[key][PARAMETER.CONSTRAINTS].length > 0 ) ) {\r
278                                         var constraintsArray = inputs[key][PARAMETER.CONSTRAINTS];\r
279                                         //console.log ("Calling addConstraintParameters for input name=" + key);\r
280                                         addConstraintParameters (parameterList, constraintsArray, key, inputs, parameter);\r
281                                 }\r
282                                 else {\r
283                                         \r
284                                         parameterList.push(parameter);\r
285                                 }\r
286                         }\r
287                 }\r
288         };\r
289 \r
290         var addConstraintParameters = function(parameterList, constraintsArray, key, inputs, parameter) {\r
291                 // If there are constraints and the operator is "valid_values",\r
292                 // use a select parameter type. \r
293                 var i = constraintsArray.length;\r
294                 var parameterPushed = false;\r
295                 if ( i > 0 ) {\r
296                         while ( (i--) && (!parameterPushed) ) {\r
297                                 var keys = Object.keys(constraintsArray[i]);\r
298                                 //var keys_len = keys.length;\r
299                                 for ( var operator in keys ) {\r
300                                         //console.log ("keys[operator]=" + keys[operator]);\r
301                                         switch (keys[operator]) {\r
302                                         case PARAMETER.VALID_VALUES:\r
303                                                 var j = constraintsArray[i][PARAMETER.VALID_VALUES].length;\r
304                                                 if ( j > 0 ) {\r
305                                                         var oList = [];\r
306                                                         var option;\r
307                                                         while (j--) {\r
308                                                                 option = {\r
309                                                                                 name: constraintsArray[i][PARAMETER.VALID_VALUES][j],\r
310                                                                                 isDefault: false\r
311                                                                 } \r
312                                                                 if ( ( UtilityService.hasContents (inputs[key][PARAMETER.DEFAULT]) ) \r
313                                                                                 && (inputs[key][PARAMETER.DEFAULT] === constraintsArray[i][PARAMETER.VALID_VALUES][j] ) ) {\r
314                                                                         option = {\r
315                                                                                         name: constraintsArray[i][PARAMETER.VALID_VALUES][j],\r
316                                                                                         isDefault: true\r
317                                                                         } \r
318                                                                 }\r
319                                                                 oList.push(option);\r
320                                                         }\r
321                                                         parameter.type = PARAMETER.SELECT;\r
322                                                         parameter.optionList = oList;\r
323                                                         parameterList.push(parameter);\r
324                                                         parameterPushed = true;\r
325                                                         //console.log ("pushed param for valid values");\r
326                                                 }\r
327                                         break; \r
328                                         \r
329                                         case PARAMETER.EQUAL: \r
330                                                 if ( constraintsArray[i][PARAMETER.EQUAL] != null ) {\r
331                                                         //override parameter type\r
332                                                         parameter.type = PARAMETER.STRING;\r
333                                                         parameter.isReadOnly = true;\r
334                                                         parameter.value = constraintsArray[i][PARAMETER.EQUAL];\r
335                                                         parameterList.push(parameter);\r
336                                                         parameterPushed = true;\r
337                                                         //console.log ("pushed param for equal");\r
338                                                 }\r
339                                         break;\r
340                                                 \r
341                                         case PARAMETER.LENGTH: \r
342                                                 if ( constraintsArray[i][PARAMETER.LENGTH] != null ) {\r
343                                                         parameter.minLength = constraintsArray[i][PARAMETER.LENGTH];\r
344                                                         parameter.maxLength = constraintsArray[i][PARAMETER.LENGTH];\r
345                                                         parameterList.push(parameter);\r
346                                                         parameterPushed = true;\r
347                                                         //console.log ("pushed param for length: ");\r
348                                                         //console.log (JSON.stringify (parameter, null, 4));\r
349                                                 }\r
350                                         break;\r
351                                         case PARAMETER.MAX_LENGTH: \r
352                                                 if ( constraintsArray[i][PARAMETER.MAX_LENGTH] != null ) {\r
353                                                         parameter.maxLength = constraintsArray[i][PARAMETER.MAX_LENGTH];\r
354                                                         parameterList.push(parameter);\r
355                                                         parameterPushed = true;\r
356                                                         //console.log ("pushed param for max length: ");\r
357                                                         //console.log (JSON.stringify (parameter, null, 4));\r
358                                                 }\r
359                                         break;\r
360                                         case PARAMETER.MIN_LENGTH: \r
361                                                 if ( constraintsArray[i][PARAMETER.MIN_LENGTH] != null ) {\r
362                                                         parameter.minLength = constraintsArray[i][PARAMETER.MIN_LENGTH];\r
363                                                         parameterList.push(parameter);\r
364                                                         parameterPushed = true;\r
365                                                         //console.log ("pushed param for min length: ");\r
366                                                         //console.log (JSON.stringify (parameter, null, 4));\r
367                                                 }\r
368                                         break;\r
369                                         case PARAMETER.IN_RANGE:\r
370                                                 if ( constraintsArray[i][PARAMETER.IN_RANGE] != null ) {\r
371                                                         if (constraintsArray[i][PARAMETER.IN_RANGE].length > 1 ) {\r
372                                                                 parameter.min = constraintsArray[i][PARAMETER.IN_RANGE][0];\r
373                                                                 parameter.max = constraintsArray[i][PARAMETER.IN_RANGE][1];\r
374                                                                 parameter.type = PARAMETER.NUMBER;\r
375                                                                 parameter.value = inputs[key][PARAMETER.DEFAULT]\r
376                                                                 parameterList.push(parameter);\r
377                                                                 parameterPushed = true;\r
378                                                                 //console.log ("pushed param for in_range");\r
379                                                         }\r
380                                                 }\r
381                                         break; \r
382                                         case PARAMETER.GREATER_THAN:\r
383                                                 if ( constraintsArray[i][PARAMETER.GREATER_THAN] != null ) {\r
384                                                                 parameter.type = PARAMETER.NUMBER;\r
385                                                                 parameter.min = constraintsArray[i][PARAMETER.GREATER_THAN];\r
386                                                                 parameter.value = inputs[key][PARAMETER.DEFAULT]\r
387                                                                 parameterList.push(parameter);\r
388                                                                 parameterPushed = true;\r
389                                                                 //console.log ("pushed param for greater_than");\r
390                                                         \r
391                                                 }\r
392                                         break;\r
393                                         }//switch\r
394                                 }//for\r
395                                 \r
396                         }//while\r
397                 }//if\r
398         };\r
399         var addToList = function(name, value) {\r
400                 _this.parameterList.push({\r
401                         name : name,\r
402                         value : value\r
403                 });\r
404         };\r
405 \r
406         /*\r
407          * The "*Mso*" functions return URL and request details that can be passed\r
408          * to the MSO controller. The request details defines the info passed as\r
409          * part of the POST body.\r
410          */\r
411 \r
412         var getMsoUrl = function() {\r
413                 switch (_this.componentId) {\r
414                 case COMPONENT.NETWORK:\r
415                         return "mso_create_nw_instance/"\r
416                                         + DataService.getServiceInstanceId();\r
417                 case COMPONENT.SERVICE:\r
418                         return "mso_create_svc_instance";\r
419                 case COMPONENT.VNF:\r
420                         return "mso_create_vnf_instance/"\r
421                                         + DataService.getServiceInstanceId();\r
422                 case COMPONENT.VF_MODULE:\r
423                         return "mso_create_vfmodule_instance/"\r
424                                         + DataService.getServiceInstanceId() + "/vnfs/"\r
425                                         + DataService.getVnfInstanceId();\r
426                 case COMPONENT.VOLUME_GROUP:\r
427                         return "mso_create_volumegroup_instance/"\r
428                                         + DataService.getServiceInstanceId() + "/vnfs/"\r
429                                         + DataService.getVnfInstanceId();\r
430                 }\r
431         };\r
432 \r
433         var getMsoRequestDetails = function(parameterList) {\r
434                 console.log("getMsoRequestDetails invoked, parameterList="); console.log(JSON.stringify(parameterList,null,4));\r
435                 var modelInfo = DataService.getModelInfo(_this.componentId);\r
436                 var requestorloggedInId = DataService.getLoggedInUserId();\r
437                 if (requestorloggedInId ==  null)\r
438                         requestorloggedInId = "";\r
439                 var isSupRollback = false;\r
440                 if (getValueFromList(FIELD.ID.SUPPRESS_ROLLBACK,parameterList) === "true") {\r
441                         isSupRollback = true;\r
442                 }\r
443                 var requestDetails = {\r
444                         requestInfo : {\r
445                                 instanceName : getValueFromList(FIELD.ID.INSTANCE_NAME,\r
446                                                 parameterList),\r
447                                 source : FIELD.ID.VID,\r
448                                 suppressRollback : isSupRollback,\r
449                                 requestorId: requestorloggedInId\r
450                         },\r
451                         modelInfo : {\r
452                                 modelType : _this.componentId,\r
453                                 modelInvariantId : modelInfo.modelInvariantId,\r
454                                 modelVersionId : modelInfo.modelNameVersionId,\r
455                                 modelName : modelInfo.modelName,\r
456                                 modelVersion : modelInfo.modelVersion,\r
457                                 modelCustomizationId: modelInfo.customizationUuid,\r
458                                 modelCustomizationName : modelInfo.modelCustomizationName\r
459                         },\r
460                         requestParameters : {\r
461                                 userParams : getArbitraryParameters(parameterList)\r
462                         }\r
463                 };\r
464                 if ( (_this.componentId != COMPONENT.SERVICE) || ( !DataService.getALaCarte() ) ) {\r
465                         // include cloud region for everything but service create alacarte\r
466                         var lcpRegion = getValueFromList(FIELD.ID.LCP_REGION, parameterList);\r
467                         if (lcpRegion === FIELD.KEY.LCP_REGION_TEXT) {\r
468                                 lcpRegion = getValueFromList(FIELD.ID.LCP_REGION_TEXT,\r
469                                                 parameterList);\r
470                         }\r
471                         requestDetails.cloudConfiguration = {\r
472                                         lcpCloudRegionId : lcpRegion,\r
473                                         tenantId : getValueFromList(FIELD.ID.TENANT, parameterList)\r
474                         };      \r
475                 }\r
476                 switch (_this.componentId) {\r
477                 case COMPONENT.SERVICE:\r
478                         requestDetails.subscriberInfo = {\r
479                                 globalSubscriberId : DataService.getGlobalCustomerId(),\r
480                                 subscriberName : DataService.getSubscriberName()\r
481                         };\r
482                         requestDetails.requestParameters.subscriptionServiceType = getValueFromList(\r
483                                         FIELD.ID.SERVICE_TYPE, parameterList);\r
484                         requestDetails.requestParameters.aLaCarte = DataService.getALaCarte();\r
485                         if ( !DataService.getALaCarte() ) {\r
486                                 requestDetails.requestInfo.productFamilyId = getValueFromList(\r
487                                         FIELD.ID.PRODUCT_FAMILY, parameterList);\r
488                         }\r
489                         var svcModelInfo = {\r
490                                         modelType : _this.componentId,\r
491                                         modelInvariantId : modelInfo.modelInvariantId,\r
492                                         modelVersionId : modelInfo.modelNameVersionId,\r
493                                         modelName : modelInfo.modelName,\r
494                                         modelVersion : modelInfo.modelVersion\r
495                                 };\r
496                                 requestDetails.modelInfo = svcModelInfo;\r
497                         break;\r
498                 case COMPONENT.VNF:\r
499                         \r
500                         requestDetails.requestInfo.productFamilyId = getValueFromList(\r
501                                         FIELD.ID.PRODUCT_FAMILY, parameterList);\r
502                         break;\r
503                 case COMPONENT.NETWORK:\r
504                         requestDetails.requestInfo.productFamilyId = getValueFromList(\r
505                                         FIELD.ID.PRODUCT_FAMILY, parameterList);\r
506                         \r
507                         break;\r
508                 case COMPONENT.VF_MODULE:\r
509                                 break;\r
510                 case COMPONENT.VOLUME_GROUP:\r
511                         break;\r
512                 }\r
513 \r
514                 var relatedInstanceList = getRelatedInstanceList(parameterList);\r
515 \r
516                 if (relatedInstanceList !== undefined) {\r
517                         requestDetails.relatedInstanceList = relatedInstanceList;\r
518                 }\r
519 \r
520                 return requestDetails;\r
521         };\r
522 \r
523         var getRelatedInstanceList = function(parameterList) {\r
524                 var relatedInstanceList = new Array();\r
525                 switch (_this.componentId) {\r
526                 case COMPONENT.SERVICE:\r
527                         return undefined;\r
528                 case COMPONENT.NETWORK:\r
529                 case COMPONENT.VNF:\r
530                         addRelatedInstance(relatedInstanceList, COMPONENT.SERVICE,\r
531                                         DataService.getServiceInstanceId());\r
532                         break;\r
533                 case COMPONENT.VF_MODULE:\r
534                         addRelatedInstance(relatedInstanceList, COMPONENT.SERVICE,\r
535                                         DataService.getServiceInstanceId());\r
536                         addRelatedInstance(relatedInstanceList, COMPONENT.VNF, DataService\r
537                                         .getVnfInstanceId());\r
538 \r
539                         var availableVolumeGroup = getValueFromList(\r
540                                         FIELD.ID.AVAILABLE_VOLUME_GROUP, parameterList);\r
541                         \r
542                         if (UtilityService.hasContents(availableVolumeGroup) && availableVolumeGroup !== "None") {\r
543                                 var availableVolumeGroups = DataService.getAvailableVolumeGroupList();\r
544                                 \r
545                                 for (var i = 0; i < availableVolumeGroups.length; i++) {\r
546                                         if (availableVolumeGroups[i].instance.name == availableVolumeGroup) {\r
547                                                 DataService.setModelInfo(COMPONENT.VOLUME_GROUP, DataService.getModelInfo(COMPONENT.VF_MODULE));\r
548                                                 DataService.setVolumeGroupInstanceId(availableVolumeGroups[i].instance.object["volume-group-id"]);\r
549                                                 break;\r
550                                         }\r
551                                 }\r
552                                 \r
553                                 addRelatedInstance(relatedInstanceList, COMPONENT.VOLUME_GROUP,\r
554                                                 DataService.getVolumeGroupInstanceId());\r
555                         }\r
556                         break;\r
557                 case COMPONENT.VOLUME_GROUP:\r
558                         addRelatedInstance(relatedInstanceList, COMPONENT.SERVICE,\r
559                                         DataService.getServiceInstanceId());\r
560                         addRelatedInstance(relatedInstanceList, COMPONENT.VNF, DataService\r
561                                         .getVnfInstanceId());\r
562                         break;\r
563                 }\r
564 \r
565                 return relatedInstanceList;\r
566         };\r
567 \r
568         var addRelatedInstance = function(relatedInstanceList, componentId,\r
569                         instanceId) {\r
570                 var modelInfo = DataService.getModelInfo(componentId);\r
571                 var relatedInstance;\r
572                 if (modelInfo !== undefined) {\r
573                         if (componentId === COMPONENT.SERVICE) {\r
574                                 relatedInstance = {\r
575                                         "instanceId" : instanceId,\r
576                                         "modelInfo" : {\r
577                                                 "modelType" : componentId,\r
578                                                 "modelName" : modelInfo.modelName,\r
579                                                 "modelInvariantId" : modelInfo.modelInvariantId,\r
580                                                 "modelVersion" : modelInfo.modelVersion,\r
581                                                 "modelVersionId" : modelInfo.modelNameVersionId,\r
582                                                 \r
583                                         }\r
584                                 };\r
585                         }\r
586                         else {\r
587                                 relatedInstance = {\r
588                                                 "instanceId" : instanceId,\r
589                                                 "modelInfo" : {\r
590                                                         "modelType" : componentId,\r
591                                                         "modelName" : modelInfo.modelName,\r
592                                                         "modelInvariantId" : modelInfo.modelInvariantId,\r
593                                                         "modelVersion" : modelInfo.modelVersion,\r
594                                                         "modelVersionId" : modelInfo.modelNameVersionId,\r
595                                                         "modelCustomizationId": modelInfo.customizationUuid,\r
596                                                         "modelCustomizationName": modelInfo.modelCustomizationName\r
597                                                 }\r
598                                 }\r
599                         }\r
600                         relatedInstanceList.push({\r
601                                 relatedInstance : relatedInstance\r
602                         });\r
603                 }\r
604         };\r
605 \r
606         /*\r
607          * var getArbitraryParameters = function(parameterList) { var\r
608          * arbitraryParameters = new Object(); for (var i = 0; i <\r
609          * parameterList.length; i++) { var parameter = parameterList[i]; switch\r
610          * (parameter.id) { case FIELD.ID.INSTANCE_NAME: case\r
611          * FIELD.ID.PRODUCT_FAMILY: case FIELD.ID.LCP_REGION: case\r
612          * FIELD.ID.LCP_REGION_TEXT: case FIELD.ID.SERVICE_TYPE: case\r
613          * FIELD.ID.TENANT: case FIELD.ID.SUPPRESS_ROLLBACK: break; default:\r
614          * arbitraryParameters[parameter.id] = parameter.value; } } return\r
615          * arbitraryParameters; }\r
616          */\r
617         var getArbitraryParameters = function(parameterList) {\r
618                 var arbitraryParameters = new Object();\r
619                 var arbitraryArray = new Array();\r
620                 for (var i = 0; i < parameterList.length; i++) {\r
621                         var parameter = parameterList[i];\r
622                         switch (parameter.id) {\r
623                         case FIELD.ID.AVAILABLE_VOLUME_GROUP:\r
624                                 break;\r
625                         case FIELD.ID.INSTANCE_NAME:\r
626                                 break;\r
627                         case FIELD.ID.PRODUCT_FAMILY:\r
628                                 break;\r
629                         case FIELD.ID.LCP_REGION:\r
630                                 break;\r
631                         case FIELD.ID.LCP_REGION_TEXT:\r
632                                 break;\r
633                         case FIELD.ID.SERVICE_TYPE:\r
634                                 break;\r
635                         case FIELD.ID.TENANT:\r
636                                 break;\r
637                         case FIELD.ID.SUPPRESS_ROLLBACK:\r
638                                 break;\r
639                         case FIELD.ID.SUBSCRIBER_NAME:\r
640                                 break;\r
641                         default:\r
642                                 arbitraryParameters = {\r
643                                         name : parameter.id,\r
644                                         value : parameter.value\r
645                                 }\r
646                                 arbitraryArray.push(arbitraryParameters);\r
647                         }\r
648                 }\r
649                 return (arbitraryArray);\r
650         }\r
651 \r
652         var getModel = function() {\r
653                 AsdcService.getModel(DataService.getModelId(), function(response) {\r
654                         DataService.setModelInfo(_this.componentId, {\r
655                                 modelInvariantId : response.data.invariantUUID,\r
656                                 modelNameVersionId : response.data.uuid,\r
657                                 modelName : response.data.name,\r
658                                 modelVersion : response.data.version,\r
659                                 inputs : response.data.inputs\r
660                         });\r
661                         UtilityService.startNextAsyncOperation();\r
662                 });\r
663         };\r
664 \r
665         var getSubscriptionServiceTypeList = function() {\r
666                 AaiService.getSubscriptionServiceTypeList(DataService\r
667                                 .getGlobalCustomerId(), function(response) {\r
668                         DataService.setSubscriptionServiceTypeList(response);\r
669                         UtilityService.startNextAsyncOperation();\r
670                 });\r
671         };\r
672 \r
673         var getLoggedInUserID = function() {\r
674                 AaiService.getLoggedInUserID(function(response) {\r
675                         DataService.setLoggedInUserId(response.data);\r
676                         UtilityService.startNextAsyncOperation();\r
677                 });\r
678         };\r
679         \r
680         var getSubscribers = function() {\r
681                 AaiService.getSubscribers(function(response) {\r
682                         DataService.setSubscribers(response);\r
683                         UtilityService.startNextAsyncOperation();\r
684                 });\r
685         };\r
686         var getServices = function() {\r
687                 AaiService.getServices(function(response) {\r
688                         var serviceIdList = [];\r
689                         angular.forEach(response.data, function(value, key) {\r
690                                 angular.forEach(value, function(subVal, key) {\r
691                                         var newVal = { "id" : subVal[FIELD.ID.SERVICE_ID], "description" : subVal[FIELD.ID.SERVICE_DESCRIPTION] };\r
692                                         serviceIdList.push(newVal);\r
693                                         DataService.setServiceIdList(serviceIdList);\r
694                                 });\r
695                         });\r
696                 \r
697                         UtilityService.startNextAsyncOperation();\r
698                 });\r
699         };\r
700         var getLcpCloudRegionTenantList = function() {\r
701                 AaiService.getLcpCloudRegionTenantList(DataService\r
702                                 .getGlobalCustomerId(), DataService.getServiceType(), function(\r
703                                 response) {\r
704                         DataService.setCloudRegionTenantList(response);\r
705                         UtilityService.startNextAsyncOperation();\r
706                 });\r
707         };\r
708 \r
709         var internalGetParametersHandler = function() {\r
710                 if (angular.isFunction(_this.getParametersHandler)) {\r
711                         _this.getParametersHandler({\r
712                                 summaryList : getSummaryList(),\r
713                                 userProvidedList : getUserProvidedList()\r
714                         });\r
715                 }\r
716         };\r
717 \r
718         var getSubscribersParameter = function() {\r
719                 var subscribers = DataService.getSubscribers();\r
720                 var parameter = FIELD.PARAMETER.SUBSCRIBER_NAME;\r
721                 if ( UtilityService.hasContents(subscribers)) {\r
722                         parameter.optionList = [];\r
723         \r
724                         for (var i = 0; i < subscribers.length; i++) {\r
725                                 parameter.optionList.push({\r
726                                         id : subscribers[i][FIELD.ID.GLOBAL_CUSTOMER_ID],\r
727                                         name : subscribers[i][FIELD.ID.SUBNAME]\r
728                                 })\r
729                         }\r
730                 }\r
731                 return parameter;\r
732         };\r
733 \r
734         var getServiceId = function() {\r
735                 var serviceIdList = DataService.getServiceIdList();\r
736                 var serviceTypeList = DataService.getSubscriptionServiceTypeList();\r
737                 var parameter = FIELD.PARAMETER.PRODUCT_FAMILY;\r
738                 parameter.optionList = new Array();\r
739                 \r
740                 if (serviceTypeList == null) {\r
741                         getSubscriptionServiceTypeList();\r
742                         serviceTypeList = DataService.getSubscriptionServiceTypeList();\r
743                 }\r
744                 var went = 0;\r
745                 if ( UtilityService.hasContents (serviceIdList) ) {\r
746                         for (var i = 0; i < serviceIdList.length; i++) {\r
747                                 var go = 0;\r
748                                 var name = serviceIdList[i].id;\r
749         \r
750                                 if (UtilityService.hasContents(serviceTypeList) ) { \r
751                                         console.log("STL: " + serviceTypeList);\r
752                                         for (var k = 0; k < serviceTypeList.length; k++) {\r
753                                                 if (angular.equals(name,serviceTypeList[k])) {\r
754                                                         go = 1;\r
755                                                         went = 1;\r
756                                                 }\r
757                                         }\r
758                                 } else { \r
759                                         go = 1;\r
760                                         went = 1;\r
761                                 }\r
762                                 if (go == 1) {\r
763                                         parameter.optionList.push({\r
764                                                 id : serviceIdList[i].id,\r
765                                                 name : serviceIdList[i].description\r
766                                         });\r
767                                 }\r
768                         }  // load them all, ours wasn't in the list\r
769                         if (went == 0) { \r
770                                 for (var i = 0; i < serviceIdList.length; i++) {\r
771                                                 parameter.optionList.push({\r
772                                                         id : serviceIdList[i].id,\r
773                                                         name : serviceIdList[i].description\r
774                                                 });\r
775                                 }\r
776                         }\r
777                 }\r
778                 return parameter;\r
779         };\r
780 \r
781         var getLcpRegion = function() {\r
782                 var cloudRegionTenantList = DataService.getCloudRegionTenantList();\r
783                 var parameter = FIELD.PARAMETER.LCP_REGION;\r
784                 if ( UtilityService.hasContents (cloudRegionTenantList) ) {\r
785                         parameter.optionList = new Array();\r
786                         for (var i = 0; i < cloudRegionTenantList.length; i++) {\r
787                                 for (var j = 0; j < parameter.optionList.length; j++) {\r
788                                         if (parameter.optionList[j].id === cloudRegionTenantList[i].cloudRegionId) {\r
789                                                 break;\r
790                                         }\r
791                                 }\r
792                                 if (j < parameter.optionList.length) {\r
793                                         continue;\r
794                                 }\r
795                                 parameter.optionList.push({\r
796                                         id : cloudRegionTenantList[i].cloudRegionId\r
797                                 });\r
798                         }\r
799                 }\r
800                 return parameter;\r
801         };\r
802 \r
803         var getTenantList = function(cloudRegionId) {\r
804                 var cloudRegionTenantList = DataService.getCloudRegionTenantList();\r
805                 var parameter = "";\r
806                 if ( UtilityService.hasContents (cloudRegionTenantList) ) {\r
807                         parameter = FIELD.PARAMETER.TENANT_ENABLED;\r
808                         parameter.optionList = new Array();\r
809                         for (var i = 0; i < cloudRegionTenantList.length; i++) {\r
810                                 if (cloudRegionTenantList[i].cloudRegionId === cloudRegionId) {\r
811                                         parameter.optionList.push({\r
812                                                 id : cloudRegionTenantList[i].tenantId,\r
813                                                 name : cloudRegionTenantList[i].tenantName\r
814                                         });\r
815                                 }\r
816                         }\r
817                 }\r
818                 return parameter;\r
819 \r
820         };\r
821 \r
822         var addOptionList = function(parameter, optionSimpleArray) {\r
823                 var optionList = new Array();\r
824                 if (!angular.isArray(optionSimpleArray)) {\r
825                         return optionList;\r
826                 }\r
827                 for (var i = 0; i < optionSimpleArray.length; i++) {\r
828                         optionList.push({\r
829                                 name : optionSimpleArray[i]\r
830                         });\r
831                 }\r
832                 parameter.optionList = optionList;\r
833                 return parameter;\r
834         };\r
835 \r
836         var getValueFromList = function(id, parameterList) {\r
837                 for (var i = 0; i < parameterList.length; i++) {\r
838                         if (parameterList[i].id === id) {\r
839                                 return parameterList[i].value;\r
840                         }\r
841                 }\r
842         };\r
843         var updateUserParameterList = function(updatedId, parameterListControl) {\r
844                 console.log ("updateUserParameterList() updatedId=" + updatedId);\r
845                 if (updatedId === FIELD.ID.LCP_REGION) {\r
846                         var list = parameterListControl.getList(updatedId);\r
847                         if (list[0].selectedIndex >= 0) {\r
848                                 parameterListControl\r
849                                                 .updateList([ getTenantList(list[0].value) ]);\r
850                         } else {\r
851                                 parameterListControl\r
852                                                 .updateList([ FIELD.PARAMETER.TENANT_DISABLED ]);\r
853                         }\r
854                         if (list[0].value === FIELD.KEY.LCP_REGION_TEXT) {\r
855                                 parameterListControl\r
856                                                 .updateList([ FIELD.PARAMETER.LCP_REGION_TEXT_VISIBLE ]);\r
857                         } else {\r
858                                 parameterListControl\r
859                                                 .updateList([ FIELD.PARAMETER.LCP_REGION_TEXT_HIDDEN ]);\r
860                         }\r
861                 } else if (updatedId === FIELD.ID.SUBSCRIBER_NAME) {\r
862                         var list = parameterListControl.getList(updatedId);\r
863                         if (list[0].selectedIndex >= 0) {\r
864                                 DataService.setGlobalCustomerId(list[0].value);\r
865 \r
866                                 AaiService.getSubscriptionServiceTypeList(DataService\r
867                                                 .getGlobalCustomerId(), function(response) {\r
868                                         DataService.setSubscriptionServiceTypeList(response);\r
869                                         var serviceTypeParameters = FIELD.PARAMETER.SERVICE_TYPE;\r
870                                         serviceTypeParameters.optionList = [];\r
871 \r
872                                         for (var i = 0; i < response.length; i++) {\r
873                                                 serviceTypeParameters.optionList.push({\r
874                                                         "id" : response[i],\r
875                                                         "name" : response[i]\r
876                                                 });\r
877                                         }\r
878                                         console.log ( "updateUserParameterList: service type parameters " ); \r
879                                         console.log ( JSON.stringify (serviceTypeParameters, null, 4));\r
880                                         parameterListControl.updateList([ serviceTypeParameters ]);\r
881                                 });\r
882 \r
883                         } \r
884                 } else if ( updatedId === FIELD.ID.SERVICE_TYPE ) {\r
885                         var list = parameterListControl.getList(updatedId);\r
886                         if (list[0].selectedIndex >= 0) {\r
887 \r
888                                 DataService.setServiceType(list[0].value);\r
889                                 var cloudRegionTenantList = new Array();\r
890                                 AaiService.getLcpCloudRegionTenantList(DataService.getGlobalCustomerId(), DataService.getServiceType(), function(cloudRegionTenantList) {\r
891                                         DataService.setCloudRegionTenantList(cloudRegionTenantList);\r
892                                         parameterListControl.updateList([ getLcpRegion() ]);\r
893                                 }); \r
894                         } else {\r
895                                 parameterListControl\r
896                                 .updateList([ FIELD.PARAMETER.SERVICE_TYPE_DISABLED ]);\r
897                         }\r
898                 }\r
899 \r
900         };\r
901 \r
902         return {\r
903                 initializeComponent : function(componentId) {\r
904                         _this.componentId = ComponentService.initialize(componentId);\r
905                 },\r
906                 setHttpErrorHandler : function(httpErrorHandler) {\r
907                         _this.httpErrorHandler = httpErrorHandler;\r
908                 },\r
909                 getComponentDisplayName : ComponentService.getComponentDisplayName,\r
910                 getParameters : function(getParametersHandler) {\r
911                         _this.getParametersHandler = getParametersHandler;\r
912                         UtilityService.setHttpErrorHandler(_this.httpErrorHandler);\r
913                         UtilityService.startAsyncOperations(getAsyncOperationList(),\r
914                                         internalGetParametersHandler);\r
915                 },\r
916                 updateUserParameterList : updateUserParameterList,\r
917                 getMsoRequestDetails : getMsoRequestDetails,\r
918                 getMsoUrl : getMsoUrl\r
919         }\r
920 }\r
921 \r
922 appDS2.factory("CreationService", [ "$log", "AaiService", "AsdcService",\r
923                 "DataService", "ComponentService", "COMPONENT", "FIELD", "PARAMETER",\r
924                 "UtilityService", CreationService ]);\r