blob: f5d9abd6d2e52a7fca9f59b150d2f125e35215a7 [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;