/* * 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;