summaryrefslogtreecommitdiffstats
path: root/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest')
-rw-r--r--openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/exception/VendorLicenseModelExceptionSupplier.java87
-rw-r--r--openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java107
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);