package brainslug.example.spring;
import brainslug.flow.builder.FlowBuilder;
import brainslug.flow.context.BrainslugContext;
import brainslug.flow.context.ExecutionContext;
import brainslug.flow.execution.node.task.SimpleTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import static brainslug.flow.execution.property.ExecutionProperties.newProperties;
import static java.lang.String.format;
// # tag::spring-example[]
@Configuration
@Import(brainslug.spring.SpringBrainslugConfiguration.class)
public class ConfigurationExample {
@Component
public static class SpringExampleTask implements SimpleTask {
Environment environment;
@Autowired
public SpringExampleTask(Environment environment) {
this.environment = environment;
}
@Override
public void execute(ExecutionContext context) {
printHello(context.property("name", String.class));
context.service(SpringExampleTask.class).printHello("again");
}
public void printHello(String name) {
System.out.println(
format("Hello %s!", name)
);
}
}
@Bean
FlowBuilder flowBuilder() {
return new FlowBuilder() {
@Override
public void define() {
flowId(id("spring-flow"));
start(task(id("spring-task")).delegate(SpringExampleTask.class));
}
};
}
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext =
new AnnotationConfigApplicationContext(ConfigurationExample.class);
BrainslugContext brainslugContext = applicationContext.getBean(BrainslugContext.class);
brainslugContext.startFlow(FlowBuilder.id("spring-flow"),
newProperties().with("name", "World"));
}
}
//# end::spring-example[]