diff options
Diffstat (limited to 'openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp')
2 files changed, 171 insertions, 23 deletions
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/exception/VendorLicenseModelExceptionSupplier.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/exception/VendorLicenseModelExceptionSupplier.java new file mode 100644 index 0000000000..330a2dd4d1 --- /dev/null +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/exception/VendorLicenseModelExceptionSupplier.java @@ -0,0 +1,87 @@ +/* + * - + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdcrests.vendorlicense.rest.exception; + +import static org.openecomp.sdc.vendorlicense.errors.VendorLicenseErrorCodes.VLM_IS_CERTIFIED_DELETE_ERROR; +import static org.openecomp.sdc.vendorlicense.errors.VendorLicenseErrorCodes.VLM_IS_IN_USE_DELETE_ERROR; + +import java.util.List; +import java.util.function.Supplier; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.openecomp.sdc.common.errors.CoreException; +import org.openecomp.sdc.common.errors.ErrorCode; +import org.openecomp.sdc.common.errors.ErrorCode.ErrorCodeBuilder; +import org.openecomp.sdc.vendorlicense.errors.VendorLicenseModelNotFoundErrorBuilder; + +/** + * Supplies exceptions happened for a Vendor License Model operation . + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class VendorLicenseModelExceptionSupplier { + + /** + * Provides a could not find Vendor License Model exception. + * + * @param vlmId the Vendor License Model id + * @return a Supplier for the exception + */ + public static Supplier<CoreException> couldNotFindVlm(final String vlmId) { + final ErrorCode errorCode = new VendorLicenseModelNotFoundErrorBuilder(vlmId).build(); + return () -> new CoreException((errorCode)); + } + + /** + * Provides a cannot delete used Vendor License Model exception. + * + * @param vmlId the Vendor License Model id + * @param vspNameList the list of VSP names that uses the VLM + * @return a Supplier for the exception + */ + public static Supplier<CoreException> cantDeleteUsedVlm(final String vmlId, final List<String> vspNameList) { + final String errorMsg = String.format( + "Vendor License Model '%s' is in use by %s Vendor Software Product(s) and cannot be deleted.", + vmlId, String.join(", ", vspNameList) + ); + final ErrorCode errorCode = new ErrorCodeBuilder() + .withId(VLM_IS_IN_USE_DELETE_ERROR) + .withMessage(errorMsg) + .build(); + return () -> new CoreException((errorCode)); + } + + /** + * Provides a cannot delete certified Vendor License Model exception. + * + * @param vmlId the Vendor License Model id + * @return a Supplier for the exception + */ + public static Supplier<CoreException> cantDeleteCertifiedVlm(final String vmlId) { + final String errorMsg = String.format("Vendor License Model '%s' has been certified and cannot be deleted.", vmlId); + final ErrorCode errorCode = new ErrorCodeBuilder() + .withId(VLM_IS_CERTIFIED_DELETE_ERROR) + .withMessage(errorMsg) + .build(); + return () -> new CoreException((errorCode)); + } + +} diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java index 0255b14753..f4e638c07b 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java @@ -23,10 +23,12 @@ import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERS import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_NAME; import static org.openecomp.sdcrests.vendorlicense.types.VendorLicenseModelActionRequestDto.VendorLicenseModelAction.Submit; +import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.function.Predicate; +import java.util.stream.Collectors; import javax.inject.Named; import javax.ws.rs.core.Response; import org.openecomp.core.dao.UniqueValueDaoFactory; @@ -35,8 +37,6 @@ import org.openecomp.sdc.activitylog.ActivityLogManager; import org.openecomp.sdc.activitylog.ActivityLogManagerFactory; import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity; import org.openecomp.sdc.activitylog.dao.type.ActivityType; -import org.openecomp.sdc.common.errors.CoreException; -import org.openecomp.sdc.common.errors.ErrorCode; import org.openecomp.sdc.common.errors.Messages; import org.openecomp.sdc.datatypes.model.ItemType; import org.openecomp.sdc.healing.factory.HealingManagerFactory; @@ -52,6 +52,9 @@ import org.openecomp.sdc.vendorlicense.VendorLicenseConstants; import org.openecomp.sdc.vendorlicense.VendorLicenseManager; import org.openecomp.sdc.vendorlicense.VendorLicenseManagerFactory; import org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity; +import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao; +import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDaoFactory; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails; import org.openecomp.sdc.versioning.AsdcItemManager; import org.openecomp.sdc.versioning.AsdcItemManagerFactory; import org.openecomp.sdc.versioning.VersioningManager; @@ -67,6 +70,7 @@ import org.openecomp.sdcrests.item.types.ItemCreationDto; import org.openecomp.sdcrests.item.types.ItemDto; import org.openecomp.sdcrests.item.types.VersionDto; import org.openecomp.sdcrests.vendorlicense.rest.VendorLicenseModels; +import org.openecomp.sdcrests.vendorlicense.rest.exception.VendorLicenseModelExceptionSupplier; import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapVendorLicenseModelEntityToDto; import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapVendorLicenseModelRequestDtoToVendorLicenseModelEntity; import org.openecomp.sdcrests.vendorlicense.types.VendorLicenseModelActionRequestDto; @@ -86,13 +90,55 @@ public class VendorLicenseModelsImpl implements VendorLicenseModels { private static final String SUBMIT_ITEM_ACTION = "Submit_Item"; private static final String SUBMIT_HEALED_VERSION_ERROR = "VLM Id %s: Error while submitting version %s created based on Certified version %s for healing purpose."; private static final Logger LOGGER = LoggerFactory.getLogger(VendorLicenseModelsImpl.class); - private PermissionsManager permissionsManager = PermissionsManagerFactory.getInstance().createInterface(); - private NotificationPropagationManager notifier = NotificationPropagationManagerFactory.getInstance().createInterface(); - private AsdcItemManager asdcItemManager = AsdcItemManagerFactory.getInstance().createInterface(); - private VersioningManager versioningManager = VersioningManagerFactory.getInstance().createInterface(); - private VendorLicenseManager vendorLicenseManager = VendorLicenseManagerFactory.getInstance().createInterface(); - private ActivityLogManager activityLogManager = ActivityLogManagerFactory.getInstance().createInterface(); - private UniqueValueUtil uniqueValueUtil = new UniqueValueUtil(UniqueValueDaoFactory.getInstance().createInterface()); + + private final PermissionsManager permissionsManager; + private final NotificationPropagationManager notifier; + private final AsdcItemManager asdcItemManager; + private final VersioningManager versioningManager; + private final VendorLicenseManager vendorLicenseManager; + private final ActivityLogManager activityLogManager; + private final UniqueValueUtil uniqueValueUtil; + private final VendorSoftwareProductInfoDao vendorSoftwareProductInfoDao; + + public VendorLicenseModelsImpl() { + this.permissionsManager = PermissionsManagerFactory.getInstance().createInterface(); + this.notifier = NotificationPropagationManagerFactory.getInstance().createInterface(); + this.asdcItemManager = AsdcItemManagerFactory.getInstance().createInterface(); + this.versioningManager = VersioningManagerFactory.getInstance().createInterface(); + this.vendorLicenseManager = VendorLicenseManagerFactory.getInstance().createInterface(); + this.activityLogManager = ActivityLogManagerFactory.getInstance().createInterface(); + this.uniqueValueUtil = new UniqueValueUtil(UniqueValueDaoFactory.getInstance().createInterface()); + this.vendorSoftwareProductInfoDao = VendorSoftwareProductInfoDaoFactory.getInstance().createInterface(); + } + + /** + * Test purpose constructor. + * @param permissionsManager the {@link PermissionsManager} instance + * @param notifier the {@link NotificationPropagationManager} instance + * @param asdcItemManager the {@link AsdcItemManager} instance + * @param versioningManager the {@link VersioningManager} instance + * @param vendorLicenseManager the {@link VendorLicenseManager} instance + * @param activityLogManager the {@link ActivityLogManager} instance + * @param uniqueValueUtil the {@link UniqueValueUtil} instance + * @param vendorSoftwareProductInfoDao the {@link VendorSoftwareProductInfoDao} instance + */ + VendorLicenseModelsImpl(final PermissionsManager permissionsManager, + final NotificationPropagationManager notifier, + final AsdcItemManager asdcItemManager, + final VersioningManager versioningManager, + final VendorLicenseManager vendorLicenseManager, + final ActivityLogManager activityLogManager, + final UniqueValueUtil uniqueValueUtil, + final VendorSoftwareProductInfoDao vendorSoftwareProductInfoDao) { + this.permissionsManager = permissionsManager; + this.notifier = notifier; + this.asdcItemManager = asdcItemManager; + this.versioningManager = versioningManager; + this.vendorLicenseManager = vendorLicenseManager; + this.activityLogManager = activityLogManager; + this.uniqueValueUtil = uniqueValueUtil; + this.vendorSoftwareProductInfoDao = vendorSoftwareProductInfoDao; + } @Override public Response listLicenseModels(String versionStatus, String itemStatus, String user) { @@ -158,21 +204,28 @@ public class VendorLicenseModelsImpl implements VendorLicenseModels { } @Override - public Response deleteLicenseModel(String vlmId, String user) { - Item vlm = asdcItemManager.get(vlmId); - if (!vlm.getType().equals(ItemType.vlm.name())) { - throw new CoreException((new ErrorCode.ErrorCodeBuilder().withMessage(String.format("Vlm with id %s does not exist.", vlmId)).build())); + public Response deleteLicenseModel(final String vlmId, final String user) { + final Item vlm = asdcItemManager.get(vlmId); + if (vlm == null || !ItemType.vlm.getName().equals(vlm.getType())) { + throw VendorLicenseModelExceptionSupplier.couldNotFindVlm(vlmId).get(); } - Integer certifiedVersionsCounter = vlm.getVersionStatusCounters().get(VersionStatus.Certified); - if (Objects.isNull(certifiedVersionsCounter) || certifiedVersionsCounter == 0) { - asdcItemManager.delete(vlm); - permissionsManager.deleteItemPermissions(vlmId); - uniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, vlm.getName()); - notifyUsers(vlmId, vlm.getName(), null, null, user, NotificationEventTypes.DELETE); - return Response.ok().build(); - } else { - return Response.status(Response.Status.FORBIDDEN).entity(new Exception(Messages.DELETE_VLM_ERROR.getErrorMessage())).build(); + + final List<String> vlmUsedByAnyVsp = findVspsUsingVlm(vlm.getId()); + if (!vlmUsedByAnyVsp.isEmpty()) { + throw VendorLicenseModelExceptionSupplier.cantDeleteUsedVlm(vlmId, vlmUsedByAnyVsp).get(); } + + final Integer certifiedVersionsCounter = vlm.getVersionStatusCounters().get(VersionStatus.Certified); + final boolean wasVlmAtLeastOnceCertified = certifiedVersionsCounter != null && certifiedVersionsCounter > 0; + if (wasVlmAtLeastOnceCertified) { + throw VendorLicenseModelExceptionSupplier.cantDeleteCertifiedVlm(vlmId).get(); + } + + asdcItemManager.delete(vlm); + permissionsManager.deleteItemPermissions(vlmId); + uniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, vlm.getName()); + notifyUsers(vlmId, vlm.getName(), null, null, user, NotificationEventTypes.DELETE); + return Response.ok().build(); } @Override @@ -189,6 +242,14 @@ public class VendorLicenseModelsImpl implements VendorLicenseModels { return Response.ok().build(); } + private List<String> findVspsUsingVlm(final String vlmId) { + final Collection<VspDetails> vspDetailsList = vendorSoftwareProductInfoDao.list(null); + return vspDetailsList.stream() + .filter(vspDetails -> vlmId.equals(vspDetails.getVendorId())) + .map(VspDetails::getName) + .collect(Collectors.toList()); + } + private void submit(String vlmId, Version version, String message, String user) { vendorLicenseManager.validate(vlmId, version); versioningManager.submit(vlmId, version, message); |