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