Refactor imperative code to be more reactive
This commit is contained in:
committed by
Roy Clarkson
parent
6077c4e82d
commit
2f2e183aca
@@ -78,10 +78,10 @@ public class AppDeploymentCreateServiceInstanceWorkflow
|
||||
|
||||
private Flux<String> createBackingServices(CreateServiceInstanceRequest request) {
|
||||
return getBackingServicesForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(backingServices ->
|
||||
targetService.addToBackingServices(backingServices,
|
||||
getTargetForService(request.getServiceDefinition(), request.getPlan()),
|
||||
.flatMap(backingServices -> getTargetForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(targetSpec -> targetService.addToBackingServices(backingServices, targetSpec,
|
||||
request.getServiceInstanceId()))
|
||||
.defaultIfEmpty(backingServices))
|
||||
.flatMap(backingServices ->
|
||||
servicesParametersTransformationService.transformParameters(backingServices,
|
||||
request.getParameters()))
|
||||
@@ -97,10 +97,10 @@ public class AppDeploymentCreateServiceInstanceWorkflow
|
||||
|
||||
private Flux<String> deployBackingApplications(CreateServiceInstanceRequest request) {
|
||||
return getBackingApplicationsForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(backingApps ->
|
||||
targetService.addToBackingApplications(backingApps,
|
||||
getTargetForService(request.getServiceDefinition(),
|
||||
request.getPlan()), request.getServiceInstanceId()))
|
||||
.flatMap(backingApps -> getTargetForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(targetSpec -> targetService.addToBackingApplications(backingApps, targetSpec,
|
||||
request.getServiceInstanceId()))
|
||||
.defaultIfEmpty(backingApps))
|
||||
.flatMap(backingApps ->
|
||||
appsParametersTransformationService.transformParameters(backingApps,
|
||||
request.getParameters()))
|
||||
|
||||
@@ -89,9 +89,10 @@ public class AppDeploymentDeleteServiceInstanceWorkflow
|
||||
|
||||
private Flux<List<BackingService>> collectConfiguredBackingServices(DeleteServiceInstanceRequest request) {
|
||||
return getBackingServicesForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMapMany(backingServices -> targetService.addToBackingServices(backingServices,
|
||||
getTargetForService(request.getServiceDefinition(), request.getPlan()),
|
||||
request.getServiceInstanceId()));
|
||||
.flatMapMany(backingServices -> getTargetForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(targetSpec -> targetService.addToBackingServices(backingServices, targetSpec,
|
||||
request.getServiceInstanceId()))
|
||||
.defaultIfEmpty(backingServices));
|
||||
}
|
||||
|
||||
private Flux<List<BackingService>> collectBoundBackingServices(DeleteServiceInstanceRequest request) {
|
||||
@@ -109,10 +110,10 @@ public class AppDeploymentDeleteServiceInstanceWorkflow
|
||||
.flatMap(backingApps ->
|
||||
credentialProviderService.deleteCredentials(backingApps,
|
||||
request.getServiceInstanceId()))
|
||||
.flatMap(backingApps ->
|
||||
targetService.addToBackingApplications(backingApps,
|
||||
getTargetForService(request.getServiceDefinition(), request.getPlan()),
|
||||
.flatMap(backingApps -> getTargetForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(targetSpec -> targetService.addToBackingApplications(backingApps, targetSpec,
|
||||
request.getServiceInstanceId()))
|
||||
.defaultIfEmpty(backingApps))
|
||||
.flatMapMany(deploymentService::undeploy)
|
||||
.doOnRequest(l -> log.debug("Undeploying backing applications for {}/{}",
|
||||
request.getServiceDefinition().getName(), request.getPlan().getName()))
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.cloud.appbroker.workflow.instance;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import org.springframework.cloud.appbroker.deployer.BackingApplication;
|
||||
@@ -29,7 +30,6 @@ import org.springframework.cloud.appbroker.deployer.BrokeredServices;
|
||||
import org.springframework.cloud.appbroker.deployer.TargetSpec;
|
||||
import org.springframework.cloud.servicebroker.model.catalog.Plan;
|
||||
import org.springframework.cloud.servicebroker.model.catalog.ServiceDefinition;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
public class AppDeploymentInstanceWorkflow {
|
||||
|
||||
@@ -50,57 +50,33 @@ public class AppDeploymentInstanceWorkflow {
|
||||
);
|
||||
}
|
||||
|
||||
protected TargetSpec getTargetForService(ServiceDefinition serviceDefinition, Plan plan) {
|
||||
BrokeredService brokeredService = findBrokeredService(serviceDefinition, plan);
|
||||
return brokeredService == null ? null : brokeredService.getTarget();
|
||||
protected Mono<TargetSpec> getTargetForService(ServiceDefinition serviceDefinition, Plan plan) {
|
||||
return findBrokeredService(serviceDefinition, plan)
|
||||
.flatMap(brokeredService -> Mono.justOrEmpty(brokeredService.getTarget()));
|
||||
}
|
||||
|
||||
protected Mono<List<BackingApplication>> getBackingApplicationsForService(ServiceDefinition serviceDefinition,
|
||||
Plan plan) {
|
||||
return Mono.defer(() ->
|
||||
Mono.justOrEmpty(findBackingApplications(serviceDefinition, plan)));
|
||||
return findBrokeredService(serviceDefinition, plan)
|
||||
.flatMap(brokeredService -> Mono.justOrEmpty(brokeredService.getApps()))
|
||||
.map(backingApplications -> BackingApplications.builder()
|
||||
.backingApplications(backingApplications)
|
||||
.build());
|
||||
}
|
||||
|
||||
protected Mono<List<BackingService>> getBackingServicesForService(ServiceDefinition serviceDefinition, Plan plan) {
|
||||
return Mono.defer(() ->
|
||||
Mono.justOrEmpty(findBackingServices(serviceDefinition, plan)));
|
||||
return findBrokeredService(serviceDefinition, plan)
|
||||
.flatMap(brokeredService -> Mono.justOrEmpty(brokeredService.getServices()))
|
||||
.map(backingServices -> BackingServices.builder()
|
||||
.backingServices(backingServices)
|
||||
.build());
|
||||
}
|
||||
|
||||
private BackingApplications findBackingApplications(ServiceDefinition serviceDefinition,
|
||||
Plan plan) {
|
||||
BrokeredService brokeredService = findBrokeredService(serviceDefinition, plan);
|
||||
BackingApplications backingApplications = null;
|
||||
if (brokeredService != null) {
|
||||
backingApplications = BackingApplications.builder()
|
||||
.backingApplications(brokeredService.getApps())
|
||||
.build();
|
||||
}
|
||||
return backingApplications;
|
||||
}
|
||||
|
||||
private BackingServices findBackingServices(ServiceDefinition serviceDefinition,
|
||||
Plan plan) {
|
||||
BrokeredService brokeredService = findBrokeredService(serviceDefinition, plan);
|
||||
BackingServices backingServices = null;
|
||||
if (brokeredService != null && !CollectionUtils.isEmpty(brokeredService.getServices())) {
|
||||
backingServices = BackingServices.builder()
|
||||
.backingServices(brokeredService.getServices())
|
||||
.build();
|
||||
}
|
||||
return backingServices;
|
||||
}
|
||||
|
||||
private BrokeredService findBrokeredService(ServiceDefinition serviceDefinition,
|
||||
Plan plan) {
|
||||
String serviceName = serviceDefinition.getName();
|
||||
String planName = plan.getName();
|
||||
|
||||
return brokeredServices.stream()
|
||||
.filter(brokeredService ->
|
||||
brokeredService.getServiceName().equals(serviceName)
|
||||
&& brokeredService.getPlanName().equals(planName))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
private Mono<BrokeredService> findBrokeredService(ServiceDefinition serviceDefinition, Plan plan) {
|
||||
return Flux.fromIterable(brokeredServices)
|
||||
.filter(brokeredService -> brokeredService.getServiceName().equals(serviceDefinition.getName())
|
||||
&& brokeredService.getPlanName().equals(plan.getName()))
|
||||
.singleOrEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -87,10 +87,10 @@ public class AppDeploymentUpdateServiceInstanceWorkflow extends AppDeploymentIns
|
||||
|
||||
private Flux<String> updateBackingServices(UpdateServiceInstanceRequest request) {
|
||||
return getBackingServicesForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(backingServices ->
|
||||
targetService.addToBackingServices(backingServices,
|
||||
getTargetForService(request.getServiceDefinition(), request.getPlan()),
|
||||
.flatMap(backingServices -> getTargetForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(targetSpec -> targetService.addToBackingServices(backingServices, targetSpec,
|
||||
request.getServiceInstanceId()))
|
||||
.defaultIfEmpty(backingServices))
|
||||
.flatMap(backingServices ->
|
||||
servicesParametersTransformationService.transformParameters(backingServices,
|
||||
request.getParameters()))
|
||||
@@ -163,10 +163,10 @@ public class AppDeploymentUpdateServiceInstanceWorkflow extends AppDeploymentIns
|
||||
|
||||
private Flux<String> updateBackingApplications(UpdateServiceInstanceRequest request) {
|
||||
return getBackingApplicationsForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(backingApps ->
|
||||
targetService.addToBackingApplications(backingApps,
|
||||
getTargetForService(request.getServiceDefinition(), request.getPlan()),
|
||||
.flatMap(backingApps -> getTargetForService(request.getServiceDefinition(), request.getPlan())
|
||||
.flatMap(targetSpec -> targetService.addToBackingApplications(backingApps, targetSpec,
|
||||
request.getServiceInstanceId()))
|
||||
.defaultIfEmpty(backingApps))
|
||||
.flatMap(backingApps ->
|
||||
appsParametersTransformationService.transformParameters(backingApps, request.getParameters()))
|
||||
.flatMapMany(backingApps -> deploymentService.update(backingApps, request.getServiceInstanceId()))
|
||||
|
||||
@@ -234,8 +234,6 @@ class AppDeploymentDeleteServiceInstanceWorkflowTest {
|
||||
// no backing apps
|
||||
given(this.backingAppManagementService.getDeployedBackingApplications(eq(request.getServiceInstanceId())))
|
||||
.willReturn(Mono.empty());
|
||||
given(this.credentialProviderService.deleteCredentials(any(), eq(request.getServiceInstanceId())))
|
||||
.willReturn(Mono.empty());
|
||||
|
||||
given(this.backingServicesProvisionService.deleteServiceInstance(argThat(backingServices -> {
|
||||
boolean nameMatch = "my-service-instance".equals(backingServices.get(0).getServiceInstanceName());
|
||||
|
||||
Reference in New Issue
Block a user