diff --git a/api-project-component-v0/openapi/api-project-component-v0.yaml b/api-project-component-v0/openapi/api-project-component-v0.yaml index dcd3912..868e72e 100644 --- a/api-project-component-v0/openapi/api-project-component-v0.yaml +++ b/api-project-component-v0/openapi/api-project-component-v0.yaml @@ -12,14 +12,14 @@ servers: default: localhost:8080 description: Development environment tags: - - name: ProjectComponents + - name: Project Components description: API for managing project components paths: /projects/{projectId}/components/: post: tags: - - projectComponents + - Project Components summary: Create a component in a project operationId: createProjectComponent description: Retrieves information about a specific component @@ -61,7 +61,7 @@ paths: /projects/{projectId}/components/{componentId}: get: tags: - - projectComponents + - Project Components summary: Get component information operationId: getProjectComponent description: Retrieves information about a specific component diff --git a/api-project-component-v0/pom.xml b/api-project-component-v0/pom.xml index a3f50df..845c6d5 100644 --- a/api-project-component-v0/pom.xml +++ b/api-project-component-v0/pom.xml @@ -44,6 +44,12 @@ ${project.version} + + org.opendevstack.apiservice + external-service-marketplace + ${project.version} + + io.jsonwebtoken jjwt-api @@ -89,6 +95,7 @@ spring-boot-starter-test test + org.springframework.security spring-security-core diff --git a/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ComponentsResponseFactory.java b/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ComponentsResponseFactory.java index 7eb10ce..c3f876a 100644 --- a/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ComponentsResponseFactory.java +++ b/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ComponentsResponseFactory.java @@ -15,10 +15,10 @@ public static CreateComponentResponse error(String projectId) { return response; } - public static CreateComponentResponse entityCreated(String projectId, String componentName) { + public static CreateComponentResponse entityCreated(String projectId, String componentId) { CreateComponentResponse response = new CreateComponentResponse(); response.setErrorCode(HttpStatus.CREATED.value()); - response.setMessage(componentName + " component created successfully in project " + projectId); + response.setMessage(componentId + " component created successfully in project " + projectId); return response; } } diff --git a/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ProjectComponentsController.java b/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ProjectComponentsController.java index 9f50dee..f8b0ae8 100644 --- a/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ProjectComponentsController.java +++ b/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ProjectComponentsController.java @@ -3,18 +3,20 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.opendevstack.apiservice.project.api.ProjectComponentsApi; +import org.opendevstack.apiservice.project.facade.ComponentsFacade; import org.opendevstack.apiservice.project.mapper.ComponentResponseMapper; import org.opendevstack.apiservice.project.model.Component; import org.opendevstack.apiservice.project.model.CreateComponentRequest; import org.opendevstack.apiservice.project.model.CreateComponentResponse; -import org.opendevstack.apiservice.project.facade.ComponentsFacade; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @AllArgsConstructor @Slf4j +@RequestMapping("/api/pub/v0") public class ProjectComponentsController implements ProjectComponentsApi { private final ComponentsFacade componentsFacade; @@ -25,11 +27,12 @@ public class ProjectComponentsController implements ProjectComponentsApi { public ResponseEntity createProjectComponent(String projectId, CreateComponentRequest createComponentRequest) { try { Component component = componentsFacade.createProjectComponent(projectId, createComponentRequest); + log.info("Created component {} for project id {} and request {}", component, projectId, createComponentRequest); if (component == null) { log.error("Failed to create component for project '{}'", projectId); return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.error(projectId)); } - return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.entityCreated(projectId, component.getName())); + return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.entityCreated(projectId, component.getId())); } catch (Exception e) { log.error("Error while trying to create component for project '" + projectId + "': " + e.getMessage(), e); return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.error(projectId)); @@ -40,6 +43,7 @@ public ResponseEntity createProjectComponent(String pro public ResponseEntity getProjectComponent(String projectId, String componentId) { try { Component component = componentsFacade.getProjectComponent(projectId, componentId); + log.info("Retrieved component '{}' for project '{}': {}", componentId, projectId, component); if (component == null) { return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); } diff --git a/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/facade/ComponentsFacade.java b/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/facade/ComponentsFacade.java index 012f21d..f36476f 100644 --- a/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/facade/ComponentsFacade.java +++ b/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/facade/ComponentsFacade.java @@ -2,42 +2,41 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.opendevstack.apiservice.externalservice.api.ExternalService; +import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter; +import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent; +import org.opendevstack.apiservice.externalservice.marketplace.service.MarketplaceService; +import org.opendevstack.apiservice.project.mapper.MarketplaceMapper; import org.opendevstack.apiservice.project.model.Component; import org.opendevstack.apiservice.project.model.CreateComponentRequest; import org.springframework.stereotype.Service; +import java.util.List; + @Service @AllArgsConstructor @Slf4j public class ComponentsFacade { - private final MarketplaceExternalServicePlaceholder marketplaceExternalService; - - public Component getProjectComponent(String projectId, String componentId) { - return marketplaceExternalService.getProjectComponent(projectId, componentId); - } - - public Component createProjectComponent(String projectId, CreateComponentRequest createComponentRequest) { - return marketplaceExternalService.createProjectComponent(projectId, createComponentRequest); - } - - @Service - class MarketplaceExternalServicePlaceholder implements ExternalService { + private final MarketplaceService marketplaceExternalService; - @Override - public boolean isHealthy() { - return false; - } + private final MarketplaceMapper marketplaceMapper; - public Component getProjectComponent(String projectId, String componentId) { - log.info("Get component with id '" + componentId + "' for project '" + projectId + "'"); + public Component getProjectComponent(String projectId, String componentId) { + ProjectComponent marketplaceComponent = marketplaceExternalService.getProjectComponent(projectId, componentId); + if (marketplaceComponent == null) { + log.info("Marketplace component with id {} not found", componentId); return null; } + return marketplaceMapper.mapMarketplaceComponentToV0Component(marketplaceComponent); + } - public Component createProjectComponent(String projectId, CreateComponentRequest createComponentRequest) { - log.info("Creating component for project '" + projectId + "'" + " with request: " + createComponentRequest); + public Component createProjectComponent(String projectId, CreateComponentRequest createComponentRequest) { + List createComponentParameterList = marketplaceMapper.mapCreateComponentRequestToCreateComponentParameterList(createComponentRequest); + ProjectComponent marketplaceComponent = marketplaceExternalService.createProjectComponent(projectId, createComponentParameterList); + if (marketplaceComponent == null) { + log.error("Failed to create component in marketplace for project with id {}", projectId); return null; } + return marketplaceMapper.mapMarketplaceComponentToV0Component(marketplaceComponent); } } diff --git a/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/mapper/MarketplaceMapper.java b/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/mapper/MarketplaceMapper.java new file mode 100644 index 0000000..f142064 --- /dev/null +++ b/api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/mapper/MarketplaceMapper.java @@ -0,0 +1,30 @@ +package org.opendevstack.apiservice.project.mapper; + + +import org.mapstruct.Mapper; +import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter; +import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent; +import org.opendevstack.apiservice.project.model.Component; +import org.opendevstack.apiservice.project.model.CreateComponentRequest; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface MarketplaceMapper { + + default Component mapMarketplaceComponentToV0Component(ProjectComponent source) { + if (source == null) { + return null; + } + Component target = new Component(); + target.setId(source.getComponentId()); + target.setStatus(source.getStatus()); + return target; + } + + default List mapCreateComponentRequestToCreateComponentParameterList(CreateComponentRequest createComponentRequest) { + return createComponentRequest.getParams().entrySet().stream() + .map(entry -> new CreateComponentParameter(entry.getKey(), "string", entry.getValue())) + .toList(); + } +} diff --git a/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/controller/ProjectComponentsControllerTest.java b/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/controller/ProjectComponentsControllerTest.java index 23aec13..a98c778 100644 --- a/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/controller/ProjectComponentsControllerTest.java +++ b/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/controller/ProjectComponentsControllerTest.java @@ -40,7 +40,7 @@ void testCreateProjectComponent_whenSuccess_thenReturnOk() throws Exception { Component testComponent = buildTestComponent(); String testProjectId = "testProjectId"; CreateComponentRequest testCreateComponentRequest = buildTestCreateComponentRequest(); - CreateComponentResponse testServiceResponseSuccess = buildTestCreateComponentResponseSuccess(testComponent.getName(), + CreateComponentResponse testServiceResponseSuccess = buildTestCreateComponentResponseSuccess(testComponent.getId(), testProjectId); when(componentsFacade.createProjectComponent(anyString(), any(CreateComponentRequest.class))) diff --git a/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/facade/ComponentsServiceTest.java b/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/facade/ComponentsFacadeTest.java similarity index 58% rename from api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/facade/ComponentsServiceTest.java rename to api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/facade/ComponentsFacadeTest.java index 31d2bcb..3935839 100644 --- a/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/facade/ComponentsServiceTest.java +++ b/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/facade/ComponentsFacadeTest.java @@ -3,45 +3,55 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mapstruct.factory.Mappers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent; +import org.opendevstack.apiservice.externalservice.marketplace.service.MarketplaceService; +import org.opendevstack.apiservice.project.mapper.MarketplaceMapper; import org.opendevstack.apiservice.project.model.Component; import org.opendevstack.apiservice.project.model.CreateComponentRequest; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; -import static org.opendevstack.apiservice.project.util.TestObjectsBuilder.buildTestComponent; import static org.opendevstack.apiservice.project.util.TestObjectsBuilder.buildTestCreateComponentRequest; +import static org.opendevstack.apiservice.project.util.TestObjectsBuilder.buildTestMarketplaceComponent; @ExtendWith(MockitoExtension.class) -class ComponentsServiceTest { +class ComponentsFacadeTest { + + private final MarketplaceMapper marketplaceMapper = Mappers.getMapper(MarketplaceMapper.class); @Mock - private ComponentsFacade.MarketplaceExternalServicePlaceholder marketPlaceExternalServicePlaceholder; + private MarketplaceService marketplaceExternalService; private ComponentsFacade componentsFacade; @BeforeEach void setup() { - componentsFacade = new ComponentsFacade(marketPlaceExternalServicePlaceholder); + componentsFacade = new ComponentsFacade(marketplaceExternalService, marketplaceMapper); } @Test void testGetProjectComponent_whenSuccess_thenReturnCorrectComponent() throws Exception { - Component testComponent = buildTestComponent(); + ProjectComponent testComponent = buildTestMarketplaceComponent(); - when(marketPlaceExternalServicePlaceholder.getProjectComponent(anyString(), eq("testId"))) + when(marketplaceExternalService.getProjectComponent(anyString(), eq("testId"))) .thenReturn(testComponent); Component retrievedComponent = componentsFacade.getProjectComponent("testId", "testId"); - assertThat(retrievedComponent).isEqualTo(testComponent); + assertThat(retrievedComponent.getId()).isEqualTo(testComponent.getComponentId()); + assertThat(retrievedComponent.getStatus()).isEqualTo(testComponent.getStatus()); } @Test void testGetProjectComponent_whenNoComponentFound_thenReturnNull() throws Exception { - when(marketPlaceExternalServicePlaceholder.getProjectComponent(anyString(), eq("testId"))) + when(marketplaceExternalService.getProjectComponent(anyString(), eq("testId"))) .thenReturn(null); Component retrievedComponent = componentsFacade.getProjectComponent("testId", "testId"); @@ -50,14 +60,15 @@ void testGetProjectComponent_whenNoComponentFound_thenReturnNull() throws Except @Test void testCreateProjectComponent_whenSuccess_thenReturnCorrectComponent() throws Exception { - Component testComponent = buildTestComponent(); + ProjectComponent testComponent = buildTestMarketplaceComponent(); CreateComponentRequest testRequest = buildTestCreateComponentRequest(); - when(marketPlaceExternalServicePlaceholder.createProjectComponent(anyString(), eq(testRequest))) + when(marketplaceExternalService.createProjectComponent(anyString(), any(List.class))) .thenReturn(testComponent); Component retrievedComponent = componentsFacade.createProjectComponent("testId", testRequest); - assertThat(retrievedComponent).isEqualTo(testComponent); + assertThat(retrievedComponent.getId()).isEqualTo(testComponent.getComponentId()); + assertThat(retrievedComponent.getStatus()).isEqualTo(testComponent.getStatus()); } @@ -65,7 +76,7 @@ void testCreateProjectComponent_whenSuccess_thenReturnCorrectComponent() throws void testCreateProjectComponent_whenFailure_thenReturnNull() throws Exception { CreateComponentRequest testRequest = buildTestCreateComponentRequest(); - when(marketPlaceExternalServicePlaceholder.createProjectComponent(anyString(), eq(testRequest))) + when(marketplaceExternalService.createProjectComponent(anyString(), any(List.class))) .thenReturn(null); Component retrievedComponent = componentsFacade.createProjectComponent("testId", testRequest); diff --git a/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/util/TestObjectsBuilder.java b/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/util/TestObjectsBuilder.java index 60ca92b..14cc84f 100644 --- a/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/util/TestObjectsBuilder.java +++ b/api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/util/TestObjectsBuilder.java @@ -1,10 +1,15 @@ package org.opendevstack.apiservice.project.util; +import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter; +import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent; import org.opendevstack.apiservice.project.model.Component; import org.opendevstack.apiservice.project.model.CreateComponentRequest; import org.opendevstack.apiservice.project.model.CreateComponentResponse; import org.springframework.http.HttpStatus; +import java.util.ArrayList; +import java.util.List; + public class TestObjectsBuilder { private TestObjectsBuilder() { @@ -19,6 +24,14 @@ public static Component buildTestComponent() { return component; } + public static ProjectComponent buildTestMarketplaceComponent() { + ProjectComponent component = new ProjectComponent(); + component.setComponentId("testComponentId"); + component.setCanBeDeleted(false); + component.setComponentUrl("http://test.component.url"); + return component; + } + public static CreateComponentRequest buildTestCreateComponentRequest() { CreateComponentRequest request = new CreateComponentRequest(); request.setName("testComponentName"); @@ -26,10 +39,17 @@ public static CreateComponentRequest buildTestCreateComponentRequest() { return request; } - public static CreateComponentResponse buildTestCreateComponentResponseSuccess(String componentName, String projectId) { + public static List buildTestMarketplaceCreateComponentParameters() { + List parameters = new ArrayList<>(); + parameters.add(new CreateComponentParameter("name", "string", "testComponentName")); + parameters.add(new CreateComponentParameter("productId", "string", "testProductId")); + return parameters; + } + + public static CreateComponentResponse buildTestCreateComponentResponseSuccess(String componentId, String projectId) { CreateComponentResponse response = new CreateComponentResponse(); response.setErrorCode(HttpStatus.CREATED.value()); - response.setMessage(componentName + " component created successfully in project " + projectId); + response.setMessage(componentId + " component created successfully in project " + projectId); return response; } diff --git a/core/pom.xml b/core/pom.xml index c3aa14b..252da50 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -109,6 +109,12 @@ ${project.version} + + org.opendevstack.apiservice + external-service-marketplace + ${project.version} + + org.opendevstack.apiservice api-project-users @@ -121,6 +127,12 @@ ${project.version} + + org.opendevstack.apiservice + api-project-component-v0 + ${project.version} + + org.opendevstack.apiservice api-project-platform diff --git a/external-service-marketplace/pom.xml b/external-service-marketplace/pom.xml new file mode 100644 index 0000000..6358551 --- /dev/null +++ b/external-service-marketplace/pom.xml @@ -0,0 +1,129 @@ + + 4.0.0 + + + org.opendevstack.apiservice + devstack-api-service + 0.0.3 + + + external-service-marketplace + External Service Marketplace 2.0 + Service module for integrating with Marketplace 2.0 + + + + + org.opendevstack.apiservice + external-service-api + ${project.version} + + + + + org.springframework.boot + spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + org.projectlombok + lombok + provided + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + org.junit.jupiter + junit-jupiter + test + + + + + org.wiremock.integrations + wiremock-spring-boot + 3.10.0 + test + + + + + org.openapitools + jackson-databind-nullable + ${jackson-databind-nullable.version} + + + + + jakarta.annotation + jakarta.annotation-api + + + + + org.springframework.boot + spring-boot-starter-cache + + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + add-source + generate-sources + + add-source + + + + ${project.basedir}/target/generated-sources/openapi/src/main/java + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + diff --git a/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/model/CreateComponentParameter.java b/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/model/CreateComponentParameter.java new file mode 100644 index 0000000..a4409c3 --- /dev/null +++ b/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/model/CreateComponentParameter.java @@ -0,0 +1,17 @@ +package org.opendevstack.apiservice.externalservice.marketplace.model; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +@Data +public class CreateComponentParameter { + + private String name; + private String type; + private String value; + +} diff --git a/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/model/ProjectComponent.java b/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/model/ProjectComponent.java new file mode 100644 index 0000000..89b640b --- /dev/null +++ b/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/model/ProjectComponent.java @@ -0,0 +1,18 @@ +package org.opendevstack.apiservice.externalservice.marketplace.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +@Data +public class ProjectComponent { + + private String componentId; + private String status; + private boolean canBeDeleted; + private String logoUrl; + private String componentUrl; + +} diff --git a/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/service/MarketplaceService.java b/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/service/MarketplaceService.java new file mode 100644 index 0000000..8873f42 --- /dev/null +++ b/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/service/MarketplaceService.java @@ -0,0 +1,15 @@ +package org.opendevstack.apiservice.externalservice.marketplace.service; + +import org.opendevstack.apiservice.externalservice.api.ExternalService; +import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter; +import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent; + +import java.util.List; + +public interface MarketplaceService extends ExternalService { + + + ProjectComponent getProjectComponent(String projectId, String componentId); + + ProjectComponent createProjectComponent(String projectId, List params); +} diff --git a/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/service/impl/MarketplaceServiceMockImpl.java b/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/service/impl/MarketplaceServiceMockImpl.java new file mode 100644 index 0000000..2301a76 --- /dev/null +++ b/external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/service/impl/MarketplaceServiceMockImpl.java @@ -0,0 +1,74 @@ +package org.opendevstack.apiservice.externalservice.marketplace.service.impl; + +import lombok.extern.slf4j.Slf4j; +import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter; +import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent; +import org.opendevstack.apiservice.externalservice.marketplace.service.MarketplaceService; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +public class MarketplaceServiceMockImpl implements MarketplaceService { + + @Override + public boolean isHealthy() { + return true; + } + + private Map mockComponentsCache = new HashMap<>(); + + public ProjectComponent getProjectComponent(String projectId, String componentId) { + log.info("Get component with id '" + componentId + "' for project '" + projectId + "'"); + ComposedId composedId = new ComposedId(projectId, componentId); + return mockComponentsCache.get(composedId); + } + + public ProjectComponent createProjectComponent(String projectId, List createComponentParams) { + log.info("Creating component for project '" + projectId + "'" + " with request: " + createComponentParams); + ProjectComponent mockComponent = new ProjectComponent(); + mockComponent.setComponentId(generateNextId()); + mockComponent.setCanBeDeleted(true); + mockComponent.setStatus("CREATING"); + ComposedId composedId = new ComposedId(projectId, mockComponent.getComponentId()); + mockComponentsCache.put(composedId, mockComponent); + + return mockComponent; + } + + private String generateNextId() { + return "mock-component-id-" + (mockComponentsCache.size() + 1); + } + + class ComposedId { + private String projectId; + private String componentId; + + public ComposedId(String projectId, String componentId) { + this.projectId = projectId; + this.componentId = componentId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + ComposedId that = (ComposedId) o; + + if (!projectId.equals(that.projectId)) return false; + return componentId.equals(that.componentId); + } + + @Override + public int hashCode() { + int result = projectId.hashCode(); + result = 31 * result + componentId.hashCode(); + return result; + } + } +} diff --git a/pom.xml b/pom.xml index 01d9d24..2a5aace 100644 --- a/pom.xml +++ b/pom.xml @@ -53,6 +53,7 @@ external-service-ocp external-service-bitbucket external-service-jira + external-service-marketplace external-service-webhookproxy service-projects api-project-users