aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImpl.java')
-rw-r--r--openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImpl.java359
1 files changed, 359 insertions, 0 deletions
diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImpl.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImpl.java
new file mode 100644
index 0000000000..e180138119
--- /dev/null
+++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImpl.java
@@ -0,0 +1,359 @@
+package org.openecomp.sdc.vendorsoftwareproduct.impl;
+
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCode;
+import org.openecomp.sdc.datatypes.error.ErrorLevel;
+import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
+import org.openecomp.sdc.logging.types.LoggerConstants;
+import org.openecomp.sdc.logging.types.LoggerErrorCode;
+import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
+import org.openecomp.sdc.vendorsoftwareproduct.ImageManager;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.ImageErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.errors.NotSupportedHeatOnboardMethodErrorBuilder;
+import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
+import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
+import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
+import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ImageFormat;
+import org.openecomp.sdc.vendorsoftwareproduct.types.questionnaire.component.image.ImageDetails;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.ImageCompositionSchemaInput;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
+import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateInput;
+import org.openecomp.sdc.vendorsoftwareproduct.utils.VendorSoftwareProductUtils;
+import org.openecomp.sdc.versioning.VersioningUtil;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.types.VersionableEntityAction;
+
+import java.util.Collection;
+
+public class ImageManagerImpl implements ImageManager {
+ private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+ private VendorSoftwareProductInfoDao vspInfoDao;
+ private ImageDao imageDao;
+ private CompositionEntityDataManager compositionEntityDataManager;
+
+ public ImageManagerImpl(
+ VendorSoftwareProductInfoDao vspInfoDao,
+ ImageDao imageDao,
+ CompositionEntityDataManager compositionEntityDataManager
+
+ ) {
+
+ this.vspInfoDao = vspInfoDao;
+ this.imageDao = imageDao;
+ this.compositionEntityDataManager = compositionEntityDataManager;
+
+ }
+
+ @Override
+ public ImageEntity createImage(ImageEntity imageEntity, String user) {
+ /*Version activeVersion = getVersionInfo(imageEntity.getVspId(),
+ VersionableEntityAction.Write, user).getActiveVersion();
+
+ imageEntity.setVersion(activeVersion);*/
+ if (!vspInfoDao.isManual(imageEntity.getVspId(), imageEntity.getVersion())) {
+
+ ErrorCode errorCode = NotSupportedHeatOnboardMethodErrorBuilder
+ .getAddImageNotSupportedHeatOnboardMethodErrorBuilder();
+
+ MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+ LoggerTragetServiceName.CREATE_IMAGE, ErrorLevel.ERROR.name(),
+ errorCode.id(), errorCode.message());
+
+ throw new CoreException(errorCode);
+ }
+
+ Collection<ImageEntity> vfcImageList = listImages(imageEntity.getVspId() ,
+ imageEntity.getVersion(), imageEntity.getComponentId());
+ validateVfcImage(imageEntity, vfcImageList);
+ compositionEntityDataManager.createImage(imageEntity);
+ return imageEntity;
+ }
+
+ @Override
+ public Collection<ImageEntity> listImages(String vspId, Version version, String componentId,
+ String user) {
+ mdcDataDebugMessage.debugEntryMessage("VSP id", vspId);
+ Collection<ImageEntity> imageEntities = listImages(vspId, version, componentId);
+
+ mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
+
+ return imageEntities;
+ }
+
+ private Collection<ImageEntity> listImages(String vspId, Version version, String componentId) {
+ return imageDao.list(new ImageEntity(vspId, version, componentId, null));
+ }
+
+ @Override
+ public CompositionEntityResponse getImageSchema(String vspId, String user) {
+ mdcDataDebugMessage.debugEntryMessage("VSP id, image id", vspId);
+
+ CompositionEntityResponse<Image> response = new CompositionEntityResponse<>();
+ ImageCompositionSchemaInput inputSchema = new ImageCompositionSchemaInput();
+ Image image = new Image();
+ //image.setFormat(ImageFormat.qcow2.name());
+ inputSchema.setImage(image);
+ response.setSchema(getImageCompositionSchema(inputSchema));
+
+ mdcDataDebugMessage.debugExitMessage("VSP id, image id", vspId);
+ return response;
+ }
+
+ @Override
+ public CompositionEntityResponse<Image> getImage(String vspId, Version version, String
+ componentId, String imageId, String user) {
+
+ mdcDataDebugMessage.debugEntryMessage("VSP id, componentId, image id", vspId, componentId,
+ imageId);
+
+ /*version = VersioningUtil
+ .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));*/
+
+ ImageEntity imageEntity = getImageEntity(vspId, version, componentId, imageId);
+
+ Image image = imageEntity.getImageCompositionData();
+ //Set format to default value in order to handle FTL validation when image format is null
+ /*if(image.getFormat() == null)
+ image.setFormat(ImageFormat.qcow2.name());*/
+
+ ImageCompositionSchemaInput schemaInput = new ImageCompositionSchemaInput();
+ schemaInput.setImage(image);
+
+ CompositionEntityResponse<Image> response = new CompositionEntityResponse<>();
+ response.setId(imageId);
+ response.setData(image);
+ response.setSchema(getImageCompositionSchema(schemaInput));
+
+ mdcDataDebugMessage.debugExitMessage("VSP id, componentId, image id", vspId, componentId,
+ imageId);
+
+ return response;
+ }
+
+ @Override
+ public QuestionnaireResponse getImageQuestionnaire(String vspId, Version version, String
+ componentId, String imageId, String user) {
+ mdcDataDebugMessage.debugEntryMessage("VSP id", vspId);
+
+ /*version = VersioningUtil
+ .resolveVersion(version, getVersionInfo(vspId, VersionableEntityAction.Read, user));
+ validateComponentId(vspId,version,componentId);*/
+ QuestionnaireResponse questionnaireResponse = new QuestionnaireResponse();
+ //validateComponentId(vspId,version,componentId);
+
+ ImageEntity retrieved = imageDao.getQuestionnaireData(vspId, version, componentId, imageId);
+ VersioningUtil.validateEntityExistence(retrieved, new ImageEntity(vspId, version, componentId,
+ imageId), ComponentEntity.ENTITY_TYPE);
+ questionnaireResponse.setData(retrieved.getQuestionnaireData());
+ questionnaireResponse.setSchema(getImageQuestionnaireSchema(null));
+
+ mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
+
+ return questionnaireResponse;
+ }
+
+ @Override
+ public void deleteImage(String vspId, Version version, String componentId, String imageId, String
+ user) {
+ mdcDataDebugMessage
+ .debugEntryMessage("VSP id, component id", vspId, componentId, imageId);
+
+ /*Version activeVersion =
+ getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+ ComponentEntity component = getComponent(vspId, activeVersion, componentId);*/
+ ImageEntity imageEntity = getImageEntity(vspId, version, componentId, imageId);
+ if (!vspInfoDao.isManual(vspId, version)) {
+ final ErrorCode deleteImageErrorBuilder =
+ NotSupportedHeatOnboardMethodErrorBuilder
+ .getDelImageNotSupportedHeatOnboardMethodErrorBuilder();
+ MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+ LoggerTragetServiceName.DELETE_IMAGE, ErrorLevel.ERROR.name(),
+ LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
+ deleteImageErrorBuilder.message());
+ throw new CoreException(deleteImageErrorBuilder);
+ }
+ if (imageEntity != null) {
+ imageDao.delete(new ImageEntity(vspId, version, componentId, imageId));
+ }
+ mdcDataDebugMessage
+ .debugExitMessage("VSP id, component id", vspId, componentId, imageId);
+ }
+
+ private void validateHeatVspImageUpdate(String name, String value, String retrivedValue) {
+
+ if(value != null && !value.equals(retrivedValue)) {
+
+ final ErrorCode updateHeatImageErrorBuilder =
+ ImageErrorBuilder.getImageHeatReadOnlyErrorBuilder(name);
+
+ MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+ LoggerTragetServiceName.UPDATE_IMAGE, ErrorLevel.ERROR.name(),
+ LoggerErrorCode.PERMISSION_ERROR.getErrorCode(),
+ updateHeatImageErrorBuilder.message());
+ throw new CoreException(updateHeatImageErrorBuilder);
+ }
+ }
+
+ @Override
+ public CompositionEntityValidationData updateImage(ImageEntity image, String user) {
+ mdcDataDebugMessage
+ .debugEntryMessage("VSP id, component id", image.getVspId(), image.getComponentId(),
+ image.getId());
+
+ /*Version activeVersion =
+ getVersionInfo(image.getVspId(), VersionableEntityAction.Write, user).getActiveVersion();
+ image.setVersion(activeVersion);*/
+
+ ImageEntity retrieved = getImageEntity(image.getVspId(), image.getVersion(), image.getComponentId(),
+ image.getId());
+
+ if(!vspInfoDao.isManual(image.getVspId(), image.getVersion())) {
+ final Image imageCompositionData = image.getImageCompositionData();
+ final String fileName = imageCompositionData.getFileName();
+ //final String format = imageCompositionData.getFormat();
+ validateHeatVspImageUpdate("fileName", fileName, retrieved.getImageCompositionData()
+ .getFileName());
+ /*validateHeatVspImageUpdate("format", format, retrieved.getImageCompositionData()
+ .getFormat());*/
+ }
+
+ Collection<ImageEntity> vfcImageList = listImages(image.getVspId() ,
+ image.getVersion(), image.getComponentId());
+
+ //Set to null so that retrieved object is equal to one in list and gets removed.
+ retrieved.setQuestionnaireData(null);
+ vfcImageList.remove(retrieved);
+ validateVfcImage(image, vfcImageList);
+
+ //Set format to default value in order to handle FTL validation when image format is null
+ /*if(image.getImageCompositionData().getFormat() == null)
+ image.getImageCompositionData().setFormat(ImageFormat.qcow2.name());*/
+
+ ImageCompositionSchemaInput schemaInput = new ImageCompositionSchemaInput();
+ schemaInput.setImage(image.getImageCompositionData());
+
+ CompositionEntityValidationData validationData = compositionEntityDataManager
+ .validateEntity(image, SchemaTemplateContext.composition, schemaInput);
+ if (CollectionUtils.isEmpty(validationData.getErrors())) {
+ imageDao.update(image);
+ }
+
+ mdcDataDebugMessage
+ .debugExitMessage("VSP id, component id", image.getVspId(), image.getComponentId(),
+ image.getId());
+
+ return validationData;
+ }
+
+ @Override
+ public void updateImageQuestionnaire(String vspId, Version version, String componentId, String
+ imageId, String questionnaireData, String user) {
+ mdcDataDebugMessage.debugEntryMessage("VSP id, component id, imageId", vspId, componentId,
+ imageId);
+
+ getImageEntity(vspId, version, componentId, imageId);
+
+ /*Version activeVersion =
+ getVersionInfo(vspId, VersionableEntityAction.Write, user).getActiveVersion();
+
+ getComponent(vspId, activeVersion, componentId);*/
+
+ final ImageDetails image = JsonUtil.json2Object(questionnaireData, ImageDetails.class);
+ final String format = image.getFormat();
+ try {
+ if (format != null) {
+ final ImageFormat imageFormat = ImageFormat.valueOf(format);
+ }
+ } catch (IllegalArgumentException exception) {
+ ErrorCode errorCode = ImageErrorBuilder.getInvalidImageFormatErrorBuilder();
+ MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+ LoggerTragetServiceName.UPDATE_IMAGE, ErrorLevel.ERROR.name(),
+ errorCode.id(), errorCode.message() );
+ throw new CoreException(errorCode);
+ }
+
+ //Validate Format is read only for HEAT Onboarding
+ if (!vspInfoDao.isManual(vspId, version)) {
+ final QuestionnaireResponse imageQuestionnaire = getImageQuestionnaire(vspId, version,
+ componentId, imageId, user);
+ final String data = imageQuestionnaire.getData();
+ if (data != null) {
+ String retrivedFormat = JsonUtil.json2Object(data, ImageDetails.class).getFormat();
+ validateHeatVspImageUpdate("format", format, retrivedFormat);
+ }
+ }
+
+ imageDao.updateQuestionnaireData(vspId, version, componentId, imageId, questionnaireData);
+ mdcDataDebugMessage.debugExitMessage("VSP id, component id, imageId", vspId, componentId,
+ imageId);
+ }
+
+ private ImageEntity getImageEntity(String vspId, Version version, String componentId,
+ String imageId) {
+ //validateComponentId(vspId,version,componentId);
+
+ ImageEntity imageEntity = imageDao.get(new ImageEntity(vspId, version, componentId, imageId));
+
+ VersioningUtil.validateEntityExistence(imageEntity, new ImageEntity(vspId, version, componentId,
+ imageId), VspDetails.ENTITY_TYPE);
+ return imageEntity;
+ }
+
+
+ private boolean isImageNameDuplicate(Collection<ImageEntity> images, String fileName) {
+ for (ImageEntity image : images) {
+ if (image.getImageCompositionData().getFileName().equalsIgnoreCase(fileName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void validateVfcImage(ImageEntity image, Collection<ImageEntity> vfcImageList) {
+ if (isImageNameDuplicate(vfcImageList,image.getImageCompositionData().getFileName())) {
+ ErrorCode errorCode = ImageErrorBuilder.getDuplicateImageNameErrorBuilder(image
+ .getImageCompositionData().getFileName(), image.getComponentId());
+
+ MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
+ LoggerTragetServiceName.CREATE_COMPONENT, ErrorLevel.ERROR.name(),
+ errorCode.id(),errorCode.message());
+
+ throw new CoreException(errorCode);
+ }
+ }
+
+ protected String getImageCompositionSchema(SchemaTemplateInput schemaInput) {
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+ mdcDataDebugMessage.debugExitMessage(null, null);
+ return SchemaGenerator
+ .generate(SchemaTemplateContext.composition, CompositionEntityType.image,
+ schemaInput);
+ }
+
+ protected String getImageQuestionnaireSchema(SchemaTemplateInput schemaInput) {
+ mdcDataDebugMessage.debugEntryMessage(null, null);
+
+ mdcDataDebugMessage.debugExitMessage(null, null);
+ return SchemaGenerator
+ .generate(SchemaTemplateContext.questionnaire, CompositionEntityType.image,
+ schemaInput);
+ }
+
+
+}