Merge "modify pom.xml files to integrate all modules for deployment"
[vnfsdk/refrepo.git] / openo-portal / portal-lifecyclemgr / src / main / webapp / lifecyclemgr / js / gsolcm.js
1 /*
2  * Copyright 2016 ZTE Corporation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *         http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 var templateParameters = {
17     templateName: '',
18     parameters: []
19 };
20
21 var service_instance_insert_index = 0;
22
23 var lcmHandler = function () {
24     this._addOwnEvents();
25 };
26
27 lcmHandler.prototype = {
28     _addOwnEvents: function () {
29         $('a[data-toggle="tab"]').on('show.bs.tab', this.beforeParameterTabShow);
30         $('#createNS').click(this.okAction);
31     },
32     beforeParameterTabShow: function (event) {
33         renderTemplateParametersTab();
34     },
35     okAction: function (event) {
36         var serviceInstance = {
37             serviceTemplateId: $('#svcTempl').val(),
38             serviceName: $('#svcName').val(),
39             serviceDescription: $('#svcDesc').val(),
40             serviceParameters: collectServiceParameters(templateParameters),
41             vimLocation: $('#vim_location').val()
42         }
43         var gatewayService = '/openoapi/servicegateway/v1/services';
44         var serviceTemplate = fetchServiceTemplateBy(serviceInstance.serviceTemplateId);
45         if (serviceTemplate === undefined) {
46             return;
47         }
48         if (serviceTemplate.csarType === 'GSAR') {
49             serviceInstance.serviceInstanceId = createGsoServiceInstance(gatewayService, serviceInstance);
50         } else if (serviceTemplate.csarType === 'NSAR' || serviceTemplate.csarType === 'NFAR') {
51             serviceInstance.serviceInstanceId = createNfvoServiceInstance(gatewayService, serviceInstance);
52         } else if (serviceTemplate.csarType === 'SSAR') {
53             serviceInstance.serviceInstanceId = createSdnoServiceInstance(gatewayService, serviceInstance);
54         }
55         if (serviceInstance.serviceInstanceId === undefined) {
56             return;
57         }
58         updateTable(serviceInstance);
59     }
60 };
61
62 function collectServiceParameters(parameters) {
63     var serviceParameters = {};
64     var i;
65     for (i = 0; i < parameters.length; i += 1) {
66         serviceParameters[parameters.name] = $('#' + parameters[i].id).val();
67     }
68     return serviceParameters;
69 }
70
71 function fetchServiceTemplateBy(templateId) {
72     var serviceTemplateUri = '/openoapi/catalog/v1/servicetemplates/' + templateId;
73     var template;
74     $.ajax({
75         type: "GET",
76         async: false,
77         url: serviceTemplateUri,
78         contentType: "application/json",
79         dataType: "json",
80         success: function (jsonResp) {
81             template = {
82                 name: jsonResp.templateName,
83                 gsarId: jsonResp.csarId
84             }
85         },
86         error: function (xhr, ajaxOptions, thrownError) {
87             alert("Error on page : " + xhr.responseText);
88         }
89     });
90     if (template === undefined) {
91         return template;
92     }
93     var queryCsarUri = '/openoapi/catalog/v1/csars/' + template.gsarId;
94     $.ajax({
95         type: "GET",
96         async: false,
97         url: queryCsarUri,
98         contentType: "application/json",
99         dataType: "json",
100         success: function (jsonResp) {
101             template.csarType = jsonResp.type
102         },
103         error: function (xhr, ajaxOptions, thrownError) {
104             alert("Error on page : " + xhr.responseText);
105         }
106     });
107     return template;
108 }
109
110 function renderTemplateParametersTab() {
111     $.when(
112         fetchTemplateParameterDefinitions(templateParameters),
113         fetchVimInfo()
114     ).then(function(templateParameterResponse, vimsInfoResponse) {
115         templateParameters = translateToTemplateParameters(templateParameterResponse[0].inputs);
116         var vims = translateToVimInfo(vimsInfoResponse[0]);
117         var components = transfromToComponents(templateParameters.parameters, vims);
118         document.getElementById("parameterTab").innerHTML = components;
119     });
120 }
121
122 function fetchTemplateParameterDefinitions(parameters) {
123     var currentServiceTemplate = $("#svcTempl").val();
124     var queryParametersUri = 'http://localhost:8080/openoapi/catalog/v1/servicetemplates/' + currentServiceTemplate + '/parameters';
125     return $.ajax({
126         type: "GET",
127         url: queryParametersUri
128     });
129 }
130
131 function fetchVimInfo() {
132     var vimQueryUri = 'http://localhost:8080/openoapi/extsys/v1/vims';
133     return $.ajax({
134         type: "GET",
135         url: vimQueryUri
136     });
137 }
138
139 function translateToTemplateParameters(inputs) {
140     var inputParameters = [];
141     var i;
142     for (i = 0; i < inputs.length; i += 1) {
143         inputParameters[i] = {
144             name: inputs[i].name,
145             type: inputs[i].type,
146             description: inputs[i].description,
147             defaultValue: inputs[i].defaultValue,
148             required: inputs[i].required,
149             id: 'parameter_' + i,
150             value: inputs[i].defaultValue
151         };
152     }
153     return {name: $("#svcTempl").val(), parameters: inputParameters};
154 }
155
156 function translateToVimInfo(vims) {
157     var result = [];
158     var i;
159     for (i = 0; i < vims.length; i += 1) {
160         var option = '<option value="' + vims[i].vimId + '">' + vims[i].name + '</option>';
161         result[i] = {
162             vimId: vims[i].vimId,
163             vimName: vims[i].name
164         }
165     }
166     return result;
167 }
168
169 function transfromToComponents(parameters, vims) {
170     var components = '';
171     var i;
172     for (i = 0; i < parameters.length; i += 1) {
173         var component = '<div class="form-group">' +
174             '<label class="col-sm-3 control-label">' +
175             '<span>' + parameters[i].description + '</span>' + generateRequiredLabel(parameters[i]) +
176             '</label>' +
177             '<div class="col-sm-7">' +
178             '<input type="text" id="' + parameters[i].id + '" name="parameter description" class="form-control" placeholder="' +
179             parameters[i].description + '" value="' + parameters[i].value + '" />' +
180             '</div></div>';
181         components = components + component;
182     }
183     components = components + generateLocationComponent(vims);
184     return components;
185 }
186
187 function generateRequiredLabel(parameter) {
188     var requiredLabel = '';
189     if (parameter.required === 'true') {
190         requiredLabel = '<span class="required">*</span>';
191     }
192     return requiredLabel;
193 }
194
195 function generateLocationComponent(vims) {
196     var component = '<div class="form-group">' +
197         '<label class="col-sm-3 control-label">' +
198         '<span>Location</span>' +
199         '<span class="required">*</span>' +
200         '</label>' +
201         '<div class="col-sm-7">' +
202         '<select class="form-control" style ="padding-top: 0px;padding-bottom: 0px;"' +
203         ' id="vim_location" name="vim_location">' +
204         transformToOptions(vims) +
205         '</select></div></div>';
206     return component;
207 }
208
209 function transformToOptions(vims) {
210     var options = '';
211     var i;
212     for (i = 0; i < vims.length; i += 1) {
213         var option = '<option value="' + vims[i].vimId + '">' + vims[i].vimName + '</option>';
214         options = options + option;
215     }
216     return options;
217 }
218
219 function createGsoServiceInstance(gatewayService, serviceInstance) {
220     serviceInstance.serviceParameters.location = serviceInstance.vimLocation;
221     var gsoLcmUri = '/openoapi/lifecyclemgr/v1/services';
222     var parameter = {
223         'name': serviceInstance.serviceName,
224         'description': serviceInstance.serviceDescription,
225         'serviceDefId': serviceTemplate.gsarId,
226         'templatedId': serviceInstance.serviceTemplateId,
227         'templateName': serviceTemplate.templateName,
228         'getewayUri': gsoLcmUri,
229         'parameters': serviceInstance.serviceParameters
230     };
231     var serviceInstanceId;
232     $.ajax({
233         type: "POST",
234         async: false,
235         url: gatewayService,
236         contentType: "application/json",
237         dataType: "json",
238         data: JSON.stringify(parameter),
239         success: function (jsonResp) {
240             if (jsonResp.result.errorCode != '200') {
241                 alert("Create service instance Error!");
242                 return;
243             }
244             serviceInstanceId = jsonResp.serviceId;
245         },
246         error: function (xhr, ajaxOptions, thrownError) {
247             alert("Error on page : " + xhr.responseText);
248         }
249     });
250     return serviceInstanceId;
251 }
252
253 function createNfvoServiceInstance(gatewayService, serviceInstance) {
254     var nfvoLcmNsUrl = '/openoapi/nslcm/v1.0/ns';
255     serviceInstance.serviceParameters.location = serviceInstance.vimLocation;
256     createServiceInstance(gatewayService, nfvoLcmNsUrl, serviceInstance);
257 }
258
259 function createServiceInstance(gatewayService, gatewayUri, serviceInstance) {
260     var nsInstanceId = createNetworkService(gatewayService, gatewayUri, serviceInstance);
261     if (nsInstanceId === undefined) {
262         return;
263     }
264     instantiateNetworkService(gatewayUri, nsInstanceId, serviceInstance);
265 }
266
267 function createNetworkService(gatewayService, gatewayUri, serviceInstance) {
268     var parameter = {
269         'nsdId': serviceInstance.serviceTemplateId,
270         'nsName': serviceInstance.serviceName,
271         'description': serviceInstance.serviceDescription,
272         'gatewayUri': gatewayUri
273     };
274     var nsInstanceId;
275     $.ajax({
276         type: "POST",
277         async: false,
278         url: gatewayService,
279         contentType: "application/json",
280         dataType: "json",
281         data: JSON.stringify(parameter),
282         success: function (jsonResp) {
283             nsInstanceId = jsonResp.nsInstanceId;
284         },
285         error: function (xhr, ajaxOptions, thrownError) {
286             alert("Error on page : " + xhr.responseText);
287         }
288     });
289     return nsInstanceId;
290 }
291
292 function instantiateNetworkService(gatewayService, nsInstanceId, serviceInstance) {
293     var initNsUrl = gatewayUri + '/' + nsInstanceId + '/Instantiate'
294     var parameter = {
295         'gatewayUri': initNsUrl,
296         'nsInstanceId': nsInstanceId,
297         'additionalParamForNs': serviceInstance.serviceParameters
298     };
299     var result = false;
300     $.ajax({
301         type: "POST",
302         async: false,
303         url: gatewayService,
304         contentType: "application/json",
305         dataType: "json",
306         data: JSON.stringify(parameter),
307         success: function (jsonResp) {
308             result = true;
309         },
310         error: function (xhr, ajaxOptions, thrownError) {
311             alert("Error on page : " + xhr.responseText);
312         }
313     });
314     return result;
315 }
316
317 function createSdnoServiceInstance(gatewayService, serviceInstance) {
318     var sdnoLcmNsUrl = '/openoapi/sdnonslcm/v1.0/ns';
319     createServiceInstance(gatewayService, sdnoLcmNsUrl, serviceInstance);
320 }
321
322 function updateTable(serviceInstance) {
323     appendOenRow();
324     addDeleteEventRegistration();
325 }
326
327 function appendOenRow() {
328     var index = service_instance_insert_index;
329     var creator = '';
330     $('#sai').append('<tr id="service_instance_' + index + '"></tr>');
331     $("#service_instance_" + index).html('<td><div class="DataTables_sort_wrapper openo-ellipsis "><span id="service_name" class="openo-table-th-sorticon overflow_elip  leftHeaderAlign  openo-table-disable-element ">' + serviceInstance.serviceName + '</span></td>' +
332         '<td><span class="openo-table-th-sorticon overflow_elip  leftHeaderAlign  openo-table-disable-element ">' + serviceInstance.templateName + '</span></td>' +
333         '<td class="service_template_id"><span class="openo-table-th-sorticon overflow_elip  leftHeaderAlign  openo-table-disable-element ">' + serviceInstance.serviceTemplateId + '</span><input type="hidden" value="' + serviceInstance.serviceInstanceId + '"/></td>' +
334         '<td><span class="openo-table-th-sorticon overflow_elip  leftHeaderAlign  openo-table-disable-element ">' + formatDate(new Date()) + '</span></td>' +
335         '<td><span class="openo-table-th-sorticon overflow_elip  leftHeaderAlign  openo-table-disable-element ">' + creator + '</span></td>' +
336         '<td><button class="data_delete_action"><img id="delete_action" class="openo-table-th-sorticon overflow_elip  leftHeaderAlign  openo-table-disable-element " src="images/delete.png"></img></button></td>');
337     service_instance_insert_index += 1;
338 }
339
340 function formatDate(date) {
341     var year = date.getFullYear();
342     var month = date.getMonth() + 1;
343     var day = date.getDate();
344     var hh = date.getHours();
345     var mm = date.getMinutes();
346     var ss = date.getSeconds();
347     return year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + ss;
348 }
349
350 function addDeleteEventRegistration() {
351     $(".data_delete_action").click(function (event) {
352         var trElement = $(this).parents("tr")[0];
353         var tdElement = $(trElement).children("td.service_template_id")[0];
354         var spanElement = $(tdElement).children("span")[0];
355         var templateId = $(spanElement).text();
356         var inputElement = $(tdElement).children("input")[0];
357         var instanceId = $(inputElement).val();
358         var result = deleteServiceInstance(templateId, instanceId);
359         if (result) {
360             trElement.remove();
361             alert("Service instance deleted successfully!");
362         }
363     });
364 }
365
366 function deleteServiceInstance(templateId, instanceId) {
367     var serviceTemplate = fetchServiceTemplateBy(templateId);
368     if (serviceTemplate === undefined) {
369         return;
370     }
371     var gatewayService = '/openoapi/servicegateway/v1/services';
372     var result = false;
373     if (serviceTemplate.csarType === 'GSAR') {
374         result = deleteGsoServiceInstance(gatewayService, instanceId);
375     } else if (serviceTemplate.csarType === 'NSAR' || serviceTemplate.csarType === 'NFAR') {
376         result = deleteNfvoServiceInstance(gatewayService, instanceId);
377     } else if (serviceTemplate.csarType === 'SSAR') {
378         result = deleteSdnoServiceInstance(gatewayService, instanceId);
379     }
380     return result;
381 }
382
383 function deleteGsoServiceInstance(gatewayService, instanceId) {
384     var gsoLcmUrl = '/openoapi/lifecyclemgr/v1/services/' + instanceId;
385     var operation = 'DELETE';
386     return sendDeleteRequest(operation, gatewayService, gsoLcmUrl);
387 }
388
389 function deleteNfvoServiceInstance(gatewayService, instanceId) {
390     var nfvoNsUrl = '/openoapi/nslcm/v1.0/ns/' + instanceId;
391     var nfvoNsTerminateUrl = nfvoNsUrl + '/terminate';
392     var terminateParameter = {
393         'nsInstanceId': instanceId,
394         'terminationType': "graceful",
395         'gracefulTerminationTimeout': "60",
396         'operation': "POST",
397         'gatewayUri': nfvoNsTerminateUrl
398     };
399     var result = sendRequest(gatewayService, terminateParameter);
400     if (result) {
401         var serviceParameter = {
402             'operation': "DELETE",
403             'gatewayUri': nfvoNsUrl
404         };
405         result = sendRequest(gatewayService, serviceParameter);
406     }
407     return result;
408 }
409
410 function deleteSdnoServiceInstance(gatewayService, instanceId) {
411     var sdnoNsUrl = '/openoapi/sdnonslcm/v1.0/ns/' + instanceId;
412     var sdnoNsTerminateUrl = sdnoNsUrl + '/terminate';
413     var terminateParameter = {
414         'nsInstanceId': instanceId,
415         'terminationType': "graceful",
416         'gracefulTerminationTimeout': "60",
417         'operation': "POST",
418         'gatewayUri': sdnoNsTerminateUrl
419     };
420     var result = sendDeleteRequest(gatewayService, terminateParameter);
421     if (result) {
422         var serviceParameter = {
423             'operation': "DELETE",
424             'gatewayUri': sdnoNsUrl
425         };
426         result = sendDeleteRequest(gatewayService, serviceParameter);
427     }
428     return result;
429 }
430
431 function sendDeleteRequest(gatewayService, parameter) {
432     var result = false;
433     $.ajax({
434         type: "DELETE",
435         async: false,
436         url: gatewayService,
437         contentType: "application/json",
438         dataType: "json",
439         data: JSON.stringify(parameter),
440         success: function (jsonResp) {
441             result = true;
442         },
443         error: function (xhr, ajaxOptions, thrownError) {
444             alert("Error on page : " + xhr.responseText);
445         }
446     });
447     return result;
448 }