Skip to content

Commit 636cc1c

Browse files
author
zxBCN Valeriu_Tuguran,Constantin (IT EDP) EXTERNAL
committed
Add marketplace api client.
1 parent aee0c8f commit 636cc1c

22 files changed

Lines changed: 2358 additions & 187 deletions

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,7 @@ api-project/src/main/java/org/opendevstack/apiservice/project/api
9797
api-project/src/main/java/org/opendevstack/apiservice/project/model
9898
api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/api
9999
api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/model
100+
external-service-marketplace/src/main/java/org/opendevstack/apiservice/externalservice/marketplace/openapi
101+
100102
**/.openapi-generator
101103

api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ComponentsResponseFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ public static CreateComponentResponse error(String projectId) {
1515
return response;
1616
}
1717

18-
public static CreateComponentResponse entityCreated(String projectId, String componentId) {
18+
public static CreateComponentResponse entityCreated(String projectId) {
1919
CreateComponentResponse response = new CreateComponentResponse();
2020
response.setErrorCode(HttpStatus.CREATED.value());
21-
response.setMessage(componentId + " component created successfully in project " + projectId);
21+
response.setMessage("Component created successfully in project " + projectId);
2222
return response;
2323
}
2424
}

api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/controller/ProjectComponentsController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ public class ProjectComponentsController implements ProjectComponentsApi {
2626
@Override
2727
public ResponseEntity<CreateComponentResponse> createProjectComponent(String projectId, CreateComponentRequest createComponentRequest) {
2828
try {
29-
Component component = componentsFacade.createProjectComponent(projectId, createComponentRequest);
30-
log.info("Created component {} for project id {} and request {}", component, projectId, createComponentRequest);
31-
if (component == null) {
29+
boolean success = componentsFacade.createProjectComponent(projectId, createComponentRequest);
30+
log.info("Created component for project id {} and request {}", projectId, createComponentRequest);
31+
if (!success) {
3232
log.error("Failed to create component for project '{}'", projectId);
3333
return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.error(projectId));
3434
}
35-
return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.entityCreated(projectId, component.getId()));
35+
return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.entityCreated(projectId));
3636
} catch (Exception e) {
3737
log.error("Error while trying to create component for project '" + projectId + "': " + e.getMessage(), e);
3838
return componentResponseMapper.toResponseEntity(ComponentsResponseFactory.error(projectId));

api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/facade/ComponentsFacade.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
import lombok.AllArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5-
import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter;
6-
import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent;
75
import org.opendevstack.apiservice.externalservice.marketplace.service.MarketplaceService;
6+
import org.opendevstack.apiservice.externalservice.marketplace.exception.MarketplaceClientException;
7+
import org.opendevstack.apiservice.externalservice.marketplace.openapi.model.ProjectComponentInfo;
8+
import org.opendevstack.apiservice.externalservice.marketplace.openapi.model.ProvisionActionParameter;
89
import org.opendevstack.apiservice.project.mapper.MarketplaceMapper;
910
import org.opendevstack.apiservice.project.model.Component;
1011
import org.opendevstack.apiservice.project.model.CreateComponentRequest;
@@ -21,22 +22,21 @@ public class ComponentsFacade {
2122

2223
private final MarketplaceMapper marketplaceMapper;
2324

24-
public Component getProjectComponent(String projectId, String componentId) {
25-
ProjectComponent marketplaceComponent = marketplaceExternalService.getProjectComponent(projectId, componentId);
25+
public Component getProjectComponent(String projectId, String componentId) throws MarketplaceClientException {
26+
ProjectComponentInfo marketplaceComponent = marketplaceExternalService.getProjectComponent(projectId, componentId);
2627
if (marketplaceComponent == null) {
2728
log.info("Marketplace component with id {} not found", componentId);
2829
return null;
2930
}
3031
return marketplaceMapper.mapMarketplaceComponentToV0Component(marketplaceComponent);
3132
}
3233

33-
public Component createProjectComponent(String projectId, CreateComponentRequest createComponentRequest) {
34-
List<CreateComponentParameter> createComponentParameterList = marketplaceMapper.mapCreateComponentRequestToCreateComponentParameterList(createComponentRequest);
35-
ProjectComponent marketplaceComponent = marketplaceExternalService.createProjectComponent(projectId, createComponentParameterList);
36-
if (marketplaceComponent == null) {
34+
public boolean createProjectComponent(String projectId, CreateComponentRequest createComponentRequest) throws MarketplaceClientException {
35+
List<ProvisionActionParameter> createComponentParameterList = marketplaceMapper.mapCreateComponentRequestToCreateComponentParameterList(createComponentRequest);
36+
boolean success = marketplaceExternalService.provisionProjectComponent(projectId, createComponentParameterList);
37+
if (!success) {
3738
log.error("Failed to create component in marketplace for project with id {}", projectId);
38-
return null;
3939
}
40-
return marketplaceMapper.mapMarketplaceComponentToV0Component(marketplaceComponent);
40+
return success;
4141
}
4242
}

api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/facade/MarketplaceExternalServicePlaceholder.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

api-project-component-v0/src/main/java/org/opendevstack/apiservice/project/mapper/MarketplaceMapper.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33

44
import org.mapstruct.Mapper;
5-
import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter;
6-
import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent;
5+
import org.opendevstack.apiservice.externalservice.marketplace.openapi.model.ProjectComponentInfo;
6+
import org.opendevstack.apiservice.externalservice.marketplace.openapi.model.ProvisionActionParameter;
77
import org.opendevstack.apiservice.project.model.Component;
88
import org.opendevstack.apiservice.project.model.CreateComponentRequest;
99

@@ -12,7 +12,7 @@
1212
@Mapper(componentModel = "spring")
1313
public interface MarketplaceMapper {
1414

15-
default Component mapMarketplaceComponentToV0Component(ProjectComponent source) {
15+
default Component mapMarketplaceComponentToV0Component(ProjectComponentInfo source) {
1616
if (source == null) {
1717
return null;
1818
}
@@ -22,9 +22,9 @@ default Component mapMarketplaceComponentToV0Component(ProjectComponent source)
2222
return target;
2323
}
2424

25-
default List<CreateComponentParameter> mapCreateComponentRequestToCreateComponentParameterList(CreateComponentRequest createComponentRequest) {
25+
default List<ProvisionActionParameter> mapCreateComponentRequestToCreateComponentParameterList(CreateComponentRequest createComponentRequest) {
2626
return createComponentRequest.getParams().entrySet().stream()
27-
.map(entry -> new CreateComponentParameter(entry.getKey(), "string", entry.getValue()))
27+
.map(entry -> new ProvisionActionParameter().name(entry.getKey()).type("string").value(entry.getValue()))
2828
.toList();
2929
}
3030
}

api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/controller/ProjectComponentsControllerTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,10 @@ void testCreateProjectComponent_whenSuccess_thenReturnOk() throws Exception {
4040
Component testComponent = buildTestComponent();
4141
String testProjectId = "testProjectId";
4242
CreateComponentRequest testCreateComponentRequest = buildTestCreateComponentRequest();
43-
CreateComponentResponse testServiceResponseSuccess = buildTestCreateComponentResponseSuccess(testComponent.getId(),
44-
testProjectId);
43+
CreateComponentResponse testServiceResponseSuccess = buildTestCreateComponentResponseSuccess(testProjectId);
4544

4645
when(componentsFacade.createProjectComponent(anyString(), any(CreateComponentRequest.class)))
47-
.thenReturn(testComponent);
46+
.thenReturn(true);
4847

4948
ResponseEntity<CreateComponentResponse> response = projectComponentsController.createProjectComponent(testProjectId,
5049
testCreateComponentRequest);
@@ -61,7 +60,7 @@ void testCreateProjectComponent_whenFailure_thenReturnErrorResponse() throws Exc
6160
CreateComponentResponse testServiceResponseFailure = buildTestCreateComponentResponseFailure(testProjectId);
6261

6362
when(componentsFacade.createProjectComponent(anyString(), any(CreateComponentRequest.class)))
64-
.thenReturn(null);
63+
.thenReturn(false);
6564

6665
ResponseEntity<CreateComponentResponse> response = projectComponentsController.createProjectComponent(testProjectId,
6766
testCreateComponentRequest);

api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/facade/ComponentsFacadeTest.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import org.mapstruct.factory.Mappers;
77
import org.mockito.Mock;
88
import org.mockito.junit.jupiter.MockitoExtension;
9-
import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent;
109
import org.opendevstack.apiservice.externalservice.marketplace.service.MarketplaceService;
10+
import org.opendevstack.apiservice.externalservice.marketplace.openapi.model.ProjectComponentInfo;
1111
import org.opendevstack.apiservice.project.mapper.MarketplaceMapper;
1212
import org.opendevstack.apiservice.project.model.Component;
1313
import org.opendevstack.apiservice.project.model.CreateComponentRequest;
@@ -39,7 +39,7 @@ void setup() {
3939

4040
@Test
4141
void testGetProjectComponent_whenSuccess_thenReturnCorrectComponent() throws Exception {
42-
ProjectComponent testComponent = buildTestMarketplaceComponent();
42+
ProjectComponentInfo testComponent = buildTestMarketplaceComponent();
4343

4444
when(marketplaceExternalService.getProjectComponent(anyString(), eq("testId")))
4545
.thenReturn(testComponent);
@@ -60,26 +60,25 @@ void testGetProjectComponent_whenNoComponentFound_thenReturnNull() throws Except
6060

6161
@Test
6262
void testCreateProjectComponent_whenSuccess_thenReturnCorrectComponent() throws Exception {
63-
ProjectComponent testComponent = buildTestMarketplaceComponent();
63+
ProjectComponentInfo testComponent = buildTestMarketplaceComponent();
6464
CreateComponentRequest testRequest = buildTestCreateComponentRequest();
6565

66-
when(marketplaceExternalService.createProjectComponent(anyString(), any(List.class)))
67-
.thenReturn(testComponent);
66+
when(marketplaceExternalService.provisionProjectComponent(anyString(), any(List.class)))
67+
.thenReturn(true);
6868

69-
Component retrievedComponent = componentsFacade.createProjectComponent("testId", testRequest);
70-
assertThat(retrievedComponent.getId()).isEqualTo(testComponent.getComponentId());
71-
assertThat(retrievedComponent.getStatus()).isEqualTo(testComponent.getStatus());
69+
boolean result = componentsFacade.createProjectComponent("testId", testRequest);
70+
assertThat(result).isTrue();
7271
}
7372

7473

7574
@Test
7675
void testCreateProjectComponent_whenFailure_thenReturnNull() throws Exception {
7776
CreateComponentRequest testRequest = buildTestCreateComponentRequest();
7877

79-
when(marketplaceExternalService.createProjectComponent(anyString(), any(List.class)))
80-
.thenReturn(null);
78+
when(marketplaceExternalService.provisionProjectComponent(anyString(), any(List.class)))
79+
.thenReturn(false);
8180

82-
Component retrievedComponent = componentsFacade.createProjectComponent("testId", testRequest);
83-
assertThat(retrievedComponent).isNull();
81+
boolean result = componentsFacade.createProjectComponent("testId", testRequest);
82+
assertThat(result).isFalse();
8483
}
8584
}

api-project-component-v0/src/test/java/org/opendevstack/apiservice/project/util/TestObjectsBuilder.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.opendevstack.apiservice.project.util;
22

3-
import org.opendevstack.apiservice.externalservice.marketplace.model.CreateComponentParameter;
4-
import org.opendevstack.apiservice.externalservice.marketplace.model.ProjectComponent;
3+
import org.opendevstack.apiservice.externalservice.marketplace.openapi.model.ProjectComponentInfo;
4+
import org.opendevstack.apiservice.externalservice.marketplace.openapi.model.ProvisionActionParameter;
55
import org.opendevstack.apiservice.project.model.Component;
66
import org.opendevstack.apiservice.project.model.CreateComponentRequest;
77
import org.opendevstack.apiservice.project.model.CreateComponentResponse;
@@ -24,8 +24,8 @@ public static Component buildTestComponent() {
2424
return component;
2525
}
2626

27-
public static ProjectComponent buildTestMarketplaceComponent() {
28-
ProjectComponent component = new ProjectComponent();
27+
public static ProjectComponentInfo buildTestMarketplaceComponent() {
28+
ProjectComponentInfo component = new ProjectComponentInfo();
2929
component.setComponentId("testComponentId");
3030
component.setCanBeDeleted(false);
3131
component.setComponentUrl("http://test.component.url");
@@ -39,17 +39,17 @@ public static CreateComponentRequest buildTestCreateComponentRequest() {
3939
return request;
4040
}
4141

42-
public static List<CreateComponentParameter> buildTestMarketplaceCreateComponentParameters() {
43-
List<CreateComponentParameter> parameters = new ArrayList<>();
44-
parameters.add(new CreateComponentParameter("name", "string", "testComponentName"));
45-
parameters.add(new CreateComponentParameter("productId", "string", "testProductId"));
42+
public static List<ProvisionActionParameter> buildTestMarketplaceCreateComponentParameters() {
43+
List<ProvisionActionParameter> parameters = new ArrayList<>();
44+
parameters.add(new ProvisionActionParameter().name("name").type("string").value("testComponentName"));
45+
parameters.add(new ProvisionActionParameter().name("productId").type("string").value("testProductId"));
4646
return parameters;
4747
}
4848

49-
public static CreateComponentResponse buildTestCreateComponentResponseSuccess(String componentId, String projectId) {
49+
public static CreateComponentResponse buildTestCreateComponentResponseSuccess(String projectId) {
5050
CreateComponentResponse response = new CreateComponentResponse();
5151
response.setErrorCode(HttpStatus.CREATED.value());
52-
response.setMessage(componentId + " component created successfully in project " + projectId);
52+
response.setMessage("Component created successfully in project " + projectId);
5353
return response;
5454
}
5555

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# OpenAPI Generator Ignore
2+
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
3+
4+
# Use this file to prevent files from being overwritten by the generator.
5+
# The patterns follow closely to .gitignore or .dockerignore.
6+
7+
# As an example, the C# client generator defines ApiClient.cs.
8+
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
9+
#ApiClient.cs
10+
11+
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
12+
#foo/*/qux
13+
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
14+
15+
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
16+
#foo/**/qux
17+
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
18+
19+
# You can also negate patterns with an exclamation (!).
20+
# For example, you can ignore all files in a docs folder with the file extension .md:
21+
#docs/*.md
22+
# Then explicitly reverse the ignore rule for a single file:
23+
#!docs/README.md
24+
25+
api
26+
api/**
27+
gradle
28+
gradle/**
29+
.github
30+
.github/**
31+
pom.xml
32+
**/AndroidManifest.xml
33+
.gitignore
34+
.openapi-generator-ignore
35+
.travis.yml
36+
build.gradle
37+
build.sbt
38+
git_push.sh
39+
gradle.properties
40+
gradlew
41+
gradlew.bat
42+
settings.gradle
43+

0 commit comments

Comments
 (0)