blob: fa2d4695ae0e443487f879e80e6bd8460bfa3068 [file] [log] [blame]
/*
* Copyright © 2016-2017 European Support Limited
*
* 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.
*/
import RestAPIUtil from 'nfvo-utils/RestAPIUtil.js';
import showFileSaveDialog from 'nfvo-utils/ShowFileSaveDialog.js';
import i18n from 'nfvo-utils/i18n/i18n.js';
import isEqual from 'lodash/isEqual.js';
import cloneDeep from 'lodash/cloneDeep.js';
import {actionTypes as modalActionTypes} from 'nfvo-components/modal/GlobalModalConstants.js';
import {modalContentMapper} from 'sdc-app/common/modal/ModalContentMapper.js';
import {actionTypes as softwareProductsActionTypes} from '../onboarding/softwareProduct/SoftwareProductConstants.js';
import {actionTypes as HeatSetupActions} from '../onboarding/softwareProduct/attachments/setup/HeatSetupConstants.js';
const options = {
headers: {
USER_ID: 'validationOnlyVspUser'
}
};
function fetchVspIdAndVersion() {
let vspId = sessionStorage.getItem('validationAppVspId');
let versionId = sessionStorage.getItem('validationAppVersionId');
if (vspId) {
return Promise.resolve({value: vspId, versionId});
}else {
return RestAPIUtil.fetch('/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/validation-vsp', options)
.then(response => {
sessionStorage.setItem('validationAppVspId', response.itemId);
sessionStorage.setItem('validationAppVersionId', response.version.id);
return Promise.resolve({value: response.itemId, versionId: response.version.id});
});
}
}
function uploadFile(formData) {
return fetchVspIdAndVersion()
.then(response => {
return RestAPIUtil.post(`/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/${response.value}/versions/${response.versionId}/orchestration-template-candidate`, formData, options);
});
}
function loadSoftwareProductHeatCandidate(dispatch){
return fetchVspIdAndVersion()
.then(response => {
return RestAPIUtil.fetch(`/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/${response.value}/versions/${response.versionId}/orchestration-template-candidate/manifest`, options)
.then(response => dispatch({
type: HeatSetupActions.MANIFEST_LOADED,
response
}));
});
}
function updateHeatCandidate(dispatch, heatCandidate) {
return fetchVspIdAndVersion()
.then(response => {
return RestAPIUtil.put(`/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/${response.value}/versions/${response.versionId}/orchestration-template-candidate/manifest`,
heatCandidate.heatData, options)
.then(null, error => {
dispatch({
type: modalActionTypes.GLOBAL_MODAL_ERROR,
data: {
title: i18n('Save Failed'),
modalComponentName: modalContentMapper.SUMBIT_ERROR_RESPONSE,
modalComponentProps: {
validationResponse: error.responseJSON
},
cancelButtonText: i18n('Ok')
}
});
return Promise.reject(error);
});
});
}
function fetchSoftwareProduct() {
return fetchVspIdAndVersion()
.then(response => {
return RestAPIUtil.fetch(`/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/${response.value}/versions/${response.versionId}`, options);
});
}
function downloadHeatFile() {
return fetchVspIdAndVersion()
.then(response => {
RestAPIUtil.fetch(`/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/${response.value}/versions/${response.versionId}/orchestration-template-candidate`, {
...options,
dataType: 'binary'
})
.done((response) => showFileSaveDialog({
blob: response.blob,
headers: response.headers,
defaultFilename: 'HEAT_file.zip',
addTimestamp: true
}));
});
}
function processAndValidateHeatCandidate(dispatch) {
return fetchVspIdAndVersion()
.then(response => {
return RestAPIUtil.put(`/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/${response.value}/versions/${response.versionId}/orchestration-template-candidate/process`, {}, options)
.then(response => {
if (response.status === 'Success') {
fetchSoftwareProduct().then(response => {
dispatch({
type: softwareProductsActionTypes.SOFTWARE_PRODUCT_LOADED,
response
});
});
}
});
});
}
const UploadScreenActionHelper = {
uploadFile(dispatch, formData) {
return Promise.resolve()
.then(() => uploadFile(formData))
.then(response => {
dispatch({
type: softwareProductsActionTypes.SOFTWARE_PRODUCT_LOADED,
response
});
dispatch({
type: HeatSetupActions.FILL_HEAT_SETUP_CACHE,
payload:{}
});
loadSoftwareProductHeatCandidate(dispatch);
})
.catch(error => {
dispatch({
type: modalActionTypes.GLOBAL_MODAL_ERROR,
data: {
title: i18n('File Upload Failed'),
msg: error.responseJSON.message,
cancelButtonText: i18n('Ok')
}
});
});
},
processAndValidateHeat(dispatch, heatData, heatDataCache){
return isEqual(heatData, heatDataCache) ? Promise.resolve() :
updateHeatCandidate(dispatch, heatData)
.then(() => processAndValidateHeatCandidate(dispatch))
.then(() => dispatch({type: HeatSetupActions.FILL_HEAT_SETUP_CACHE, payload: cloneDeep(heatData)}));
},
downloadHeatFile(){
return downloadHeatFile();
},
};
export default UploadScreenActionHelper;