diff options
3 files changed, 118 insertions, 21 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogic.java index bd29e9ab81..bdcc67c744 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogic.java @@ -27,6 +27,7 @@ import com.google.common.base.Strings; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import fj.data.Either; +import java.util.Comparator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.collections4.ListUtils; @@ -115,6 +116,7 @@ import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation; import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder; import org.openecomp.sdc.be.model.operations.utils.ComponentValidationUtils; +import org.openecomp.sdc.be.plugins.ServiceCreationPlugin; import org.openecomp.sdc.tosca.datatypes.ToscaFunctions; import org.openecomp.sdc.be.resources.data.ComponentInstanceData; import org.openecomp.sdc.be.resources.data.ComponentMetadataData; @@ -198,6 +200,7 @@ public class ServiceBusinessLogic extends ComponentBusinessLogic { private final NodeFilterValidator serviceFilterValidator; private ServiceTypeValidator serviceTypeValidator; + private List<ServiceCreationPlugin> serviceCreationPluginList; @Autowired public void setServiceTypeValidator(ServiceTypeValidator serviceTypeValidator) { @@ -887,6 +890,7 @@ public class ServiceBusinessLogic extends ComponentBusinessLogic { createServiceApiArtifactsData(service, user); setToscaArtifactsPlaceHolders(service, user); generateAndAddInputsFromGenericTypeProperties(service, fetchAndSetDerivedFromGenericType(service)); + beforeCreate(service); Either<Service, StorageOperationStatus> dataModelResponse = toscaOperationFacade.createToscaComponent(service); @@ -909,6 +913,22 @@ public class ServiceBusinessLogic extends ComponentBusinessLogic { } } + private void beforeCreate(final Service service) { + if (CollectionUtils.isEmpty(serviceCreationPluginList)) { + return; + } + serviceCreationPluginList.stream() + .sorted(Comparator.comparingInt(ServiceCreationPlugin::getOrder)) + .forEach(serviceCreationPlugin -> { + try { + serviceCreationPlugin.beforeCreate(service); + } catch (final Exception e) { + log.error("An error has occurred while running the serviceCreationPlugin '{}'", + serviceCreationPlugin.getClass(), e); + } + }); + } + @SuppressWarnings("unchecked") private void createServiceApiArtifactsData(Service service, User user) { // create mandatory artifacts @@ -2735,7 +2755,8 @@ public class ServiceBusinessLogic extends ComponentBusinessLogic { return Either.left(serviceFilterResult); } - - - + @Autowired(required = false) + public void setServiceCreationPluginList(List<ServiceCreationPlugin> serviceCreationPluginList) { + this.serviceCreationPluginList = serviceCreationPluginList; + } } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/plugins/ServiceCreationPlugin.java b/catalog-be/src/main/java/org/openecomp/sdc/be/plugins/ServiceCreationPlugin.java new file mode 100644 index 0000000000..4981a33d26 --- /dev/null +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/plugins/ServiceCreationPlugin.java @@ -0,0 +1,43 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2020 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.sdc.be.plugins; + +import org.openecomp.sdc.be.model.Service; + +/** + * Plugin to the Service Component creation logic + */ +public interface ServiceCreationPlugin { + + /** + * This method is called before the creation of the Service. + * + * @param service the service that is being created + */ + void beforeCreate(final Service service); + + /** + * Defines the order of execution of the plugin. + * + * @return a order + */ + int getOrder(); + +} diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogicTest.java index 88ab995be9..7fc92fb362 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogicTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogicTest.java @@ -20,9 +20,26 @@ package org.openecomp.sdc.be.components.impl; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.when; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; import fj.data.Either; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.commons.lang3.tuple.ImmutablePair; import org.junit.Assert; import org.junit.Test; @@ -43,6 +60,7 @@ import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.Service; import org.openecomp.sdc.be.model.category.CategoryDefinition; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; +import org.openecomp.sdc.be.plugins.ServiceCreationPlugin; import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum; import org.openecomp.sdc.be.resources.data.auditing.DistributionDeployEvent; import org.openecomp.sdc.be.resources.data.auditing.ResourceAdminEvent; @@ -52,24 +70,6 @@ import org.openecomp.sdc.common.util.ValidationUtils; import org.openecomp.sdc.exception.ResponseFormat; import org.springframework.http.HttpStatus; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.when; - public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup { private final static String DEFAULT_ICON = "defaulticon"; @@ -102,6 +102,39 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup } assertEqualsServiceObject(createServiceObject(true), createResponse.left().value()); } + + @Test + public void testServiceCreationPluginCall() { + final Service service = createServiceObject(false); + when(genericTypeBusinessLogic.fetchDerivedFromGenericType(service)).thenReturn(Either.left(genericService)); + final List<ServiceCreationPlugin> serviceCreationPlugins = new ArrayList<>(); + serviceCreationPlugins.add(new ServiceCreationPlugin() { + @Override + public void beforeCreate(Service service) { + //do nothing + } + + @Override + public int getOrder() { + return 0; + } + }); + serviceCreationPlugins.add(new ServiceCreationPlugin() { + @Override + public void beforeCreate(Service service) { + throw new RuntimeException(); + } + + @Override + public int getOrder() { + return 0; + } + }); + bl.setServiceCreationPluginList(serviceCreationPlugins); + final Either<Service, ResponseFormat> createResponse = bl.createService(service, user); + assertTrue(createResponse.isLeft()); + } + @Test public void testHappyScenarioCRNullProjectCode() { Service service = createServiceObject(false); |