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