From df83f56d1f7d953fc5e0f5b448e71bdba05163be Mon Sep 17 00:00:00 2001 From: Ollie Hughes Date: Fri, 15 Jun 2018 16:40:37 +0100 Subject: [PATCH] Massively simplified foundational API focusing just on the app deployment initially --- .editorconfig | 11 +++ build.gradle | 54 +++++++++++++- gradle/wrapper/gradle-wrapper.properties | 1 + settings.gradle | 1 + .../appbroker/AppBrokerAutoConfiguration.java | 7 ++ .../config/WorkflowConfiguration.java | 30 ++++++++ .../config/ServiceBrokerLifecycleConfig.java | 8 +++ .../spi/ServiceInstanceProvisionService.java | 70 +++++++++++++++++++ .../appbroker/workflow/AppBrokerWorkflow.java | 9 +++ .../CreateServiceInstanceDefaultWorkflow.java | 34 +++++++++ .../CreateServiceInstanceWorkflow.java | 8 +++ .../DeleteServiceInstanceDefaultWorkflow.java | 12 ++++ .../DeleteServiceInstanceWorkflow.java | 8 +++ .../GetLastOperationDefaultWorkflow.java | 12 ++++ .../workflow/GetLastOperationWorkflow.java | 8 +++ .../GetServiceInstanceDefaultWorkflow.java | 12 ++++ .../workflow/GetServiceInstanceWorkflow.java | 8 +++ .../UpdateServiceInstanceDefaultWorkflow.java | 12 ++++ .../UpdateServiceInstanceWorkflow.java | 8 +++ .../CreateServiceRequestContext.java | 39 +++++++++++ ...ultCreateServiceBrokerResponseBuilder.java | 16 +++++ .../action/appdeploy/BackingAppDeployer.java | 10 +++ .../appdeploy/BackingAppParameters.java | 23 ++++++ .../action/appdeploy/BackingAppState.java | 16 +++++ ...CloudFoundryDefaultBackingAppDeployer.java | 15 ++++ 25 files changed, 431 insertions(+), 1 deletion(-) create mode 100644 .editorconfig create mode 100644 spring-cloud-app-broker-autoconfigure/src/main/java/org/springframework/cloud/appbroker/AppBrokerAutoConfiguration.java create mode 100644 spring-cloud-app-broker-autoconfigure/src/main/java/org/springframework/cloud/appbroker/config/WorkflowConfiguration.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/config/ServiceBrokerLifecycleConfig.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/spi/ServiceInstanceProvisionService.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/AppBrokerWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/CreateServiceInstanceDefaultWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/CreateServiceInstanceWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/DeleteServiceInstanceDefaultWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/DeleteServiceInstanceWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetLastOperationDefaultWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetLastOperationWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetServiceInstanceDefaultWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetServiceInstanceWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/UpdateServiceInstanceDefaultWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/UpdateServiceInstanceWorkflow.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/CreateServiceRequestContext.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/DefaultCreateServiceBrokerResponseBuilder.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppDeployer.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppParameters.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppState.java create mode 100644 spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/CloudFoundryDefaultBackingAppDeployer.java diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6745643 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +[*] +charset=utf-8 +end_of_line=lf +insert_final_newline=false +indent_style=space +indent_size=4 + +[*.java] +indent_style=tab +tab_width=4 + diff --git a/build.gradle b/build.gradle index 272ec46..95fdeee 100644 --- a/build.gradle +++ b/build.gradle @@ -17,8 +17,13 @@ configure(allprojects) { ext.springVersion = "5.0.5.RELEASE" } if (!project.hasProperty("springBootVersion")) { - ext.springBootVersion = "2.0.1.RELEASE" + ext.springBootVersion = "2.0.2.RELEASE" } + ext.springCloudOpenServiceBrokerVersion = "2.0.0.RC1" + ext.junitJupiterVersion = "5.2.0" + ext.assertjVersion = "3.10.0" + ext.mockitoVersion = "2.18.3" + ext.joolVersion = "0.9.13" apply plugin: "java" apply plugin: "maven" @@ -143,6 +148,53 @@ subprojects { subproject -> } } +project("spring-cloud-app-broker-core") { + description = "Spring Cloud App Broker Core" + + dependencyManagement { + imports { + mavenBom "org.springframework:spring-framework-bom:${springVersion}" + } + } + + dependencies { + compile("org.springframework:spring-core") + compile("org.springframework:spring-context") + compile("org.springframework.security:spring-security-core:${springVersion}") + compile("org.springframework.cloud:spring-cloud-open-service-broker-core:${springCloudOpenServiceBrokerVersion}") + compile("org.jooq:jool-java-8:${joolVersion}") + testCompile("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}") + testCompile("org.springframework:spring-test") { + exclude group:"commons-logging", module:"commons-logging" + } + testCompile("org.assertj:assertj-core:${assertjVersion}") + testCompile("org.mockito:mockito-core:${mockitoVersion}") + + } +} +project("spring-cloud-app-broker-autoconfigure") { + description = "Spring Cloud App Broker Core" + + dependencyManagement { + imports { + mavenBom "org.springframework:spring-framework-bom:${springVersion}" + mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}" + } + } + + dependencies { + compile project(":spring-cloud-app-broker-core") + compile("org.springframework.boot:spring-boot-starter-web") + compile("org.springframework.cloud:spring-cloud-open-service-broker-autoconfigure:${springCloudOpenServiceBrokerVersion}") + compile("org.jooq:jool-java-8:${joolVersion}") + testCompile("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}") + testCompile("org.springframework:spring-test") { + exclude group:"commons-logging", module:"commons-logging" + } + testCompile('org.springframework.boot:spring-boot-starter-test') + } +} + configure(rootProject) { description = "Spring Cloud App Broker" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cd3e30c..fbcf00f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ #Thu Jun 14 11:34:21 CDT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip diff --git a/settings.gradle b/settings.gradle index 4ad390e..a223f92 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,6 @@ rootProject.name = "spring-cloud-app-broker" include "spring-cloud-app-broker-core" +include "spring-cloud-app-broker-autoconfigure" include "spring-cloud-app-broker-deployer" include "spring-cloud-app-broker-deployer-cloudfoundry" diff --git a/spring-cloud-app-broker-autoconfigure/src/main/java/org/springframework/cloud/appbroker/AppBrokerAutoConfiguration.java b/spring-cloud-app-broker-autoconfigure/src/main/java/org/springframework/cloud/appbroker/AppBrokerAutoConfiguration.java new file mode 100644 index 0000000..5a44e9e --- /dev/null +++ b/spring-cloud-app-broker-autoconfigure/src/main/java/org/springframework/cloud/appbroker/AppBrokerAutoConfiguration.java @@ -0,0 +1,7 @@ +package org.springframework.cloud.appbroker; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AppBrokerAutoConfiguration { +} diff --git a/spring-cloud-app-broker-autoconfigure/src/main/java/org/springframework/cloud/appbroker/config/WorkflowConfiguration.java b/spring-cloud-app-broker-autoconfigure/src/main/java/org/springframework/cloud/appbroker/config/WorkflowConfiguration.java new file mode 100644 index 0000000..6e5a5ed --- /dev/null +++ b/spring-cloud-app-broker-autoconfigure/src/main/java/org/springframework/cloud/appbroker/config/WorkflowConfiguration.java @@ -0,0 +1,30 @@ +package org.springframework.cloud.appbroker.config; + +import java.util.concurrent.ConcurrentHashMap; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.cloud.appbroker.model.ServiceInstance; +import org.springframework.cloud.appbroker.pipeline.output.DeployedServices; +import org.springframework.cloud.appbroker.pipeline.output.GeneratedCredentials; +import org.springframework.cloud.appbroker.pipeline.output.PersistResponse; +import org.springframework.cloud.appbroker.pipeline.output.TransformedParameters; +import org.springframework.cloud.appbroker.pipeline.step.InMemoryPersistenceService; +import org.springframework.cloud.appbroker.pipeline.step.PersistenceService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class WorkflowConfiguration { + + @ConditionalOnMissingBean + @Bean + public PersistenceService, DeployedServices, DeployedApp, GeneratedCredentials, PersistResponse> + createServicePersistenceStep(ConcurrentHashMap inMemoryStore) { + return new InMemoryPersistenceService(inMemoryStore); + } + + @Bean + ConcurrentHashMap inMemoryStore() { + return new ConcurrentHashMap<>(); + } +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/config/ServiceBrokerLifecycleConfig.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/config/ServiceBrokerLifecycleConfig.java new file mode 100644 index 0000000..de7dfef --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/config/ServiceBrokerLifecycleConfig.java @@ -0,0 +1,8 @@ +package org.springframework.cloud.appbroker.config; + +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ServiceBrokerLifecycleConfig { + +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/spi/ServiceInstanceProvisionService.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/spi/ServiceInstanceProvisionService.java new file mode 100644 index 0000000..e43453e --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/spi/ServiceInstanceProvisionService.java @@ -0,0 +1,70 @@ +package org.springframework.cloud.appbroker.spi; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.appbroker.workflow.CreateServiceInstanceWorkflow; +import org.springframework.cloud.appbroker.workflow.DeleteServiceInstanceWorkflow; +import org.springframework.cloud.appbroker.workflow.GetLastOperationWorkflow; +import org.springframework.cloud.appbroker.workflow.GetServiceInstanceWorkflow; +import org.springframework.cloud.appbroker.workflow.UpdateServiceInstanceWorkflow; +import org.springframework.cloud.servicebroker.model.instance.CreateServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.CreateServiceInstanceResponse; +import org.springframework.cloud.servicebroker.model.instance.DeleteServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.DeleteServiceInstanceResponse; +import org.springframework.cloud.servicebroker.model.instance.GetLastServiceOperationRequest; +import org.springframework.cloud.servicebroker.model.instance.GetLastServiceOperationResponse; +import org.springframework.cloud.servicebroker.model.instance.GetServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.GetServiceInstanceResponse; +import org.springframework.cloud.servicebroker.model.instance.UpdateServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.UpdateServiceInstanceResponse; +import org.springframework.cloud.servicebroker.service.ServiceInstanceService; +import org.springframework.stereotype.Component; + +@Component +public class ServiceInstanceProvisionService implements ServiceInstanceService { + + private CreateServiceInstanceWorkflow createServiceInstanceWorkflow; + private DeleteServiceInstanceWorkflow deleteServiceInstanceWorkflow; + private GetLastOperationWorkflow getLastOperationWorkflow; + private GetServiceInstanceWorkflow getServiceInstanceWorkflow; + private UpdateServiceInstanceWorkflow updateServiceInstanceWorkflow; + + + @Autowired + public ServiceInstanceProvisionService(CreateServiceInstanceWorkflow createServiceInstanceWorkflow, + UpdateServiceInstanceWorkflow updateServiceInstanceWorkflow, + GetServiceInstanceWorkflow getServiceInstanceWorkflow, + GetLastOperationWorkflow getLastOperationWorkflow, + DeleteServiceInstanceWorkflow deleteServiceInstanceWorkflow) { + + this.createServiceInstanceWorkflow = createServiceInstanceWorkflow; + this.updateServiceInstanceWorkflow = updateServiceInstanceWorkflow; + this.getServiceInstanceWorkflow = getServiceInstanceWorkflow; + this.getLastOperationWorkflow = getLastOperationWorkflow; + this.deleteServiceInstanceWorkflow = deleteServiceInstanceWorkflow; + } + + @Override + public CreateServiceInstanceResponse createServiceInstance(CreateServiceInstanceRequest request) { + return createServiceInstanceWorkflow.perform(request); + } + + @Override + public DeleteServiceInstanceResponse deleteServiceInstance(DeleteServiceInstanceRequest request) { + return deleteServiceInstanceWorkflow.perform(request); + } + + @Override + public GetLastServiceOperationResponse getLastOperation(GetLastServiceOperationRequest request) { + return getLastOperationWorkflow.perform(request); + } + + @Override + public GetServiceInstanceResponse getServiceInstance(GetServiceInstanceRequest request) { + return getServiceInstanceWorkflow.perform(request); + } + + @Override + public UpdateServiceInstanceResponse updateServiceInstance(UpdateServiceInstanceRequest request) { + return updateServiceInstanceWorkflow.perform(request); + } +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/AppBrokerWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/AppBrokerWorkflow.java new file mode 100644 index 0000000..94bf188 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/AppBrokerWorkflow.java @@ -0,0 +1,9 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.ServiceBrokerRequest; + +public interface AppBrokerWorkflow { + + RES perform(REQ requestData); +} + diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/CreateServiceInstanceDefaultWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/CreateServiceInstanceDefaultWorkflow.java new file mode 100644 index 0000000..ea297e3 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/CreateServiceInstanceDefaultWorkflow.java @@ -0,0 +1,34 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.appbroker.workflow.createserviceinstance.CreateServiceRequestContext; +import org.springframework.cloud.appbroker.workflow.createserviceinstance.action.DefaultCreateServiceBrokerResponseBuilder; +import org.springframework.cloud.appbroker.workflow.createserviceinstance.action.appdeploy.BackingAppDeployer; +import org.springframework.cloud.appbroker.workflow.createserviceinstance.action.appdeploy.BackingAppParameters; +import org.springframework.cloud.servicebroker.model.instance.CreateServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.CreateServiceInstanceResponse; + +public class CreateServiceInstanceDefaultWorkflow implements CreateServiceInstanceWorkflow { + + private BackingAppDeployer backingAppDeployer; + private BackingAppParameters backingAppParameters; + private DefaultCreateServiceBrokerResponseBuilder createServiceBrokerResponseBuilder; + + @Autowired + public CreateServiceInstanceDefaultWorkflow(BackingAppDeployer backingAppDeployer, + BackingAppParameters backingAppParameters, + DefaultCreateServiceBrokerResponseBuilder createServiceBrokerResponseBuilder) { + + this.backingAppDeployer = backingAppDeployer; + this.backingAppParameters = backingAppParameters; + this.createServiceBrokerResponseBuilder = createServiceBrokerResponseBuilder; + } + + @Override + public CreateServiceInstanceResponse perform(CreateServiceInstanceRequest requestData) { + CreateServiceRequestContext requestContext = new CreateServiceRequestContext(requestData); + backingAppDeployer.accept(backingAppParameters, requestContext); + return createServiceBrokerResponseBuilder.apply(requestContext); + } + +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/CreateServiceInstanceWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/CreateServiceInstanceWorkflow.java new file mode 100644 index 0000000..e0a0ed8 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/CreateServiceInstanceWorkflow.java @@ -0,0 +1,8 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.instance.CreateServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.CreateServiceInstanceResponse; + +public interface CreateServiceInstanceWorkflow + extends AppBrokerWorkflow { +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/DeleteServiceInstanceDefaultWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/DeleteServiceInstanceDefaultWorkflow.java new file mode 100644 index 0000000..2a58ca9 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/DeleteServiceInstanceDefaultWorkflow.java @@ -0,0 +1,12 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.instance.DeleteServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.DeleteServiceInstanceResponse; + +public class DeleteServiceInstanceDefaultWorkflow implements DeleteServiceInstanceWorkflow { + + @Override + public DeleteServiceInstanceResponse perform(DeleteServiceInstanceRequest requestData) { + return null; + } +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/DeleteServiceInstanceWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/DeleteServiceInstanceWorkflow.java new file mode 100644 index 0000000..3a3f572 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/DeleteServiceInstanceWorkflow.java @@ -0,0 +1,8 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.instance.DeleteServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.DeleteServiceInstanceResponse; + +public interface DeleteServiceInstanceWorkflow + extends AppBrokerWorkflow { +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetLastOperationDefaultWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetLastOperationDefaultWorkflow.java new file mode 100644 index 0000000..66f9219 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetLastOperationDefaultWorkflow.java @@ -0,0 +1,12 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.instance.GetLastServiceOperationRequest; +import org.springframework.cloud.servicebroker.model.instance.GetLastServiceOperationResponse; + +public class GetLastOperationDefaultWorkflow implements GetLastOperationWorkflow { + + @Override + public GetLastServiceOperationResponse perform(GetLastServiceOperationRequest requestData) { + return null; + } +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetLastOperationWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetLastOperationWorkflow.java new file mode 100644 index 0000000..d6d1adb --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetLastOperationWorkflow.java @@ -0,0 +1,8 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.instance.GetLastServiceOperationRequest; +import org.springframework.cloud.servicebroker.model.instance.GetLastServiceOperationResponse; + +public interface GetLastOperationWorkflow + extends AppBrokerWorkflow { +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetServiceInstanceDefaultWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetServiceInstanceDefaultWorkflow.java new file mode 100644 index 0000000..5598e39 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetServiceInstanceDefaultWorkflow.java @@ -0,0 +1,12 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.instance.GetServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.GetServiceInstanceResponse; + +public class GetServiceInstanceDefaultWorkflow implements GetServiceInstanceWorkflow { + + @Override + public GetServiceInstanceResponse perform(GetServiceInstanceRequest requestData) { + return null; + } +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetServiceInstanceWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetServiceInstanceWorkflow.java new file mode 100644 index 0000000..17bd09f --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/GetServiceInstanceWorkflow.java @@ -0,0 +1,8 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.instance.GetServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.GetServiceInstanceResponse; + +public interface GetServiceInstanceWorkflow + extends AppBrokerWorkflow { +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/UpdateServiceInstanceDefaultWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/UpdateServiceInstanceDefaultWorkflow.java new file mode 100644 index 0000000..cc0b506 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/UpdateServiceInstanceDefaultWorkflow.java @@ -0,0 +1,12 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.instance.UpdateServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.UpdateServiceInstanceResponse; + +public class UpdateServiceInstanceDefaultWorkflow implements UpdateServiceInstanceWorkflow { + + @Override + public UpdateServiceInstanceResponse perform(UpdateServiceInstanceRequest requestData) { + return null; + } +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/UpdateServiceInstanceWorkflow.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/UpdateServiceInstanceWorkflow.java new file mode 100644 index 0000000..c94d702 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/UpdateServiceInstanceWorkflow.java @@ -0,0 +1,8 @@ +package org.springframework.cloud.appbroker.workflow; + +import org.springframework.cloud.servicebroker.model.instance.UpdateServiceInstanceRequest; +import org.springframework.cloud.servicebroker.model.instance.UpdateServiceInstanceResponse; + +public interface UpdateServiceInstanceWorkflow + extends AppBrokerWorkflow { +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/CreateServiceRequestContext.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/CreateServiceRequestContext.java new file mode 100644 index 0000000..684995b --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/CreateServiceRequestContext.java @@ -0,0 +1,39 @@ +package org.springframework.cloud.appbroker.workflow.createserviceinstance; + +import org.springframework.cloud.appbroker.workflow.createserviceinstance.action.appdeploy.BackingAppState; +import org.springframework.cloud.servicebroker.model.instance.CreateServiceInstanceRequest; + +public class CreateServiceRequestContext { + + private BackingAppState backingAppState; + private boolean instanceExisted; + private CreateServiceInstanceRequest originatingRequest; + + public CreateServiceRequestContext(CreateServiceInstanceRequest requestData) { + this.originatingRequest = requestData; + } + + public BackingAppState getBackingAppState() { + return backingAppState; + } + + public void setBackingAppState(BackingAppState backingAppState) { + this.backingAppState = backingAppState; + } + + public boolean getInstanceExisted() { + return instanceExisted; + } + + public void setInstanceExisted(boolean instanceExisted) { + this.instanceExisted = instanceExisted; + } + + public CreateServiceInstanceRequest getOriginatingRequest() { + return originatingRequest; + } + + public void setOriginatingRequest(CreateServiceInstanceRequest originatingRequest) { + this.originatingRequest = originatingRequest; + } +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/DefaultCreateServiceBrokerResponseBuilder.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/DefaultCreateServiceBrokerResponseBuilder.java new file mode 100644 index 0000000..c7c05be --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/DefaultCreateServiceBrokerResponseBuilder.java @@ -0,0 +1,16 @@ +package org.springframework.cloud.appbroker.workflow.createserviceinstance.action; + +import java.util.function.Function; + +import org.springframework.cloud.appbroker.workflow.createserviceinstance.CreateServiceRequestContext; +import org.springframework.cloud.servicebroker.model.instance.CreateServiceInstanceResponse; + +public interface DefaultCreateServiceBrokerResponseBuilder extends Function { + + default CreateServiceInstanceResponse apply(CreateServiceRequestContext createServiceRequestContext) { + return CreateServiceInstanceResponse.builder() + .instanceExisted(createServiceRequestContext.getInstanceExisted()) + .build(); + } + +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppDeployer.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppDeployer.java new file mode 100644 index 0000000..57ed3b5 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppDeployer.java @@ -0,0 +1,10 @@ +package org.springframework.cloud.appbroker.workflow.createserviceinstance.action.appdeploy; + +import java.util.function.BiConsumer; + +import org.springframework.cloud.appbroker.workflow.createserviceinstance.CreateServiceRequestContext; + + +public interface BackingAppDeployer extends BiConsumer { + +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppParameters.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppParameters.java new file mode 100644 index 0000000..7ab7277 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppParameters.java @@ -0,0 +1,23 @@ +package org.springframework.cloud.appbroker.workflow.createserviceinstance.action.appdeploy; + +import java.util.Map; + +public class BackingAppParameters { + + private final String name; + + private final Map properties; + + public BackingAppParameters(String name, Map properties) { + this.name = name; + this.properties = properties; + } + + public String getName() { + return name; + } + + public Map getProperties() { + return properties; + } +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppState.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppState.java new file mode 100644 index 0000000..14ee275 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/BackingAppState.java @@ -0,0 +1,16 @@ +package org.springframework.cloud.appbroker.workflow.createserviceinstance.action.appdeploy; + +import java.util.Map; + +public class BackingAppState { + + private Map state; + + public BackingAppState(Map state) { + this.state = state; + } + + public Map getState() { + return state; + } +} diff --git a/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/CloudFoundryDefaultBackingAppDeployer.java b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/CloudFoundryDefaultBackingAppDeployer.java new file mode 100644 index 0000000..4c77432 --- /dev/null +++ b/spring-cloud-app-broker-core/src/main/java/org/springframework/cloud/appbroker/workflow/createserviceinstance/action/appdeploy/CloudFoundryDefaultBackingAppDeployer.java @@ -0,0 +1,15 @@ +package org.springframework.cloud.appbroker.workflow.createserviceinstance.action.appdeploy; + +import java.util.Collections; + +import org.springframework.cloud.appbroker.workflow.createserviceinstance.CreateServiceRequestContext; + +public class CloudFoundryDefaultBackingAppDeployer implements BackingAppDeployer { + + @Override + public void accept(BackingAppParameters backingAppParameters, CreateServiceRequestContext createServiceRequestContext) { + //Deploy app and store any data generated by the platform that might need to be persisted, such as app guid or generated route + createServiceRequestContext.setBackingAppState(new BackingAppState(Collections.emptyMap())); + } + +}