Skip to content

Commit 72b6b6b

Browse files
Implement service instances and plans creation and update (#1157)
1 parent 4f63c5f commit 72b6b6b

File tree

38 files changed

+1778
-162
lines changed

38 files changed

+1778
-162
lines changed

cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v3/AbstractClientV3Operations.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@ protected final Mono<String> delete(Object requestPayload, Function<UriComponent
6565
.map(AbstractClientV3Operations::extractJobId);
6666
}
6767

68+
protected final <T> Mono<HttpClientResponseWithParsedBody<T>> deleteWithResponse(Object requestPayload, Class<T> responseType,
69+
Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) {
70+
return createOperator()
71+
.flatMap(operator -> operator.delete()
72+
.uri(queryTransformer(requestPayload).andThen(uriTransformer))
73+
.send(requestPayload)
74+
.response()
75+
.parseBodyWithResponse(responseType));
76+
}
77+
6878
protected final <T> Mono<T> delete(Object requestPayload, Class<T> responseType, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) {
6979
return createOperator()
7080
.flatMap(operator -> operator.delete()
@@ -130,6 +140,16 @@ protected <T> Mono<T> post(Object requestPayload, Class<T> responseType, Functio
130140
.parseBody(responseType));
131141
}
132142

143+
protected final <T> Mono<HttpClientResponseWithParsedBody<T>> postWithResponse(Object requestPayload, Class<T> responseType,
144+
Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) {
145+
return createOperator()
146+
.flatMap(operator -> operator.post()
147+
.uri(queryTransformer(requestPayload).andThen(uriTransformer))
148+
.send(requestPayload)
149+
.response()
150+
.parseBodyWithResponse(responseType));
151+
}
152+
133153
protected final Mono<String> post(Object requestPayload, Function<UriComponentsBuilder, UriComponentsBuilder> uriTransformer) {
134154
return createOperator()
135155
.flatMap(operator -> operator.post()

cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v3/serviceinstances/ReactorServiceInstancesV3.java

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,35 @@
1616

1717
package org.cloudfoundry.reactor.client.v3.serviceinstances;
1818

19+
20+
import org.cloudfoundry.client.v3.serviceinstances.CreateServiceInstanceRequest;
21+
import org.cloudfoundry.client.v3.serviceinstances.CreateServiceInstanceResponse;
22+
import org.cloudfoundry.client.v3.serviceinstances.DeleteServiceInstanceRequest;
1923
import org.cloudfoundry.client.v3.serviceinstances.GetManagedServiceParametersRequest;
2024
import org.cloudfoundry.client.v3.serviceinstances.GetManagedServiceParametersResponse;
25+
import org.cloudfoundry.client.v3.serviceinstances.GetServiceInstanceRequest;
26+
import org.cloudfoundry.client.v3.serviceinstances.GetServiceInstanceResponse;
2127
import org.cloudfoundry.client.v3.serviceinstances.GetUserProvidedCredentialsRequest;
2228
import org.cloudfoundry.client.v3.serviceinstances.GetUserProvidedCredentialsResponse;
2329
import org.cloudfoundry.client.v3.serviceinstances.ListServiceInstancesRequest;
2430
import org.cloudfoundry.client.v3.serviceinstances.ListServiceInstancesResponse;
2531
import org.cloudfoundry.client.v3.serviceinstances.ListSharedSpacesRelationshipRequest;
2632
import org.cloudfoundry.client.v3.serviceinstances.ListSharedSpacesRelationshipResponse;
33+
import org.cloudfoundry.client.v3.serviceinstances.ServiceInstanceResource;
2734
import org.cloudfoundry.client.v3.serviceinstances.ServiceInstancesV3;
2835
import org.cloudfoundry.client.v3.serviceinstances.ShareServiceInstanceRequest;
2936
import org.cloudfoundry.client.v3.serviceinstances.ShareServiceInstanceResponse;
3037
import org.cloudfoundry.client.v3.serviceinstances.UnshareServiceInstanceRequest;
3138
import org.cloudfoundry.client.v3.serviceinstances.UpdateServiceInstanceRequest;
3239
import org.cloudfoundry.client.v3.serviceinstances.UpdateServiceInstanceResponse;
3340
import org.cloudfoundry.reactor.ConnectionContext;
41+
import org.cloudfoundry.reactor.HttpClientResponseWithParsedBody;
3442
import org.cloudfoundry.reactor.TokenProvider;
3543
import org.cloudfoundry.reactor.client.v3.AbstractClientV3Operations;
3644
import reactor.core.publisher.Mono;
3745

3846
import java.util.Map;
47+
import java.util.Optional;
3948

4049
/**
4150
* The Reactor-based implementation of {@link ServiceInstancesV3}
@@ -54,16 +63,43 @@ public ReactorServiceInstancesV3(ConnectionContext connectionContext, Mono<Strin
5463
super(connectionContext, root, tokenProvider, requestTags);
5564
}
5665

66+
@Override
67+
public Mono<CreateServiceInstanceResponse> create(CreateServiceInstanceRequest request) {
68+
return postWithResponse(request, ServiceInstanceResource.class, builder -> builder.pathSegment("service_instances"))
69+
.map(responseTuple -> CreateServiceInstanceResponse.builder()
70+
.jobId(getJobId(responseTuple))
71+
.serviceInstance(responseTuple.getBody())
72+
.build())
73+
.checkpoint();
74+
}
75+
76+
private <T> Optional<String> getJobId(HttpClientResponseWithParsedBody<T> responseTuple) {
77+
return Optional.ofNullable(extractJobId(responseTuple.getResponse()));
78+
}
79+
80+
@Override
81+
public Mono<GetServiceInstanceResponse> get(GetServiceInstanceRequest request) {
82+
return get(request, GetServiceInstanceResponse.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId()))
83+
.checkpoint();
84+
}
85+
86+
@Override
87+
public Mono<Optional<String>> delete(DeleteServiceInstanceRequest request) {
88+
return deleteWithResponse(request, String.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId()))
89+
.map(this::getJobId)
90+
.checkpoint();
91+
}
92+
5793
@Override
5894
public Mono<GetManagedServiceParametersResponse> getManagedServiceParameters(GetManagedServiceParametersRequest request) {
59-
return get(request, GetManagedServiceParametersResponse.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId(), "parameters"))
60-
.checkpoint();
95+
return get(request, GetManagedServiceParametersResponse.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId(), "parameters"))
96+
.checkpoint();
6197
}
6298

6399
@Override
64100
public Mono<GetUserProvidedCredentialsResponse> getUserProvidedCredentials(GetUserProvidedCredentialsRequest request) {
65-
return get(request, GetUserProvidedCredentialsResponse.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId(), "credentials"))
66-
.checkpoint();
101+
return get(request, GetUserProvidedCredentialsResponse.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId(), "credentials"))
102+
.checkpoint();
67103
}
68104

69105
@Override
@@ -92,6 +128,11 @@ public Mono<Void> unshare(UnshareServiceInstanceRequest request) {
92128

93129
@Override
94130
public Mono<UpdateServiceInstanceResponse> update(UpdateServiceInstanceRequest request) {
95-
return patch(request, UpdateServiceInstanceResponse.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId()));
131+
return patchWithResponse(request, ServiceInstanceResource.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId()))
132+
.map(responseTuple -> UpdateServiceInstanceResponse.builder()
133+
.jobId(getJobId(responseTuple))
134+
.serviceInstance(responseTuple.getBody())
135+
.build())
136+
.checkpoint();
96137
}
97138
}

cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v3/serviceplans/ReactorServicePlansV3.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import org.cloudfoundry.client.v3.serviceplans.ServicePlansV3;
2525
import org.cloudfoundry.client.v3.serviceplans.UpdateServicePlanRequest;
2626
import org.cloudfoundry.client.v3.serviceplans.UpdateServicePlanResponse;
27+
import org.cloudfoundry.client.v3.serviceplans.UpdateServicePlanVisibilityRequest;
28+
import org.cloudfoundry.client.v3.serviceplans.UpdateServicePlanVisibilityResponse;
2729
import org.cloudfoundry.reactor.ConnectionContext;
2830
import org.cloudfoundry.reactor.TokenProvider;
2931
import org.cloudfoundry.reactor.client.v3.AbstractClientV3Operations;
@@ -72,4 +74,9 @@ public Mono<UpdateServicePlanResponse> update(UpdateServicePlanRequest request)
7274
.checkpoint();
7375
}
7476

77+
@Override
78+
public Mono<UpdateServicePlanVisibilityResponse> updateVisibility(UpdateServicePlanVisibilityRequest request) {
79+
return post(request, UpdateServicePlanVisibilityResponse.class, builder -> builder.pathSegment("service_plans", request.getServicePlanId(), "visibility"))
80+
.checkpoint();
81+
}
7582
}

0 commit comments

Comments
 (0)