Prune switch-dispatch call paths and scope analysis per state machine.
Switch-case constraints on call-graph edges and forward path binding stop string-key endpoints from linking every dispatch arm; machine-scoped triggers/call chains reduce cross-config noise, with pipeline bug fixes and regression coverage. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -550,6 +550,28 @@ class AccessorInliningDataFlowTest {
|
||||
assertResolvedValue(tempDir, "value", "SUPER");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldResolveInterfaceEnumGetterViaConcreteImplementation(@TempDir Path tempDir) throws IOException {
|
||||
writeJava(tempDir, "com/example/Runner.java", """
|
||||
package com.example;
|
||||
public class Runner {
|
||||
public interface RichEvent {
|
||||
EventType getType();
|
||||
}
|
||||
public static class PayEvent implements RichEvent {
|
||||
public EventType getType() { return EventType.PAY; }
|
||||
}
|
||||
public void run() {
|
||||
RichEvent event = new PayEvent();
|
||||
EventType value = event.getType();
|
||||
}
|
||||
}
|
||||
enum EventType { PAY, SHIP }
|
||||
""");
|
||||
|
||||
assertResolvedValue(tempDir, "value", "EventType.PAY");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnEmptyWhenAccessorIndexHasNoEntry(@TempDir Path tempDir) throws IOException {
|
||||
writeJava(tempDir, "com/example/Runner.java", """
|
||||
|
||||
@@ -0,0 +1,176 @@
|
||||
package click.kamil.springstatemachineexporter.analysis.pipeline;
|
||||
|
||||
import click.kamil.springstatemachineexporter.analysis.resolver.ConstantResolver;
|
||||
import click.kamil.springstatemachineexporter.analysis.service.ConstructorAnalyzer;
|
||||
import click.kamil.springstatemachineexporter.analysis.service.ConstantExtractor;
|
||||
import click.kamil.springstatemachineexporter.analysis.service.VariableTracer;
|
||||
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
|
||||
import org.eclipse.jdt.core.dom.TypeDeclaration;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class AccessorPipelineBugFixTest {
|
||||
|
||||
@TempDir
|
||||
Path tempDir;
|
||||
|
||||
CodebaseContext context;
|
||||
ConstantExtractor constantExtractor;
|
||||
ConstructorAnalyzer constructorAnalyzer;
|
||||
AccessorResolver accessorResolver;
|
||||
VariableTracer variableTracer;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws IOException {
|
||||
context = new CodebaseContext();
|
||||
context.setResolveBindings(true);
|
||||
context.setSourcepath(List.of(tempDir.toAbsolutePath().toString()));
|
||||
ConstantResolver constantResolver = context.getConstantResolver();
|
||||
constantExtractor = new ConstantExtractor(context, constantResolver, mi -> null);
|
||||
constructorAnalyzer = new ConstructorAnalyzer(context, constantResolver);
|
||||
variableTracer = new VariableTracer(context, constantResolver);
|
||||
constantExtractor.setVariableTracer(variableTracer);
|
||||
constantExtractor.setConstructorAnalyzer(constructorAnalyzer);
|
||||
accessorResolver = new AccessorResolver(context, constantExtractor, constructorAnalyzer, constantResolver);
|
||||
constantExtractor.setAccessorResolver(accessorResolver);
|
||||
}
|
||||
|
||||
private void writeJava(String relativePath, String source) throws IOException {
|
||||
Path file = tempDir.resolve(relativePath);
|
||||
Files.createDirectories(file.getParent());
|
||||
Files.writeString(file, source);
|
||||
}
|
||||
|
||||
private void scanWorkspace() throws IOException {
|
||||
context.scan(tempDir);
|
||||
}
|
||||
|
||||
@Nested
|
||||
class ConstructorAnalyzerSubclassPollution {
|
||||
|
||||
@Test
|
||||
void shouldNotPullSubclassFieldValuesWhenTracingConcreteBaseType() throws IOException {
|
||||
writeJava("com/example/Base.java", """
|
||||
package com.example;
|
||||
public class Base {
|
||||
protected String token;
|
||||
}
|
||||
""");
|
||||
writeJava("com/example/Sub.java", """
|
||||
package com.example;
|
||||
public class Sub extends Base {
|
||||
public Sub() { this.token = "SUB_ONLY"; }
|
||||
}
|
||||
""");
|
||||
scanWorkspace();
|
||||
|
||||
TypeDeclaration baseTd = context.getTypeDeclaration("com.example.Base");
|
||||
List<String> traced = constructorAnalyzer.traceFieldInConstructors(
|
||||
baseTd, "token", context, new HashSet<>(), ResolutionBudget.defaults());
|
||||
|
||||
assertThat(traced).doesNotContain("SUB_ONLY");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
class ConstantExtractorAbstractBodyWidening {
|
||||
|
||||
@Test
|
||||
void shouldWidenToImplementationsWhenInterfaceMethodHasNoBody() throws IOException {
|
||||
writeJava("com/example/Code.java", """
|
||||
package com.example;
|
||||
public enum Code { A, B }
|
||||
""");
|
||||
writeJava("com/example/RichEvent.java", """
|
||||
package com.example;
|
||||
public interface RichEvent {
|
||||
Code getCode();
|
||||
}
|
||||
""");
|
||||
writeJava("com/example/EventA.java", """
|
||||
package com.example;
|
||||
public class EventA implements RichEvent {
|
||||
public Code getCode() { return Code.A; }
|
||||
}
|
||||
""");
|
||||
writeJava("com/example/EventB.java", """
|
||||
package com.example;
|
||||
public class EventB implements RichEvent {
|
||||
public Code getCode() { return Code.B; }
|
||||
}
|
||||
""");
|
||||
scanWorkspace();
|
||||
|
||||
List<String> resolved = constantExtractor.resolveMethodReturnConstant(
|
||||
"com.example.RichEvent", "getCode", 0, new HashSet<>(), null);
|
||||
|
||||
assertThat(resolved).containsExactlyInAnyOrder("Code.A", "Code.B");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
class AccessorResolverCacheKey {
|
||||
|
||||
@Test
|
||||
void shouldNotReuseCachedResultWhenFieldValuesDiffer() throws IOException {
|
||||
writeJava("com/example/Payload.java", """
|
||||
package com.example;
|
||||
public class Payload {
|
||||
private String event;
|
||||
public String getEvent() { return event; }
|
||||
}
|
||||
""");
|
||||
scanWorkspace();
|
||||
|
||||
TypeDeclaration td = context.getTypeDeclaration("com.example.Payload");
|
||||
Map<String, String> valuesA = new HashMap<>(Map.of("event", "PAY"));
|
||||
Map<String, String> valuesB = new HashMap<>(Map.of("event", "CANCEL"));
|
||||
|
||||
List<String> pay = accessorResolver.resolve(
|
||||
"com.example.Payload",
|
||||
"getEvent",
|
||||
new AccessorResolver.ReceiverContext(td, null, null, false, valuesA),
|
||||
ResolutionBudget.defaults());
|
||||
List<String> cancel = accessorResolver.resolve(
|
||||
"com.example.Payload",
|
||||
"getEvent",
|
||||
new AccessorResolver.ReceiverContext(td, null, null, false, valuesB),
|
||||
ResolutionBudget.defaults());
|
||||
|
||||
assertThat(pay).containsExactly("PAY");
|
||||
assertThat(cancel).containsExactly("CANCEL");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
class InlineAccessorsDisabled {
|
||||
|
||||
@Test
|
||||
void shouldSkipIndexedDataflowShortcutWhenDisabled() throws IOException {
|
||||
writeJava("com/example/Payload.java", """
|
||||
package com.example;
|
||||
public class Payload {
|
||||
private String event = "INLINE";
|
||||
public String getEvent() { return event; }
|
||||
}
|
||||
""");
|
||||
context.setInlineAccessors(false);
|
||||
scanWorkspace();
|
||||
|
||||
assertThat(context.getAccessorIndex().trivialCount()).isZero();
|
||||
assertThat(context.isInlineAccessors()).isFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package click.kamil.springstatemachineexporter.analysis.resolver;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class BooleanConstraintEvaluatorBindingsTest {
|
||||
|
||||
@Test
|
||||
void shouldAcceptMatchingEnumSwitchConstraint() {
|
||||
assertThat(BooleanConstraintEvaluator.isCompatibleWithBindings(
|
||||
"command == ORDER_PAY",
|
||||
Map.of("command", "DomainCommand.ORDER_PAY"))).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldRejectMismatchedEnumSwitchConstraint() {
|
||||
assertThat(BooleanConstraintEvaluator.isCompatibleWithBindings(
|
||||
"command == ORDER_SHIP",
|
||||
Map.of("command", "DomainCommand.ORDER_PAY"))).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldAcceptMatchingStringSwitchConstraint() {
|
||||
assertThat(BooleanConstraintEvaluator.isCompatibleWithBindings(
|
||||
"commandKey == \"order.pay\"",
|
||||
Map.of("commandKey", "order.pay"))).isTrue();
|
||||
}
|
||||
}
|
||||
@@ -74,6 +74,32 @@ class AnalysisCacheCorrectnessTest {
|
||||
assertThat(context.getCache().get("heuristicCallGraph")).isSameAs(cachedGraph);
|
||||
}
|
||||
|
||||
@Test
|
||||
void jdtIntelligenceProviderShouldCacheCallChains(@TempDir Path tempDir) throws Exception {
|
||||
String source = """
|
||||
package com.example;
|
||||
class A { void go() { new B().run("PAY"); } }
|
||||
class B { void run(String s) { new C().fire(com.example.E.PAY); } }
|
||||
enum E { PAY, SHIP }
|
||||
class C { void fire(E e) {} }
|
||||
""";
|
||||
Files.writeString(tempDir.resolve("App.java"), source);
|
||||
CodebaseContext context = new CodebaseContext();
|
||||
context.setResolveBindings(true);
|
||||
context.scan(tempDir);
|
||||
|
||||
JdtIntelligenceProvider intelligence = new JdtIntelligenceProvider(context, tempDir);
|
||||
EntryPoint entry = EntryPoint.builder().className("com.example.A").methodName("go").build();
|
||||
TriggerPoint trigger = TriggerPoint.builder().className("com.example.C").methodName("fire").event("e").build();
|
||||
List<EntryPoint> entryPoints = List.of(entry);
|
||||
List<TriggerPoint> triggers = List.of(trigger);
|
||||
|
||||
List<CallChain> first = intelligence.findCallChains(entryPoints, triggers);
|
||||
List<CallChain> second = intelligence.findCallChains(entryPoints, triggers);
|
||||
|
||||
assertThat(second).isSameAs(first);
|
||||
}
|
||||
|
||||
/**
|
||||
* Two consecutive {@link CallGraphEngine#findChains} calls on a cached graph must agree.
|
||||
*/
|
||||
|
||||
@@ -58,6 +58,50 @@ class LayeredDispatcherSampleTest {
|
||||
"OrderTransitionEvent.PAY", "OrderState.NEW", "OrderState.PAID");
|
||||
assertEndpointLinksSingleTransition(orderMachine, "POST /api/orders/rich/ship",
|
||||
"OrderTransitionEvent.SHIP", "OrderState.PAID", "OrderState.SHIPPED");
|
||||
|
||||
assertEndpointLinksSingleTransition(orderMachine, "POST /api/string-dispatch/orders/pay",
|
||||
"OrderTransitionEvent.PAY", "OrderState.NEW", "OrderState.PAID");
|
||||
assertEndpointLinksSingleTransition(orderMachine, "POST /api/string-dispatch/orders/ship",
|
||||
"OrderTransitionEvent.SHIP", "OrderState.PAID", "OrderState.SHIPPED");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldLinkOnlyOneMatchedTransitionPerStringDispatchEndpoint(@TempDir Path tempDir) throws Exception {
|
||||
Path sampleRoot = findProjectRoot().resolve("state_machines/layered_dispatcher_sample");
|
||||
ExportService exportService = new ExportService(List.of(new JsonExporter()));
|
||||
exportService.runExporter(sampleRoot, tempDir, List.of("json"), true, List.of(), null, null,
|
||||
click.kamil.springstatemachineexporter.exporter.EnumFormat.fn,
|
||||
click.kamil.springstatemachineexporter.exporter.EnumFormat.fn);
|
||||
|
||||
JsonNode orderMachine = readMachineJson(tempDir, "StandardOrderStateMachineConfiguration", new ObjectMapper());
|
||||
|
||||
assertSingleMatchedChain(orderMachine, "POST /api/string-dispatch/orders/pay", "OrderTransitionEvent.PAY");
|
||||
assertSingleMatchedChain(orderMachine, "POST /api/string-dispatch/orders/ship", "OrderTransitionEvent.SHIP");
|
||||
}
|
||||
|
||||
private static void assertSingleMatchedChain(JsonNode machineJson, String endpointName, String expectedEvent) {
|
||||
List<JsonNode> matchedChains = findMatchedCallChains(machineJson, endpointName);
|
||||
assertThat(matchedChains).as("matched chains for %s", endpointName).hasSize(1);
|
||||
assertThat(matchedChains.get(0).get("matchedTransitions")).hasSize(1);
|
||||
assertThat(matchedChains.get(0).get("matchedTransitions").get(0).get("event").asText()).isEqualTo(expectedEvent);
|
||||
}
|
||||
|
||||
private static List<JsonNode> findMatchedCallChains(JsonNode machineJson, String endpointName) {
|
||||
JsonNode callChains = machineJson.path("metadata").path("callChains");
|
||||
if (!callChains.isArray()) {
|
||||
return List.of();
|
||||
}
|
||||
List<JsonNode> result = new java.util.ArrayList<>();
|
||||
for (JsonNode chain : callChains) {
|
||||
if (!endpointName.equals(chain.path("entryPoint").path("name").asText())) {
|
||||
continue;
|
||||
}
|
||||
JsonNode matched = chain.get("matchedTransitions");
|
||||
if (matched != null && matched.isArray() && !matched.isEmpty()) {
|
||||
result.add(chain);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static JsonNode readMachineJson(Path outputDir, String configBaseName, ObjectMapper mapper)
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
package click.kamil.springstatemachineexporter.analysis.service;
|
||||
|
||||
import click.kamil.springstatemachineexporter.analysis.model.CallEdge;
|
||||
import click.kamil.springstatemachineexporter.analysis.model.EntryPoint;
|
||||
import click.kamil.springstatemachineexporter.analysis.model.TriggerPoint;
|
||||
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class PathBindingEvaluatorTest {
|
||||
|
||||
@Test
|
||||
void shouldPruneImpossibleSwitchDispatchArms(@TempDir Path tempDir) throws Exception {
|
||||
String source = """
|
||||
package com.example;
|
||||
public class ApiController {
|
||||
private final CommandGateway gateway = new CommandGateway();
|
||||
public void pay() { gateway.executeViaMapper("order.pay"); }
|
||||
}
|
||||
enum DomainCommand { ORDER_PAY, ORDER_SHIP }
|
||||
enum OrderEvent { PAY, SHIP }
|
||||
class CommandGateway {
|
||||
private final StringCommandMapper mapper = new StringCommandMapper();
|
||||
private final CentralDispatcher central = new CentralDispatcher();
|
||||
void executeViaMapper(String commandKey) {
|
||||
DomainCommand command = mapper.fromString(commandKey);
|
||||
central.dispatch(command);
|
||||
}
|
||||
}
|
||||
class StringCommandMapper {
|
||||
DomainCommand fromString(String commandKey) {
|
||||
return switch (commandKey) {
|
||||
case "order.pay" -> DomainCommand.ORDER_PAY;
|
||||
case "order.ship" -> DomainCommand.ORDER_SHIP;
|
||||
default -> throw new IllegalArgumentException(commandKey);
|
||||
};
|
||||
}
|
||||
}
|
||||
class CentralDispatcher {
|
||||
void dispatch(DomainCommand command) {
|
||||
switch (command) {
|
||||
case ORDER_PAY -> orderPay();
|
||||
case ORDER_SHIP -> orderShip();
|
||||
}
|
||||
}
|
||||
void orderPay() { fire(OrderEvent.PAY); }
|
||||
void orderShip() { fire(OrderEvent.SHIP); }
|
||||
void fire(OrderEvent event) {}
|
||||
}
|
||||
""";
|
||||
Files.writeString(tempDir.resolve("App.java"), source);
|
||||
|
||||
CodebaseContext context = new CodebaseContext();
|
||||
context.setResolveBindings(true);
|
||||
context.scan(tempDir);
|
||||
|
||||
HeuristicCallGraphEngine engine = new HeuristicCallGraphEngine(context);
|
||||
Map<String, List<CallEdge>> graph = engine.buildCallGraph();
|
||||
|
||||
CallGraphPathFinder pathFinder = new CallGraphPathFinder(context);
|
||||
List<List<String>> rawPaths = pathFinder.findAllPaths(
|
||||
"com.example.ApiController.pay",
|
||||
"com.example.CentralDispatcher.fire",
|
||||
graph,
|
||||
new java.util.HashSet<>());
|
||||
assertThat(rawPaths).hasSize(2);
|
||||
|
||||
PathBindingEvaluator evaluator = new PathBindingEvaluator(
|
||||
context, engine.variableTracer, context.getConstantResolver(), engine.typeResolver);
|
||||
|
||||
List<CallEdge> dispatchEdges = graph.get("com.example.CentralDispatcher.dispatch");
|
||||
assertThat(dispatchEdges.stream().map(CallEdge::getConstraint).filter(c -> c != null && !c.isBlank()))
|
||||
.isNotEmpty();
|
||||
|
||||
boolean payPathCompatible = evaluator.isPathCompatible(rawPaths.get(0), graph, pathFinder);
|
||||
Map<String, String> payBindings = evaluator.traceBindings(rawPaths.get(0), graph, pathFinder);
|
||||
assertThat(payBindings)
|
||||
.as("pay path bindings, compatible=%s", payPathCompatible)
|
||||
.containsEntry("command", "DomainCommand.ORDER_PAY");
|
||||
|
||||
EntryPoint entry = EntryPoint.builder().className("com.example.ApiController").methodName("pay").build();
|
||||
TriggerPoint trigger = TriggerPoint.builder()
|
||||
.className("com.example.CentralDispatcher")
|
||||
.methodName("fire")
|
||||
.event("event")
|
||||
.build();
|
||||
|
||||
List<click.kamil.springstatemachineexporter.analysis.model.CallChain> chains =
|
||||
engine.findChains(List.of(entry), List.of(trigger));
|
||||
|
||||
assertThat(chains).hasSize(1);
|
||||
assertThat(chains.get(0).getMethodChain()).contains("com.example.CentralDispatcher.orderPay");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package click.kamil.springstatemachineexporter.analysis.service;
|
||||
|
||||
import click.kamil.springstatemachineexporter.exporter.JsonExporter;
|
||||
import click.kamil.springstatemachineexporter.service.ExportService;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Verifies switch-case branch pruning for string-key dispatch chains.
|
||||
*/
|
||||
class StringDispatchCallGraphGapTest {
|
||||
|
||||
private static Path findProjectRoot() {
|
||||
Path current = Path.of(".").toAbsolutePath();
|
||||
while (current != null && !Files.exists(current.resolve("settings.gradle"))) {
|
||||
current = current.getParent();
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
@Test
|
||||
void payStringDispatchEndpointShouldMatchOnlyPayTransition(@TempDir Path tempDir) throws Exception {
|
||||
Path sampleRoot = findProjectRoot().resolve("state_machines/layered_dispatcher_sample");
|
||||
ExportService exportService = new ExportService(List.of(new JsonExporter()));
|
||||
exportService.runExporter(sampleRoot, tempDir, List.of("json"), true, List.of(), null, null,
|
||||
click.kamil.springstatemachineexporter.exporter.EnumFormat.fn,
|
||||
click.kamil.springstatemachineexporter.exporter.EnumFormat.fn);
|
||||
|
||||
JsonNode orderMachine = readMachineJson(tempDir, "StandardOrderStateMachineConfiguration", new ObjectMapper());
|
||||
List<JsonNode> matchedChains = findMatchedCallChains(orderMachine, "POST /api/string-dispatch/orders/pay");
|
||||
|
||||
assertThat(matchedChains).hasSize(1);
|
||||
assertThat(matchedChains.get(0).get("matchedTransitions")).hasSize(1);
|
||||
assertThat(matchedChains.get(0).get("matchedTransitions").get(0).get("event").asText())
|
||||
.isEqualTo("OrderTransitionEvent.PAY");
|
||||
}
|
||||
|
||||
private static JsonNode readMachineJson(Path outputDir, String configBaseName, ObjectMapper mapper)
|
||||
throws Exception {
|
||||
Path machineDir;
|
||||
try (var stream = Files.list(outputDir)) {
|
||||
machineDir = stream
|
||||
.filter(Files::isDirectory)
|
||||
.filter(path -> path.getFileName().toString().endsWith(configBaseName))
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new IllegalStateException("No output for " + configBaseName));
|
||||
}
|
||||
Path jsonFile = machineDir.resolve(machineDir.getFileName() + ".json");
|
||||
return mapper.readTree(jsonFile.toFile());
|
||||
}
|
||||
|
||||
private static List<JsonNode> findMatchedCallChains(JsonNode machineJson, String endpointName) {
|
||||
JsonNode callChains = machineJson.path("metadata").path("callChains");
|
||||
if (!callChains.isArray()) {
|
||||
return List.of();
|
||||
}
|
||||
List<JsonNode> result = new ArrayList<>();
|
||||
for (JsonNode chain : callChains) {
|
||||
if (!endpointName.equals(chain.path("entryPoint").path("name").asText())) {
|
||||
continue;
|
||||
}
|
||||
JsonNode matched = chain.get("matchedTransitions");
|
||||
if (matched != null && matched.isArray() && !matched.isEmpty()) {
|
||||
result.add(chain);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package click.kamil.springstatemachineexporter.ast.common;
|
||||
|
||||
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
|
||||
import org.eclipse.jdt.core.dom.*;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class AstUtilsSwitchConstraintTest {
|
||||
|
||||
@Test
|
||||
void shouldExtractSwitchCaseConstraintForArrowSwitch(@TempDir Path tempDir) throws Exception {
|
||||
String source = """
|
||||
package com.example;
|
||||
class Demo {
|
||||
void dispatch(DomainCommand command) {
|
||||
switch (command) {
|
||||
case ORDER_PAY -> orderPay();
|
||||
case ORDER_SHIP -> orderShip();
|
||||
}
|
||||
}
|
||||
void orderPay() {}
|
||||
void orderShip() {}
|
||||
}
|
||||
enum DomainCommand { ORDER_PAY, ORDER_SHIP }
|
||||
""";
|
||||
Files.writeString(tempDir.resolve("Demo.java"), source);
|
||||
|
||||
CodebaseContext context = new CodebaseContext();
|
||||
context.setResolveBindings(true);
|
||||
context.scan(tempDir);
|
||||
|
||||
AtomicReference<MethodInvocation> orderPayCall = new AtomicReference<>();
|
||||
for (CompilationUnit cu : context.getCompilationUnits()) {
|
||||
cu.accept(new ASTVisitor() {
|
||||
@Override
|
||||
public boolean visit(MethodInvocation node) {
|
||||
if ("orderPay".equals(node.getName().getIdentifier())
|
||||
&& node.getExpression() == null) {
|
||||
orderPayCall.set(node);
|
||||
}
|
||||
return super.visit(node);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (orderPayCall.get() == null) {
|
||||
org.junit.jupiter.api.Assertions.fail("orderPay MethodInvocation not found in AST");
|
||||
}
|
||||
assertThat(AstUtils.findEnclosingSwitchCase(orderPayCall.get())).isNotNull();
|
||||
String constraint = AstUtils.findConditionConstraint(orderPayCall.get());
|
||||
assertThat(constraint).contains("command == ORDER_PAY");
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,6 @@
|
||||
{
|
||||
"metadata" : {
|
||||
"triggers" : [ {
|
||||
"event" : "event",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : null,
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
}, {
|
||||
"event" : "event",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
@@ -154,96 +141,6 @@
|
||||
} ]
|
||||
} ],
|
||||
"callChains" : [ {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.OrderController",
|
||||
"methodName" : "pay",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/OrderController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.OrderController.pay", "click.kamil.examples.statemachine.layered.web.CommandGateway.payOrder", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderPay", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.PAY",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.PAY" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.OrderController",
|
||||
"methodName" : "ship",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/OrderController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.OrderController.ship", "click.kamil.examples.statemachine.layered.web.CommandGateway.shipOrder", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderShip", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.SHIP",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.SHIP" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/orders/cancel",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.OrderController",
|
||||
"methodName" : "cancel",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/OrderController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/orders/cancel",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.OrderController.cancel", "click.kamil.examples.statemachine.layered.web.CommandGateway.cancelOrder", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderCancel", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.CANCEL",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.CANCEL" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/documents/submit",
|
||||
@@ -345,552 +242,6 @@
|
||||
"targetState" : "DocumentState.REJECTED",
|
||||
"event" : "DocumentTransitionEvent.REJECT"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderPay", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.PAY",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.PAY" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderShip", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.SHIP",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.SHIP" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderCancel", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.CANCEL",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.CANCEL" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentSubmit", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.SUBMIT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.SUBMIT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "DocumentState.DRAFT",
|
||||
"targetState" : "DocumentState.SUBMITTED",
|
||||
"event" : "DocumentTransitionEvent.SUBMIT"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentApprove", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.APPROVE",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.APPROVE" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "DocumentState.SUBMITTED",
|
||||
"targetState" : "DocumentState.APPROVED",
|
||||
"event" : "DocumentTransitionEvent.APPROVE"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentReject", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.REJECT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.REJECT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "DocumentState.SUBMITTED",
|
||||
"targetState" : "DocumentState.REJECTED",
|
||||
"event" : "DocumentTransitionEvent.REJECT"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderPay", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.PAY",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.PAY" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderShip", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.SHIP",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.SHIP" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderCancel", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.CANCEL",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.CANCEL" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentSubmit", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.SUBMIT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.SUBMIT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "DocumentState.DRAFT",
|
||||
"targetState" : "DocumentState.SUBMITTED",
|
||||
"event" : "DocumentTransitionEvent.SUBMIT"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentApprove", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.APPROVE",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.APPROVE" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "DocumentState.SUBMITTED",
|
||||
"targetState" : "DocumentState.APPROVED",
|
||||
"event" : "DocumentTransitionEvent.APPROVE"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentReject", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.REJECT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.REJECT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "DocumentState.SUBMITTED",
|
||||
"targetState" : "DocumentState.REJECTED",
|
||||
"event" : "DocumentTransitionEvent.REJECT"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/orders/rich/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.RichOrderController",
|
||||
"methodName" : "payViaRichEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/RichOrderController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/orders/rich/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.RichOrderController.payViaRichEvent", "click.kamil.examples.statemachine.layered.web.CommandGateway.payOrderViaRichEvent", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderPayViaRichEvent", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.PAY",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.PAY" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/orders/rich/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.RichOrderController",
|
||||
"methodName" : "shipViaRichEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/RichOrderController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/orders/rich/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.RichOrderController.shipViaRichEvent", "click.kamil.examples.statemachine.layered.web.CommandGateway.shipOrderViaRichEvent", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderShipViaRichEvent", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.SHIP",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.SHIP" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/commands/{commandKey}",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
|
||||
"methodName" : "execute",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/commands/{commandKey}",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ {
|
||||
"name" : "commandKey",
|
||||
"type" : "String",
|
||||
"annotations" : [ "PathVariable" ]
|
||||
} ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.GenericCommandController.execute", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderPay", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.PAY",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.PAY" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/commands/{commandKey}",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
|
||||
"methodName" : "execute",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/commands/{commandKey}",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ {
|
||||
"name" : "commandKey",
|
||||
"type" : "String",
|
||||
"annotations" : [ "PathVariable" ]
|
||||
} ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.GenericCommandController.execute", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderShip", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.SHIP",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.SHIP" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/commands/{commandKey}",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
|
||||
"methodName" : "execute",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/commands/{commandKey}",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ {
|
||||
"name" : "commandKey",
|
||||
"type" : "String",
|
||||
"annotations" : [ "PathVariable" ]
|
||||
} ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.GenericCommandController.execute", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderCancel", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.CANCEL",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.CANCEL" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
@@ -920,7 +271,7 @@
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.SUBMIT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"constraint" : "command == DOCUMENT_SUBMIT",
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
@@ -958,7 +309,7 @@
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.APPROVE" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"constraint" : "command == DOCUMENT_APPROVE",
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
@@ -996,7 +347,7 @@
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.REJECT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"constraint" : "command == DOCUMENT_REJECT",
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
|
||||
@@ -13,19 +13,6 @@
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
}, {
|
||||
"event" : "event",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : null,
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
} ],
|
||||
"entryPoints" : [ {
|
||||
"type" : "REST",
|
||||
@@ -255,96 +242,6 @@
|
||||
"targetState" : "OrderState.CANCELLED",
|
||||
"event" : "OrderTransitionEvent.CANCEL"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/documents/submit",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.DocumentController",
|
||||
"methodName" : "submit",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/DocumentController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/documents/submit",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.DocumentController.submit", "click.kamil.examples.statemachine.layered.web.CommandGateway.submitDocument", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentSubmit", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.SUBMIT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.SUBMIT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/documents/approve",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.DocumentController",
|
||||
"methodName" : "approve",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/DocumentController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/documents/approve",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.DocumentController.approve", "click.kamil.examples.statemachine.layered.web.CommandGateway.approveDocument", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentApprove", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.APPROVE",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.APPROVE" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/documents/reject",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.DocumentController",
|
||||
"methodName" : "reject",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/DocumentController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/documents/reject",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.DocumentController.reject", "click.kamil.examples.statemachine.layered.web.CommandGateway.rejectDocument", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentReject", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.REJECT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.REJECT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
@@ -370,199 +267,7 @@
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.PAY" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "OrderState.NEW",
|
||||
"targetState" : "OrderState.PAID",
|
||||
"event" : "OrderTransitionEvent.PAY"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderShip", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.SHIP",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.SHIP" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "OrderState.PAID",
|
||||
"targetState" : "OrderState.SHIPPED",
|
||||
"event" : "OrderTransitionEvent.SHIP"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderCancel", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.CANCEL",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.CANCEL" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "OrderState.PAID",
|
||||
"targetState" : "OrderState.CANCELLED",
|
||||
"event" : "OrderTransitionEvent.CANCEL"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentSubmit", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.SUBMIT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.SUBMIT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentApprove", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.APPROVE",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.APPROVE" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/pay",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "payWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/pay",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.payWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentReject", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.REJECT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.REJECT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderPay", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.PAY",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.PAY" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"constraint" : "command == ORDER_PAY",
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
@@ -596,7 +301,7 @@
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.SHIP" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"constraint" : "command == ORDER_SHIP",
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
@@ -605,130 +310,6 @@
|
||||
"targetState" : "OrderState.SHIPPED",
|
||||
"event" : "OrderTransitionEvent.SHIP"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.orderCancel", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendOrderEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "OrderTransitionEvent.CANCEL",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendOrderEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.CANCEL" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : [ {
|
||||
"sourceState" : "OrderState.PAID",
|
||||
"targetState" : "OrderState.CANCELLED",
|
||||
"event" : "OrderTransitionEvent.CANCEL"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentSubmit", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.SUBMIT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.SUBMIT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentApprove", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.APPROVE",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.APPROVE" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/string-dispatch/orders/ship",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.StringDispatchController",
|
||||
"methodName" : "shipWithStringKey",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/StringDispatchController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/string-dispatch/orders/ship",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.StringDispatchController.shipWithStringKey", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentReject", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.REJECT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.REJECT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
@@ -826,7 +407,7 @@
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.PAY" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"constraint" : "command == ORDER_PAY",
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
@@ -864,7 +445,7 @@
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.SHIP" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"constraint" : "command == ORDER_SHIP",
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
@@ -902,7 +483,7 @@
|
||||
"lineNumber" : 75,
|
||||
"polymorphicEvents" : [ "OrderTransitionEvent.CANCEL" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"constraint" : "command == ORDER_CANCEL",
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
@@ -911,108 +492,6 @@
|
||||
"targetState" : "OrderState.CANCELLED",
|
||||
"event" : "OrderTransitionEvent.CANCEL"
|
||||
} ]
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/commands/{commandKey}",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
|
||||
"methodName" : "execute",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/commands/{commandKey}",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ {
|
||||
"name" : "commandKey",
|
||||
"type" : "String",
|
||||
"annotations" : [ "PathVariable" ]
|
||||
} ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.GenericCommandController.execute", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentSubmit", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.SUBMIT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.SUBMIT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/commands/{commandKey}",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
|
||||
"methodName" : "execute",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/commands/{commandKey}",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ {
|
||||
"name" : "commandKey",
|
||||
"type" : "String",
|
||||
"annotations" : [ "PathVariable" ]
|
||||
} ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.GenericCommandController.execute", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentApprove", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.APPROVE",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.APPROVE" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
}, {
|
||||
"entryPoint" : {
|
||||
"type" : "REST",
|
||||
"name" : "POST /api/commands/{commandKey}",
|
||||
"className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
|
||||
"methodName" : "execute",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
|
||||
"metadata" : {
|
||||
"path" : "/api/commands/{commandKey}",
|
||||
"verb" : "POST"
|
||||
},
|
||||
"parameters" : [ {
|
||||
"name" : "commandKey",
|
||||
"type" : "String",
|
||||
"annotations" : [ "PathVariable" ]
|
||||
} ]
|
||||
},
|
||||
"methodChain" : [ "click.kamil.examples.statemachine.layered.web.GenericCommandController.execute", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentReject", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
|
||||
"triggerPoint" : {
|
||||
"event" : "DocumentTransitionEvent.REJECT",
|
||||
"className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
|
||||
"methodName" : "sendDocumentEvent",
|
||||
"sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
|
||||
"sourceModule" : null,
|
||||
"stateMachineId" : null,
|
||||
"sourceState" : null,
|
||||
"lineNumber" : 81,
|
||||
"polymorphicEvents" : [ "DocumentTransitionEvent.REJECT" ],
|
||||
"external" : false,
|
||||
"constraint" : null,
|
||||
"ambiguous" : false
|
||||
},
|
||||
"contextMachineId" : null,
|
||||
"matchedTransitions" : null
|
||||
} ],
|
||||
"properties" : {
|
||||
"default" : { }
|
||||
|
||||
Reference in New Issue
Block a user