/*
* Copyright 2016-2017 ZTE Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var templateParameters = {
changed : true,
// the create params used for ui
paramJsonObj : {}
};
var lcmHandler = function() {
this._addOwnEvents();
};
lcmHandler.prototype = {
showOnboardSelection: false,
_addOwnEvents : function() {
$('#createService').click(function() {
console.log("create service...");
$('#createServiceDialog').modal();
});
$('#startToCreateService').click(this.okAction);
// $('.show-onboard').click(function () {
// this.showOnboard = !this.showOnboard;
// if(this.showOnboard) {
// document.getElementById("onboard").innerHTML = generateVnfNsOnboardDialog({});
// }else {
// document.getElementById("onboard").innerHTML = '';
// }
//
// });
$('.onboard-button').click(function () {
console.log("show vnf ns vims...");
document.getElementById("vnf-ns-vim-table").innerHTML = generateVnfNsOnboardDialog({});
$("#vnf-ns-onboard-dialog").modal();
});
},
okAction : function() {
if (!checkInputs('create', templateParameters.paramJsonObj)) {
return;
}
var sengMsgObj = collectCreateParamfromUI('', 'create', templateParameters.paramJsonObj);
var gatewayService = '/openoapi/servicegateway/v1/services';
$.when(createServiceInstance(sengMsgObj))
.then(function(response) {
if (response.status === 'finished') {
$.when(queryService()).then(function(serviceInstance){
$('#sai').bootstrapTable("append", serviceInstance);
});
$('#vmAppDialog').removeClass('in').css('display','none');
} else {
showErrorMessage('Create service failed',response);
}
});
}
};
function hideBasic() {
$("#basicInfoTab").hide();
initParameterTab();
$("#templateParameterTab").show();
}
function showBasic() {
$("#basicInfoTab").show();
$("#templateParameterTab").hide();
}
function hideService() {
console.log("hide service...");
$("#serviceTab").css({"margin-left":"1px","border-bottom-style":"solid", "border-color": "", "background-color":"#F2F2F2", "border-bottom-color": "#66B3FF"});
$("#service-table").hide();
$("#vnfNsTab").css({"border-bottom-style":"none","border-color": "#66B3FF","background-color":"#F2F2F2"});
$("#vnf-ns-onboard").show();
}
function showService() {
console.log("show service...");
$("#serviceTab").css({"margin-left":"1px","border-bottom-style":"none","border-color": "#66B3FF", "background-color":"#F2F2F2"});
$("#service-table").show();
$("#vnfNsTab").css({"border-bottom-style":"solid", "border-color": "", "background-color":"#F2F2F2", "border-bottom-color": "#66B3FF"});
$("#vnf-ns-onboard").hide();
}
function serviceTemplateChanged() {
templateParameters.changed = true;
}
/**
* init parameter tab
* @returns
*/
function initParameterTab() {
// Service template was not changed. Do not re-initiate the parameter tab.
if (!templateParameters.changed) {
return;
}
var templateId = $("#svcTempl").val();
if ('select' === templateId) {
document.getElementById("templateParameterTab").innerHTML = '';
return;
}
$.when(fetchCreateParameters(templateId))
.then(function(createParam) {
// set the create param object
templateParameters.paramJsonObj = createParam.parameters;
// convert the create param to UI.
var components = convertCreateParamsToUI('create', createParam.parameters);
document.getElementById("templateParameterTab").innerHTML = components;
templateParameters.changed = false;
});
}
/**
* generate the template to create parameters object
*
* @param templateId
* the template id
* @returns
*/
function fetchCreateParameters(templateId) {
//return $.getJSON("./conf/queryCreateParams.json");
var uri = '/openoapi/servicegateway/v1/createparameters/' + templateId;
return $.ajax({
type : "GET",
url : uri
});
}
/**
* convert the template params obj to html UI string
*
* @param identify the object identify, it should be '' when called
* @return the html component string
*/
function convertCreateParamsToUI(identify, createParam) {
var components = '';
// convert host to UI
if (undefined != createParam.domainHost && 'enum' === createParam.domainHost.type) {
components = components
+ generateParamComponent(createParam.nodeType, identify,
createParam.domainHost, false);
}
// convert own param to UI
createParam.additionalParamForNs
.forEach(function(param) {
components = components
+ generateParamComponent(createParam.nodeType,
identify, param, false);
});
// convert segments to UI
createParam.segments.forEach(function(segment) {
// each segment in a field set.
components = components + '
';
});
return components;
}
/**
* for each required parameter it could not be empty
* @param identify the identify of a segment
* @param createParam the create param object
* @returns the check result
*/
function checkInputs(identify, createParam) {
//check domain host
if (undefined != createParam.domainHost && 'enum' === createParam.domainHost.type) {
var value = collectParamValue(identify, createParam.domainHost);
if ('select' == value) {
var name = getParamLabel(createParam.nodeType, createParam.domainHost);
alert( name + ' is required.')
return false;
}
}
// check parameters
for(var i= 0; i < createParam.additionalParamForNs.length; i++){
var param = createParam.additionalParamForNs[i];
var value = collectParamValue(identify, param);
if(param.required && ('' === value || ('enum' == param.type && 'select' == value))){
// the param resource key is nodeType.paramName
var name = getParamLabel(createParam.nodeType, param);
alert(name + ' is required.')
return false;
}
}
// get segments param value from UI
var segmentcheckResult = true;
for(var i= 0; i < createParam.segments.length; i++){
var segment = createParam.segments[i];
// the identify for segment
var segmentIdentify = '' == identify ? segment.nodeTemplateName
: identify + '_' + segment.nodeTemplateName;
segmentcheckResult = checkInputs(segmentIdentify, segment);
if (!segmentcheckResult) {
break;
}
}
return segmentcheckResult;
}
/**
* convert the template params obj to html UI string
*
* @param identify the object identify, it should be different every time
* @return the html component string
*/
function collectCreateParamfromUI(parentHost,identify, createParam) {
// the create params used for create msg
var paramSentObj = {
domainHost:'',
nodeTemplateName:'',
nodeType:'',
segments:[],
additionalParamForNs:{}
};
// get the domain value
if (undefined != createParam.domainHost && 'enum' === createParam.domainHost.type) {
var domain = collectParamValue(identify, createParam.domainHost);
paramSentObj.domainHost = collectParamValue(identify, createParam.domainHost)
}
//if parent domainHost is not '' and local domain host is'', it should be setted as parent
if('' != parentHost && '' == paramSentObj.domainHost){
paramSentObj.domainHost = parentHost;
}
paramSentObj.nodeTemplateName = createParam.nodeTemplateName;
paramSentObj.nodeType = createParam.nodeType;
// get own param value from UI
createParam.additionalParamForNs.forEach(function(param) {
paramSentObj.additionalParamForNs[param.name] = collectParamValue(identify, param);
});
// get segments param value from UI
createParam.segments.forEach(function(segment) {
// the identify for segment
var segmentIdentify = '' == identify ? segment.nodeTemplateName
: identify + '_' + segment.nodeTemplateName;
var segmentObj = collectCreateParamfromUI(paramSentObj.domainHost, segmentIdentify, segment);
paramSentObj.segments.push(segmentObj);
});
return paramSentObj;
}
/**
* get a param value
* @param identify the identify of a segment
* @param param the param object
* @returns the value of the param
*/
function collectParamValue(identify, param) {
var value = $('#' + getParamId(identify, param)).val();
return value;
}
/**
* get the param id in ui
* @param identify
* @param param
* @returns
*/
function getParamId(identify, param) {
return '' ===identify ? param.name : identify + '_' + param.name;
}
/**
* get the resource string of a param.
* @param nodeType node type
* @param param param object
* @returns resource string
*/
function getParamLabel(nodeType, param) {
var name = $.i18n.prop(nodeType + '.' + param.name);
if (name.length === 0 || name.slice(0, 1) === '[') {
name = param.name;
}
return name;
}
/**
* convert combox component
*
* @param inputPara
* @param items
* @param stringReadOnly
* @returns
*/
function generateParamComponent(nodeType, identify, param, strReadOnly) {
// the param resource key is nodeType.paramName
var name = getParamLabel(nodeType, param);
var id = getParamId(identify,param);
var component = '';
if (param.type === 'string') {
component = '