diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngine.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngine.java index bd3356c..a053ee2 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngine.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngine.java @@ -24,7 +24,7 @@ public class HeuristicBeanResolutionEngine implements BeanResolutionEngine { boolean mismatched = false; if (triggerEventFqn != null && machineEventFqn != null) { - if (eraseGenerics(triggerEventFqn).equals(eraseGenerics(machineEventFqn))) { + if (typesEquivalent(triggerEventFqn, machineEventFqn)) { matched = true; } else if (isTypeMismatched(triggerEventFqn, machineEventFqn)) { mismatched = true; @@ -34,7 +34,7 @@ public class HeuristicBeanResolutionEngine implements BeanResolutionEngine { } } if (triggerStateFqn != null && machineStateFqn != null) { - if (eraseGenerics(triggerStateFqn).equals(eraseGenerics(machineStateFqn))) { + if (typesEquivalent(triggerStateFqn, machineStateFqn)) { matched = true; } else if (isTypeMismatched(triggerStateFqn, machineStateFqn)) { mismatched = true; @@ -322,6 +322,27 @@ public class HeuristicBeanResolutionEngine implements BeanResolutionEngine { return type; } + private boolean typesEquivalent(String type1, String type2) { + if (type1 == null || type2 == null) { + return false; + } + String erased1 = normalizePrimitiveFqn(eraseGenerics(type1)); + String erased2 = normalizePrimitiveFqn(eraseGenerics(type2)); + return erased1.equals(erased2); + } + + private String normalizePrimitiveFqn(String type) { + if (type == null) { + return null; + } + return switch (type) { + case "java.lang.String" -> "String"; + case "java.lang.Object" -> "Object"; + case "java.io.Serializable" -> "Serializable"; + default -> type; + }; + } + private boolean isTypeMismatched(String type1, String type2) { if (type1 == null || type2 == null) return false; type1 = eraseGenerics(type1); diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ExternalTriggerPolicy.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ExternalTriggerPolicy.java index 50bf852..a67cd61 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ExternalTriggerPolicy.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/ExternalTriggerPolicy.java @@ -5,6 +5,8 @@ import click.kamil.springstatemachineexporter.analysis.model.TriggerPoint; import click.kamil.springstatemachineexporter.analysis.resolver.MachineEnumCanonicalizer; import click.kamil.springstatemachineexporter.ast.common.CodebaseContext; import org.eclipse.jdt.core.dom.*; +import java.util.HashSet; +import java.util.Set; /** * Single source-derived policy for marking REST triggers as external vs internal. @@ -173,6 +175,9 @@ public final class ExternalTriggerPolicy { if (isEnumDtoField(bodyBinding, fieldName, context)) { return new RestParamBinding(false, false, true, true); } + if (containsNestedEnumField(bodyBinding, fieldName, context)) { + return new RestParamBinding(false, false, true, true); + } } return null; } @@ -218,6 +223,38 @@ public final class ExternalTriggerPolicy { return false; } + private static boolean containsNestedEnumField( + ITypeBinding bodyBinding, String fieldName, CodebaseContext context) { + return containsNestedEnumField(bodyBinding, fieldName, context, new HashSet<>()); + } + + private static boolean containsNestedEnumField( + ITypeBinding bodyBinding, + String fieldName, + CodebaseContext context, + Set visited) { + if (bodyBinding == null || fieldName == null || context == null) { + return false; + } + String bodyFqn = bodyBinding.getQualifiedName(); + if (bodyFqn == null || !visited.add(bodyFqn)) { + return false; + } + for (IVariableBinding component : bodyBinding.getDeclaredFields()) { + ITypeBinding nestedType = component.getType(); + if (nestedType == null || nestedType.isPrimitive() || nestedType.isEnum()) { + continue; + } + if (isEnumRecordComponent(nestedType, fieldName) || isEnumDtoField(nestedType, fieldName, context)) { + return true; + } + if (containsNestedEnumField(nestedType, fieldName, context, visited)) { + return true; + } + } + return false; + } + private static boolean hasParameterAstAnnotation(SingleVariableDeclaration param, String simpleName) { for (Object modifier : param.modifiers()) { if (modifier instanceof Annotation annotation diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetector.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetector.java index fabb8ca..353e0a7 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetector.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetector.java @@ -477,20 +477,15 @@ public class GenericEventDetector { if (isRoutingParameter(left) || isRoutingParameter(right)) { return null; } - - // Usually one is a method call like getState() or a variable like `state` - // and the other is the constant enum like `OrderState.PENDING` or `"PENDING"` - - // If one is a QualifiedName (enum constant) or StringLiteral, it's likely the state - if (left instanceof QualifiedName || left instanceof StringLiteral || left instanceof FieldAccess) { - return getSimpleNameString(left); + + String leftState = resolveProvableStateLiteral(left); + if (leftState != null) { + return leftState; } - if (right instanceof QualifiedName || right instanceof StringLiteral || right instanceof FieldAccess) { - return getSimpleNameString(right); + String rightState = resolveProvableStateLiteral(right); + if (rightState != null) { + return rightState; } - - // Fallback - return getSimpleNameString(right); } } else if (expr instanceof MethodInvocation mi) { String methodName = mi.getName().getIdentifier(); @@ -501,22 +496,12 @@ public class GenericEventDetector { if (isRoutingParameter(receiver) || isRoutingParameter(arg)) { return null; } - - // If receiver is null (e.g., implicit this), fall back to arg - if (receiver == null) { - return getSimpleNameString(arg); + + String receiverState = resolveProvableStateLiteral(receiver); + if (receiverState != null) { + return receiverState; } - - // Prioritize the one that looks like a constant (QualifiedName or StringLiteral) - if (receiver instanceof QualifiedName || receiver instanceof StringLiteral || receiver instanceof FieldAccess) { - return getSimpleNameString(receiver); - } - if (arg instanceof QualifiedName || arg instanceof StringLiteral || arg instanceof FieldAccess) { - return getSimpleNameString(arg); - } - - // Fallback to receiver - return getSimpleNameString(receiver); + return resolveProvableStateLiteral(arg); } } return null; diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/MachineScopeFilterEntryPointTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/MachineScopeFilterEntryPointTest.java index c1eb9f5..cbc2f84 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/MachineScopeFilterEntryPointTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/MachineScopeFilterEntryPointTest.java @@ -106,6 +106,44 @@ class MachineScopeFilterEntryPointTest { assertThat(orderScoped).isEmpty(); } + @Test + void shouldFilterSharedDispatcherCallChainsByProvenMachineTypes(@TempDir Path tempDir) throws Exception { + writeEnterpriseWebLayer(tempDir); + + CodebaseContext context = new CodebaseContext(); + context.setResolveBindings(true); + context.scan(tempDir); + + CallChain payChain = CallChain.builder() + .triggerPoint(TriggerPoint.builder() + .event("com.example.OrderEvent.PAY") + .eventTypeFqn("com.example.OrderEvent") + .stateTypeFqn("com.example.OrderState") + .className("com.example.StateMachineDispatcher") + .methodName("payOrder") + .build()) + .methodChain(List.of("com.example.StateMachineController.payOrder()")) + .build(); + CallChain documentChain = CallChain.builder() + .triggerPoint(TriggerPoint.builder() + .event("com.example.DocumentEvent.SUBMIT") + .eventTypeFqn("com.example.DocumentEvent") + .stateTypeFqn("com.example.DocumentState") + .className("com.example.StateMachineDispatcher") + .methodName("submitDocument") + .build()) + .methodChain(List.of("com.example.StateMachineController.submitDocument()")) + .build(); + + List orderScoped = MachineScopeFilter.filterCallChainsForMachine( + List.of(payChain, documentChain), + "com.example.OrderStateMachineConfiguration", + context); + + assertThat(orderScoped).hasSize(1); + assertThat(orderScoped.get(0).getTriggerPoint().getEvent()).isEqualTo("com.example.OrderEvent.PAY"); + } + private static void writeEnterpriseWebLayer(Path tempDir) throws Exception { Files.writeString(tempDir.resolve("App.java"), """ package com.example; diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngineRoutingTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngineRoutingTest.java index ac1b0cb..1665226 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngineRoutingTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/routing/HeuristicBeanResolutionEngineRoutingTest.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.io.TempDir; import java.nio.file.Files; import java.nio.file.Path; +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/EnterpriseDedicatedEndpointLinkingTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/EnterpriseDedicatedEndpointLinkingTest.java index 54a8eea..c46d87e 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/EnterpriseDedicatedEndpointLinkingTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/EnterpriseDedicatedEndpointLinkingTest.java @@ -38,6 +38,7 @@ class EnterpriseDedicatedEndpointLinkingTest { assertThat(chain.path("matchedTransitions")).isNotEmpty(); assertThat(chain.path("matchedTransitions").get(0).path("event").asText()) .isEqualTo("click.kamil.enterprise.machines.order.OrderEvent.PAY"); + assertThat(chain.path("linkResolution").asText()).isEqualTo("RESOLVED"); } private static JsonNode findPayEndpointChain(JsonNode machineJson) { diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/EnterpriseDispatcherMatchedTransitionsRegressionTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/EnterpriseDispatcherMatchedTransitionsRegressionTest.java index b91c9cd..4e7ab8c 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/EnterpriseDispatcherMatchedTransitionsRegressionTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/EnterpriseDispatcherMatchedTransitionsRegressionTest.java @@ -37,6 +37,7 @@ class EnterpriseDispatcherMatchedTransitionsRegressionTest { assertThat(chain.path("triggerPoint").path("polymorphicEvents")).isEmpty(); JsonNode matched = chain.path("matchedTransitions"); assertThat(matched.isNull() || (matched.isArray() && matched.isEmpty())).isTrue(); + assertThat(chain.path("linkResolution").asText()).isEqualTo("UNRESOLVED_EXTERNAL"); } private static JsonNode findTransitionEndpointChain(JsonNode machineJson) { diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/ExternalTriggerPolicyTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/ExternalTriggerPolicyTest.java index 5d5002e..5a8cf4d 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/ExternalTriggerPolicyTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/ExternalTriggerPolicyTest.java @@ -119,4 +119,40 @@ class ExternalTriggerPolicyTest { assertThat(ExternalTriggerPolicy.isExternalFromSource( entryPoint, trigger, "com.example.Api.pay", "event", context)).isFalse(); } + + @Test + void requestBodyNestedDtoEnumFieldShouldBeInternal(@TempDir Path tempDir) throws Exception { + String source = """ + package com.example; + import org.springframework.web.bind.annotation.*; + public class Api { + @PostMapping("/pay") + public void pay(@RequestBody OrderRequest request) { + fire(request.details().event()); + } + void fire(OrderEvent event) {} + } + record OrderRequest(OrderDetails details) {} + record OrderDetails(OrderEvent event) {} + enum OrderEvent { PAY } + """; + Files.writeString(tempDir.resolve("Api.java"), source); + CodebaseContext context = new CodebaseContext(); + context.setResolveBindings(true); + context.scan(tempDir); + + EntryPoint entryPoint = EntryPoint.builder() + .type(EntryPoint.Type.REST) + .name("POST /pay") + .className("com.example.Api") + .methodName("pay") + .build(); + TriggerPoint trigger = TriggerPoint.builder() + .event("com.example.OrderEvent.PAY") + .polymorphicEvents(List.of("com.example.OrderEvent.PAY")) + .build(); + + assertThat(ExternalTriggerPolicy.isExternalFromSource( + entryPoint, trigger, "com.example.Api.pay", "event", context)).isFalse(); + } } diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorFireTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorFireTest.java index a35dc0a..b86ce3a 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorFireTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/GenericEventDetectorFireTest.java @@ -43,4 +43,70 @@ class GenericEventDetectorFireTest { assertThat(triggers.get(0).getMethodName()).isEqualTo("pay"); assertThat(triggers.get(0).getEvent()).contains("PAY"); } + + @Test + void shouldInferSourceStateFromNonGuardIfLiteralBranch(@TempDir Path tempDir) throws Exception { + String source = """ + package com.example; + enum OrderState { NEW, PAID } + enum OrderEvent { PAY } + class OrderService { + private final StateMachineFacade facade; + OrderService(StateMachineFacade facade) { this.facade = facade; } + public void payWhenPaid(OrderState state) { + if (state == OrderState.PAID) { + facade.sendEvent(OrderEvent.PAY); + } + } + } + class StateMachineFacade { + public void sendEvent(OrderEvent event) {} + } + """; + Files.writeString(tempDir.resolve("OrderService.java"), source); + + CodebaseContext context = new CodebaseContext(); + context.setResolveBindings(true); + context.scan(tempDir); + + GenericEventDetector detector = new GenericEventDetector(context, context.getConstantResolver(), List.of()); + org.eclipse.jdt.core.dom.TypeDeclaration td = context.getTypeDeclaration("com.example.OrderService"); + List triggers = detector.detect((org.eclipse.jdt.core.dom.CompilationUnit) td.getRoot()); + + assertThat(triggers).hasSize(1); + assertThat(triggers.get(0).getSourceState()).isEqualTo("PAID"); + } + + @Test + void shouldNotInferSourceStateFromVariableOnlyIfCondition(@TempDir Path tempDir) throws Exception { + String source = """ + package com.example; + enum OrderState { NEW, PAID } + enum OrderEvent { PAY } + class OrderService { + private final StateMachineFacade facade; + OrderService(StateMachineFacade facade) { this.facade = facade; } + public void payWhenPaid(boolean isPaid) { + if (isPaid) { + facade.sendEvent(OrderEvent.PAY); + } + } + } + class StateMachineFacade { + public void sendEvent(OrderEvent event) {} + } + """; + Files.writeString(tempDir.resolve("OrderService.java"), source); + + CodebaseContext context = new CodebaseContext(); + context.setResolveBindings(true); + context.scan(tempDir); + + GenericEventDetector detector = new GenericEventDetector(context, context.getConstantResolver(), List.of()); + org.eclipse.jdt.core.dom.TypeDeclaration td = context.getTypeDeclaration("com.example.OrderService"); + List triggers = detector.detect((org.eclipse.jdt.core.dom.CompilationUnit) td.getRoot()); + + assertThat(triggers).hasSize(1); + assertThat(triggers.get(0).getSourceState()).isNull(); + } } diff --git a/state_machine_exporter/src/test/resources/golden/DocumentStateMachineConfiguration/DocumentStateMachineConfiguration.json b/state_machine_exporter/src/test/resources/golden/DocumentStateMachineConfiguration/DocumentStateMachineConfiguration.json index 89edca0..cebb5bb 100644 --- a/state_machine_exporter/src/test/resources/golden/DocumentStateMachineConfiguration/DocumentStateMachineConfiguration.json +++ b/state_machine_exporter/src/test/resources/golden/DocumentStateMachineConfiguration/DocumentStateMachineConfiguration.json @@ -297,7 +297,8 @@ "sourceState" : "click.kamil.enterprise.machines.document.DocumentState.DRAFT", "targetState" : "click.kamil.enterprise.machines.document.DocumentState.IN_REVIEW", "event" : "click.kamil.enterprise.machines.document.DocumentEvent.SUBMIT" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -335,7 +336,8 @@ "sourceState" : "click.kamil.enterprise.machines.document.DocumentState.IN_REVIEW", "targetState" : "click.kamil.enterprise.machines.document.DocumentState.APPROVED", "event" : "click.kamil.enterprise.machines.document.DocumentEvent.APPROVE" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -373,7 +375,8 @@ "sourceState" : "click.kamil.enterprise.machines.document.DocumentState.IN_REVIEW", "targetState" : "click.kamil.enterprise.machines.document.DocumentState.DRAFT", "event" : "click.kamil.enterprise.machines.document.DocumentEvent.REJECT" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -415,7 +418,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "UNRESOLVED_EXTERNAL" }, { "entryPoint" : { "type" : "REST", @@ -457,7 +461,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "UNRESOLVED_EXTERNAL" }, { "entryPoint" : { "type" : "REST", @@ -499,7 +504,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "UNRESOLVED_EXTERNAL" } ], "properties" : { "default" : { } diff --git a/state_machine_exporter/src/test/resources/golden/EnterpriseStateMachineConfig/EnterpriseStateMachineConfig.json b/state_machine_exporter/src/test/resources/golden/EnterpriseStateMachineConfig/EnterpriseStateMachineConfig.json index 0898484..829fa24 100644 --- a/state_machine_exporter/src/test/resources/golden/EnterpriseStateMachineConfig/EnterpriseStateMachineConfig.json +++ b/state_machine_exporter/src/test/resources/golden/EnterpriseStateMachineConfig/EnterpriseStateMachineConfig.json @@ -376,7 +376,8 @@ "sourceState" : "String.NEW", "targetState" : "String.CHECK_AVAILABILITY", "event" : "String.PLACE_ORDER" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -414,7 +415,8 @@ "sourceState" : "String.PAID", "targetState" : "String.CANCELLED", "event" : "String.CANCEL_ORDER" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "CUSTOM", @@ -443,7 +445,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" }, { "entryPoint" : { "type" : "REST", @@ -481,7 +484,8 @@ "sourceState" : "String.PENDING_PAYMENT", "targetState" : "String.PAID", "event" : "String.PAY_ORDER" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "JMS", @@ -519,7 +523,8 @@ "sourceState" : "String.PAID", "targetState" : "String.SHIPPED", "event" : "String.SHIP_ORDER" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "RABBIT", @@ -557,7 +562,8 @@ "sourceState" : "String.DELIVERED", "targetState" : "String.RETURNED", "event" : "String.RETURN_ORDER" - } ] + } ], + "linkResolution" : "RESOLVED" } ], "properties" : { "default" : { } diff --git a/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json b/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json index 8d59b7f..ba6a2fe 100644 --- a/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json +++ b/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig/ExtendedStateMachineConfig.json @@ -124,6 +124,97 @@ "eventTypeFqn" : "String", "metadata" : { "triggers" : [ { + "event" : "java.lang.String.FINISH", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "finishOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 34, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.AUDIT_EVENT", + "className" : "click.kamil.examples.statemachine.extended.web.AuditInterceptor", + "methodName" : "preHandle", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/AuditInterceptor.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 16, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.FALLBACK_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.FallbackQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/FallbackQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.PROFILED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.ProfiledQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ProfiledQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 19, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.PRIMARY_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 19, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.SUBMIT_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.OrderService", + "methodName" : "processSubmit", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 20, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.CANCEL_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.OrderService", + "methodName" : "processCancel", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 25, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { "event" : "[LIFECYCLE:RESTORE]", "className" : "click.kamil.examples.statemachine.extended.service.OrderService", "methodName" : "resumeOrder", @@ -136,6 +227,58 @@ "external" : false, "constraint" : null, "ambiguous" : false + }, { + "event" : "java.lang.String.QUALIFIER_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.AUTHORIZE", + "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", + "methodName" : "processPayment", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 22, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.CAPTURE", + "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", + "methodName" : "capturePayment", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 35, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false }, { "event" : "[LIFECYCLE:RESTORE]", "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", @@ -149,8 +292,54 @@ "external" : false, "constraint" : null, "ambiguous" : false + }, { + "event" : "java.lang.String.REACTIVE_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.ReactiveOrderService", + "methodName" : "processReactive", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ReactiveOrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 18, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false } ], "entryPoints" : [ { + "type" : "REST", + "name" : "POST /api/orders/submit", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "submitOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/submit", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/orders/cancel", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "cancelOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/cancel", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/orders/finish", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "finishOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/finish", + "verb" : "POST" + }, + "parameters" : [ ] + }, { "type" : "REST", "name" : "POST /api/orders/resume", "className" : "click.kamil.examples.statemachine.extended.web.OrderController", @@ -167,19 +356,106 @@ } ] }, { "type" : "REST", - "name" : "POST /api/payment/{id}/capture", - "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", - "methodName" : "capturePaymentEndpoint", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", + "name" : "POST /api/orders/reactive", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "reactiveOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", "metadata" : { - "path" : "/api/payment/{id}/capture", + "path" : "/api/orders/reactive", "verb" : "POST" }, "parameters" : [ { - "name" : "id", + "name" : "orderId", "type" : "String", - "annotations" : [ "PathVariable" ] + "annotations" : [ ] } ] + }, { + "type" : "CUSTOM", + "name" : "INTERCEPTOR: AuditInterceptor.preHandle", + "className" : "click.kamil.examples.statemachine.extended.web.AuditInterceptor", + "methodName" : "preHandle", + "sourceFile" : null, + "metadata" : { + "interceptorType" : "Spring MVC Interceptor" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "GET /test-setter", + "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController", + "methodName" : "testSetter", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java", + "metadata" : { + "path" : "/test-setter", + "verb" : "GET" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/quirk/primary", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testPrimary", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/primary", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/quirk/named", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testNamed", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/named", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/quirk/qualifier", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testQualifier", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/qualifier", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/quirk/fallback", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testFallback", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/fallback", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "GET /test-concrete", + "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController", + "methodName" : "testConcrete", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java", + "metadata" : { + "path" : "/test-concrete", + "verb" : "GET" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "GET /test-field", + "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController", + "methodName" : "testField", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java", + "metadata" : { + "path" : "/test-field", + "verb" : "GET" + }, + "parameters" : [ ] }, { "type" : "REST", "name" : "GET /api/base/{id}", @@ -195,8 +471,128 @@ "type" : "String", "annotations" : [ "PathVariable" ] } ] + }, { + "type" : "REST", + "name" : "POST /api/payment/{id}/capture", + "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", + "methodName" : "capturePaymentEndpoint", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", + "metadata" : { + "path" : "/api/payment/{id}/capture", + "verb" : "POST" + }, + "parameters" : [ { + "name" : "id", + "type" : "String", + "annotations" : [ "PathVariable" ] + } ] } ], "callChains" : [ { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/orders/submit", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "submitOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/submit", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.submitOrder", "click.kamil.examples.statemachine.extended.service.OrderService.processSubmit" ], + "triggerPoint" : { + "event" : "java.lang.String.SUBMIT_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.OrderService", + "methodName" : "processSubmit", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.START", + "lineNumber" : 20, + "polymorphicEvents" : [ "java.lang.String.SUBMIT_EVENT" ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.START", + "targetState" : "String.PROCESSING", + "event" : "String.SUBMIT_EVENT" + } ], + "linkResolution" : "RESOLVED" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/orders/cancel", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "cancelOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/cancel", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.cancelOrder", "click.kamil.examples.statemachine.extended.service.OrderService.processCancel" ], + "triggerPoint" : { + "event" : "java.lang.String.CANCEL_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.OrderService", + "methodName" : "processCancel", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.PROCESSING", + "lineNumber" : 25, + "polymorphicEvents" : [ "java.lang.String.CANCEL_EVENT" ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.PROCESSING", + "targetState" : "String.CANCELLED", + "event" : "String.CANCEL_EVENT" + } ], + "linkResolution" : "RESOLVED" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/orders/finish", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "finishOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/finish", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.finishOrder" ], + "triggerPoint" : { + "event" : "java.lang.String.FINISH", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "finishOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.PROCESSING", + "lineNumber" : 34, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.PROCESSING", + "targetState" : "String.COMPLETED", + "event" : "String.FINISH" + } ], + "linkResolution" : "RESOLVED" + }, { "entryPoint" : { "type" : "REST", "name" : "POST /api/orders/resume", @@ -229,7 +625,368 @@ "ambiguous" : false }, "contextMachineId" : "orderId", - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : null + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/orders/reactive", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "reactiveOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/reactive", + "verb" : "POST" + }, + "parameters" : [ { + "name" : "orderId", + "type" : "String", + "annotations" : [ ] + } ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.reactiveOrder", "click.kamil.examples.statemachine.extended.service.ReactiveOrderService.processReactive" ], + "triggerPoint" : { + "event" : "java.lang.String.REACTIVE_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.ReactiveOrderService", + "methodName" : "processReactive", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ReactiveOrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.START", + "lineNumber" : 18, + "polymorphicEvents" : [ "java.lang.String.REACTIVE_EVENT" ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.START", + "targetState" : "String.PROCESSING", + "event" : "String.REACTIVE_EVENT" + } ], + "linkResolution" : "RESOLVED" + }, { + "entryPoint" : { + "type" : "CUSTOM", + "name" : "INTERCEPTOR: AuditInterceptor.preHandle", + "className" : "click.kamil.examples.statemachine.extended.web.AuditInterceptor", + "methodName" : "preHandle", + "sourceFile" : null, + "metadata" : { + "interceptorType" : "Spring MVC Interceptor" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.AuditInterceptor.preHandle" ], + "triggerPoint" : { + "event" : "java.lang.String.AUDIT_EVENT", + "className" : "click.kamil.examples.statemachine.extended.web.AuditInterceptor", + "methodName" : "preHandle", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/AuditInterceptor.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.START", + "lineNumber" : 16, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.START", + "targetState" : "String.START", + "event" : "String.AUDIT_EVENT" + } ], + "linkResolution" : "RESOLVED" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "GET /test-setter", + "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController", + "methodName" : "testSetter", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java", + "metadata" : { + "path" : "/test-setter", + "verb" : "GET" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.SetterInjectionController.testSetter", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/quirk/primary", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testPrimary", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/primary", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testPrimary", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.PRIMARY_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 19, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/quirk/named", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testNamed", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/named", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testNamed", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/quirk/qualifier", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testQualifier", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/qualifier", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testQualifier", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.QUALIFIER_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/quirk/fallback", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testFallback", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/fallback", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.PRIMARY_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 19, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "GET /test-concrete", + "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController", + "methodName" : "testConcrete", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java", + "metadata" : { + "path" : "/test-concrete", + "verb" : "GET" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController.testConcrete", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.QUALIFIER_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "GET /test-field", + "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController", + "methodName" : "testField", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java", + "metadata" : { + "path" : "/test-field", + "verb" : "GET" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.FieldInjectionController.testField", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "GET /api/base/{id}", + "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", + "methodName" : "processBaseEndpoint", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", + "metadata" : { + "path" : "/api/base/{id}", + "verb" : "GET" + }, + "parameters" : [ { + "name" : "id", + "type" : "String", + "annotations" : [ "PathVariable" ] + } ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.processBaseEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.processPayment" ], + "triggerPoint" : { + "event" : "java.lang.String.AUTHORIZE", + "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", + "methodName" : "processPayment", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 22, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/payment/{id}/capture", + "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", + "methodName" : "capturePaymentEndpoint", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", + "metadata" : { + "path" : "/api/payment/{id}/capture", + "verb" : "POST" + }, + "parameters" : [ { + "name" : "id", + "type" : "String", + "annotations" : [ "PathVariable" ] + } ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.capturePaymentEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.capturePayment" ], + "triggerPoint" : { + "event" : "java.lang.String.CAPTURE", + "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", + "methodName" : "capturePayment", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 35, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : "paymentId", + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" }, { "entryPoint" : { "type" : "REST", @@ -263,7 +1020,8 @@ "ambiguous" : false }, "contextMachineId" : "paymentId", - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : null } ], "properties" : { "default" : { diff --git a/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig_PROD/ExtendedStateMachineConfig.json b/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig_PROD/ExtendedStateMachineConfig.json index 8d59b7f..ba6a2fe 100644 --- a/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig_PROD/ExtendedStateMachineConfig.json +++ b/state_machine_exporter/src/test/resources/golden/ExtendedStateMachineConfig_PROD/ExtendedStateMachineConfig.json @@ -124,6 +124,97 @@ "eventTypeFqn" : "String", "metadata" : { "triggers" : [ { + "event" : "java.lang.String.FINISH", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "finishOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 34, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.AUDIT_EVENT", + "className" : "click.kamil.examples.statemachine.extended.web.AuditInterceptor", + "methodName" : "preHandle", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/AuditInterceptor.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 16, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.FALLBACK_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.FallbackQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/FallbackQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.PROFILED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.ProfiledQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ProfiledQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 19, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.PRIMARY_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 19, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.SUBMIT_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.OrderService", + "methodName" : "processSubmit", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 20, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.CANCEL_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.OrderService", + "methodName" : "processCancel", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 25, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { "event" : "[LIFECYCLE:RESTORE]", "className" : "click.kamil.examples.statemachine.extended.service.OrderService", "methodName" : "resumeOrder", @@ -136,6 +227,58 @@ "external" : false, "constraint" : null, "ambiguous" : false + }, { + "event" : "java.lang.String.QUALIFIER_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.AUTHORIZE", + "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", + "methodName" : "processPayment", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 22, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.CAPTURE", + "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", + "methodName" : "capturePayment", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 35, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false }, { "event" : "[LIFECYCLE:RESTORE]", "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", @@ -149,8 +292,54 @@ "external" : false, "constraint" : null, "ambiguous" : false + }, { + "event" : "java.lang.String.REACTIVE_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.ReactiveOrderService", + "methodName" : "processReactive", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ReactiveOrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 18, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false } ], "entryPoints" : [ { + "type" : "REST", + "name" : "POST /api/orders/submit", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "submitOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/submit", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/orders/cancel", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "cancelOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/cancel", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/orders/finish", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "finishOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/finish", + "verb" : "POST" + }, + "parameters" : [ ] + }, { "type" : "REST", "name" : "POST /api/orders/resume", "className" : "click.kamil.examples.statemachine.extended.web.OrderController", @@ -167,19 +356,106 @@ } ] }, { "type" : "REST", - "name" : "POST /api/payment/{id}/capture", - "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", - "methodName" : "capturePaymentEndpoint", - "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", + "name" : "POST /api/orders/reactive", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "reactiveOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", "metadata" : { - "path" : "/api/payment/{id}/capture", + "path" : "/api/orders/reactive", "verb" : "POST" }, "parameters" : [ { - "name" : "id", + "name" : "orderId", "type" : "String", - "annotations" : [ "PathVariable" ] + "annotations" : [ ] } ] + }, { + "type" : "CUSTOM", + "name" : "INTERCEPTOR: AuditInterceptor.preHandle", + "className" : "click.kamil.examples.statemachine.extended.web.AuditInterceptor", + "methodName" : "preHandle", + "sourceFile" : null, + "metadata" : { + "interceptorType" : "Spring MVC Interceptor" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "GET /test-setter", + "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController", + "methodName" : "testSetter", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java", + "metadata" : { + "path" : "/test-setter", + "verb" : "GET" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/quirk/primary", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testPrimary", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/primary", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/quirk/named", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testNamed", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/named", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/quirk/qualifier", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testQualifier", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/qualifier", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "POST /api/quirk/fallback", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testFallback", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/fallback", + "verb" : "POST" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "GET /test-concrete", + "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController", + "methodName" : "testConcrete", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java", + "metadata" : { + "path" : "/test-concrete", + "verb" : "GET" + }, + "parameters" : [ ] + }, { + "type" : "REST", + "name" : "GET /test-field", + "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController", + "methodName" : "testField", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java", + "metadata" : { + "path" : "/test-field", + "verb" : "GET" + }, + "parameters" : [ ] }, { "type" : "REST", "name" : "GET /api/base/{id}", @@ -195,8 +471,128 @@ "type" : "String", "annotations" : [ "PathVariable" ] } ] + }, { + "type" : "REST", + "name" : "POST /api/payment/{id}/capture", + "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", + "methodName" : "capturePaymentEndpoint", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", + "metadata" : { + "path" : "/api/payment/{id}/capture", + "verb" : "POST" + }, + "parameters" : [ { + "name" : "id", + "type" : "String", + "annotations" : [ "PathVariable" ] + } ] } ], "callChains" : [ { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/orders/submit", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "submitOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/submit", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.submitOrder", "click.kamil.examples.statemachine.extended.service.OrderService.processSubmit" ], + "triggerPoint" : { + "event" : "java.lang.String.SUBMIT_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.OrderService", + "methodName" : "processSubmit", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.START", + "lineNumber" : 20, + "polymorphicEvents" : [ "java.lang.String.SUBMIT_EVENT" ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.START", + "targetState" : "String.PROCESSING", + "event" : "String.SUBMIT_EVENT" + } ], + "linkResolution" : "RESOLVED" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/orders/cancel", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "cancelOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/cancel", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.cancelOrder", "click.kamil.examples.statemachine.extended.service.OrderService.processCancel" ], + "triggerPoint" : { + "event" : "java.lang.String.CANCEL_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.OrderService", + "methodName" : "processCancel", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/OrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.PROCESSING", + "lineNumber" : 25, + "polymorphicEvents" : [ "java.lang.String.CANCEL_EVENT" ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.PROCESSING", + "targetState" : "String.CANCELLED", + "event" : "String.CANCEL_EVENT" + } ], + "linkResolution" : "RESOLVED" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/orders/finish", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "finishOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/finish", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.finishOrder" ], + "triggerPoint" : { + "event" : "java.lang.String.FINISH", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "finishOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.PROCESSING", + "lineNumber" : 34, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.PROCESSING", + "targetState" : "String.COMPLETED", + "event" : "String.FINISH" + } ], + "linkResolution" : "RESOLVED" + }, { "entryPoint" : { "type" : "REST", "name" : "POST /api/orders/resume", @@ -229,7 +625,368 @@ "ambiguous" : false }, "contextMachineId" : "orderId", - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : null + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/orders/reactive", + "className" : "click.kamil.examples.statemachine.extended.web.OrderController", + "methodName" : "reactiveOrder", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java", + "metadata" : { + "path" : "/api/orders/reactive", + "verb" : "POST" + }, + "parameters" : [ { + "name" : "orderId", + "type" : "String", + "annotations" : [ ] + } ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.reactiveOrder", "click.kamil.examples.statemachine.extended.service.ReactiveOrderService.processReactive" ], + "triggerPoint" : { + "event" : "java.lang.String.REACTIVE_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.ReactiveOrderService", + "methodName" : "processReactive", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ReactiveOrderService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.START", + "lineNumber" : 18, + "polymorphicEvents" : [ "java.lang.String.REACTIVE_EVENT" ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.START", + "targetState" : "String.PROCESSING", + "event" : "String.REACTIVE_EVENT" + } ], + "linkResolution" : "RESOLVED" + }, { + "entryPoint" : { + "type" : "CUSTOM", + "name" : "INTERCEPTOR: AuditInterceptor.preHandle", + "className" : "click.kamil.examples.statemachine.extended.web.AuditInterceptor", + "methodName" : "preHandle", + "sourceFile" : null, + "metadata" : { + "interceptorType" : "Spring MVC Interceptor" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.AuditInterceptor.preHandle" ], + "triggerPoint" : { + "event" : "java.lang.String.AUDIT_EVENT", + "className" : "click.kamil.examples.statemachine.extended.web.AuditInterceptor", + "methodName" : "preHandle", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/AuditInterceptor.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : "java.lang.String.START", + "lineNumber" : 16, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : [ { + "sourceState" : "String.START", + "targetState" : "String.START", + "event" : "String.AUDIT_EVENT" + } ], + "linkResolution" : "RESOLVED" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "GET /test-setter", + "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController", + "methodName" : "testSetter", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java", + "metadata" : { + "path" : "/test-setter", + "verb" : "GET" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.SetterInjectionController.testSetter", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/quirk/primary", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testPrimary", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/primary", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testPrimary", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.PRIMARY_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 19, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/quirk/named", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testNamed", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/named", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testNamed", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/quirk/qualifier", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testQualifier", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/qualifier", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testQualifier", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.QUALIFIER_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/quirk/fallback", + "className" : "click.kamil.examples.statemachine.extended.web.QuirkController", + "methodName" : "testFallback", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java", + "metadata" : { + "path" : "/api/quirk/fallback", + "verb" : "POST" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.PRIMARY_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 19, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "GET /test-concrete", + "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController", + "methodName" : "testConcrete", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java", + "metadata" : { + "path" : "/test-concrete", + "verb" : "GET" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController.testConcrete", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.QUALIFIER_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "GET /test-field", + "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController", + "methodName" : "testField", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java", + "metadata" : { + "path" : "/test-field", + "verb" : "GET" + }, + "parameters" : [ ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.FieldInjectionController.testField", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ], + "triggerPoint" : { + "event" : "java.lang.String.NAMED_EVENT", + "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService", + "methodName" : "doQuirk", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 17, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "GET /api/base/{id}", + "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", + "methodName" : "processBaseEndpoint", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", + "metadata" : { + "path" : "/api/base/{id}", + "verb" : "GET" + }, + "parameters" : [ { + "name" : "id", + "type" : "String", + "annotations" : [ "PathVariable" ] + } ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.processBaseEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.processPayment" ], + "triggerPoint" : { + "event" : "java.lang.String.AUTHORIZE", + "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", + "methodName" : "processPayment", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 22, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : null, + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" + }, { + "entryPoint" : { + "type" : "REST", + "name" : "POST /api/payment/{id}/capture", + "className" : "click.kamil.examples.statemachine.extended.web.PaymentController", + "methodName" : "capturePaymentEndpoint", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java", + "metadata" : { + "path" : "/api/payment/{id}/capture", + "verb" : "POST" + }, + "parameters" : [ { + "name" : "id", + "type" : "String", + "annotations" : [ "PathVariable" ] + } ] + }, + "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.capturePaymentEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.capturePayment" ], + "triggerPoint" : { + "event" : "java.lang.String.CAPTURE", + "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl", + "methodName" : "capturePayment", + "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 35, + "polymorphicEvents" : [ ], + "external" : false, + "constraint" : null, + "ambiguous" : false + }, + "contextMachineId" : "paymentId", + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" }, { "entryPoint" : { "type" : "REST", @@ -263,7 +1020,8 @@ "ambiguous" : false }, "contextMachineId" : "paymentId", - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : null } ], "properties" : { "default" : { diff --git a/state_machine_exporter/src/test/resources/golden/InheritanceStateMachineConfig/InheritanceStateMachineConfig.json b/state_machine_exporter/src/test/resources/golden/InheritanceStateMachineConfig/InheritanceStateMachineConfig.json index 8b474bd..87db0a5 100644 --- a/state_machine_exporter/src/test/resources/golden/InheritanceStateMachineConfig/InheritanceStateMachineConfig.json +++ b/state_machine_exporter/src/test/resources/golden/InheritanceStateMachineConfig/InheritanceStateMachineConfig.json @@ -91,7 +91,8 @@ "sourceState" : "String.START", "targetState" : "String.WORKING", "event" : "String.INHERITED_SUBMIT" - } ] + } ], + "linkResolution" : "RESOLVED" } ], "properties" : { "default" : { } diff --git a/state_machine_exporter/src/test/resources/golden/MavenOrderStateMachine/MavenOrderStateMachine.json b/state_machine_exporter/src/test/resources/golden/MavenOrderStateMachine/MavenOrderStateMachine.json index 09f2406..4c0f68d 100644 --- a/state_machine_exporter/src/test/resources/golden/MavenOrderStateMachine/MavenOrderStateMachine.json +++ b/state_machine_exporter/src/test/resources/golden/MavenOrderStateMachine/MavenOrderStateMachine.json @@ -59,7 +59,33 @@ "stateTypeFqn" : "String", "eventTypeFqn" : "String", "metadata" : { - "triggers" : [ ], + "triggers" : [ { + "event" : "java.lang.String.SUBMIT", + "className" : "click.kamil.maven.core.MavenOrderStateMachine.OrderController", + "methodName" : "submitOrder", + "sourceFile" : "core-module/src/main/java/click/kamil/maven/core/MavenOrderStateMachine.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 40, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + }, { + "event" : "java.lang.String.ORDER_EVENT", + "className" : "click.kamil.maven.core.MavenOrderStateMachine.OrderService", + "methodName" : "onMessage", + "sourceFile" : "core-module/src/main/java/click/kamil/maven/core/MavenOrderStateMachine.java", + "sourceModule" : null, + "stateMachineId" : null, + "sourceState" : null, + "lineNumber" : 52, + "polymorphicEvents" : null, + "external" : false, + "constraint" : null, + "ambiguous" : false + } ], "entryPoints" : [ { "type" : "REST", "name" : "POST /maven/orders/submit", @@ -128,7 +154,8 @@ "sourceState" : "String.INIT", "targetState" : "String.BUSY", "event" : "String.SUBMIT" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "JMS", @@ -166,7 +193,8 @@ "sourceState" : "String.BUSY", "targetState" : "String.DONE", "event" : "String.ORDER_EVENT" - } ] + } ], + "linkResolution" : "RESOLVED" } ], "properties" : { "default" : { } diff --git a/state_machine_exporter/src/test/resources/golden/MavenOrderStateMachine/MavenOrderStateMachine.png b/state_machine_exporter/src/test/resources/golden/MavenOrderStateMachine/MavenOrderStateMachine.png new file mode 100644 index 0000000..0ab7953 Binary files /dev/null and b/state_machine_exporter/src/test/resources/golden/MavenOrderStateMachine/MavenOrderStateMachine.png differ diff --git a/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfig/OrderStateMachineConfig.json b/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfig/OrderStateMachineConfig.json index f5b7af0..af4625b 100644 --- a/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfig/OrderStateMachineConfig.json +++ b/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfig/OrderStateMachineConfig.json @@ -126,7 +126,8 @@ "sourceState" : "String.NEW", "targetState" : "String.PROCESSING", "event" : "String.SUBMIT" - } ] + } ], + "linkResolution" : "RESOLVED" } ], "properties" : { "default" : { } diff --git a/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfig/OrderStateMachineConfig.png b/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfig/OrderStateMachineConfig.png new file mode 100644 index 0000000..c3ea432 Binary files /dev/null and b/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfig/OrderStateMachineConfig.png differ diff --git a/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfiguration/OrderStateMachineConfiguration.json b/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfiguration/OrderStateMachineConfiguration.json index 7583329..be54139 100644 --- a/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfiguration/OrderStateMachineConfiguration.json +++ b/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfiguration/OrderStateMachineConfiguration.json @@ -259,7 +259,8 @@ "sourceState" : "click.kamil.enterprise.machines.order.OrderState.NEW", "targetState" : "click.kamil.enterprise.machines.order.OrderState.PENDING", "event" : "click.kamil.enterprise.machines.order.OrderEvent.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -297,7 +298,8 @@ "sourceState" : "click.kamil.enterprise.machines.order.OrderState.PENDING", "targetState" : "click.kamil.enterprise.machines.order.OrderState.SHIPPED", "event" : "click.kamil.enterprise.machines.order.OrderEvent.SHIP" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -339,7 +341,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "UNRESOLVED_EXTERNAL" }, { "entryPoint" : { "type" : "REST", @@ -381,7 +384,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "UNRESOLVED_EXTERNAL" }, { "entryPoint" : { "type" : "REST", @@ -423,7 +427,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "UNRESOLVED_EXTERNAL" } ], "properties" : { "default" : { } diff --git a/state_machine_exporter/src/test/resources/golden/PolymorphicStateMachineConfiguration/PolymorphicStateMachineConfiguration.json b/state_machine_exporter/src/test/resources/golden/PolymorphicStateMachineConfiguration/PolymorphicStateMachineConfiguration.json index e7b0a41..b17f969 100644 --- a/state_machine_exporter/src/test/resources/golden/PolymorphicStateMachineConfiguration/PolymorphicStateMachineConfiguration.json +++ b/state_machine_exporter/src/test/resources/golden/PolymorphicStateMachineConfiguration/PolymorphicStateMachineConfiguration.json @@ -299,7 +299,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -333,7 +334,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.FULFILLED", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.FULFILL" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -367,7 +369,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.CANCEL" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -401,7 +404,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -435,7 +439,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -469,7 +474,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -503,7 +509,8 @@ "ambiguous" : true }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "AMBIGUOUS_WIDEN" }, { "entryPoint" : { "type" : "REST", @@ -537,7 +544,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -571,7 +579,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.FULFILLED", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.FULFILL" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -605,7 +614,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.CANCEL" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -639,7 +649,8 @@ "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID", "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED", "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.ABCD" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -669,7 +680,8 @@ "ambiguous" : true }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "AMBIGUOUS_WIDEN" } ], "properties" : { "default" : { diff --git a/state_machine_exporter/src/test/resources/golden/PolymorphicStateMachineConfiguration/PolymorphicStateMachineConfiguration.png b/state_machine_exporter/src/test/resources/golden/PolymorphicStateMachineConfiguration/PolymorphicStateMachineConfiguration.png new file mode 100644 index 0000000..7aff84a Binary files /dev/null and b/state_machine_exporter/src/test/resources/golden/PolymorphicStateMachineConfiguration/PolymorphicStateMachineConfiguration.png differ diff --git a/state_machine_exporter/src/test/resources/golden/StandardDocumentStateMachineConfiguration/StandardDocumentStateMachineConfiguration.json b/state_machine_exporter/src/test/resources/golden/StandardDocumentStateMachineConfiguration/StandardDocumentStateMachineConfiguration.json index 08bc5f7..cbb3d17 100644 --- a/state_machine_exporter/src/test/resources/golden/StandardDocumentStateMachineConfiguration/StandardDocumentStateMachineConfiguration.json +++ b/state_machine_exporter/src/test/resources/golden/StandardDocumentStateMachineConfiguration/StandardDocumentStateMachineConfiguration.json @@ -213,7 +213,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.DRAFT", "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED", "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.SUBMIT" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -247,7 +248,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.APPROVED", "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.APPROVE" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -281,7 +283,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.REJECTED", "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.REJECT" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -319,7 +322,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.DRAFT", "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED", "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.SUBMIT" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -357,7 +361,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.APPROVED", "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.APPROVE" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -395,7 +400,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED", "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.REJECTED", "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.REJECT" - } ] + } ], + "linkResolution" : "RESOLVED" } ], "properties" : { "default" : { } diff --git a/state_machine_exporter/src/test/resources/golden/StandardDocumentStateMachineConfiguration/StandardDocumentStateMachineConfiguration.png b/state_machine_exporter/src/test/resources/golden/StandardDocumentStateMachineConfiguration/StandardDocumentStateMachineConfiguration.png new file mode 100644 index 0000000..d046627 Binary files /dev/null and b/state_machine_exporter/src/test/resources/golden/StandardDocumentStateMachineConfiguration/StandardDocumentStateMachineConfiguration.png differ diff --git a/state_machine_exporter/src/test/resources/golden/StandardOrderStateMachineConfiguration/StandardOrderStateMachineConfiguration.json b/state_machine_exporter/src/test/resources/golden/StandardOrderStateMachineConfiguration/StandardOrderStateMachineConfiguration.json index 3e173d9..24d7e42 100644 --- a/state_machine_exporter/src/test/resources/golden/StandardOrderStateMachineConfiguration/StandardOrderStateMachineConfiguration.json +++ b/state_machine_exporter/src/test/resources/golden/StandardOrderStateMachineConfiguration/StandardOrderStateMachineConfiguration.json @@ -257,7 +257,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.NEW", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -291,7 +292,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.SHIPPED", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.SHIP" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -325,7 +327,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.CANCELLED", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.CANCEL" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -359,7 +362,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.NEW", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -393,7 +397,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.SHIPPED", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.SHIP" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -427,7 +432,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.NEW", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -461,7 +467,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.SHIPPED", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.SHIP" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -499,7 +506,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.NEW", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.PAY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -537,7 +545,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.SHIPPED", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.SHIP" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -575,7 +584,8 @@ "sourceState" : "click.kamil.examples.statemachine.layered.order.OrderState.PAID", "targetState" : "click.kamil.examples.statemachine.layered.order.OrderState.CANCELLED", "event" : "click.kamil.examples.statemachine.layered.order.OrderTransitionEvent.CANCEL" - } ] + } ], + "linkResolution" : "RESOLVED" } ], "properties" : { "default" : { } diff --git a/state_machine_exporter/src/test/resources/golden/StandardOrderStateMachineConfiguration/StandardOrderStateMachineConfiguration.png b/state_machine_exporter/src/test/resources/golden/StandardOrderStateMachineConfiguration/StandardOrderStateMachineConfiguration.png new file mode 100644 index 0000000..665ef05 Binary files /dev/null and b/state_machine_exporter/src/test/resources/golden/StandardOrderStateMachineConfiguration/StandardOrderStateMachineConfiguration.png differ diff --git a/state_machine_exporter/src/test/resources/golden/StateMachineConfig/StateMachineConfig.json b/state_machine_exporter/src/test/resources/golden/StateMachineConfig/StateMachineConfig.json index 40a5ead..e887182 100644 --- a/state_machine_exporter/src/test/resources/golden/StateMachineConfig/StateMachineConfig.json +++ b/state_machine_exporter/src/test/resources/golden/StateMachineConfig/StateMachineConfig.json @@ -252,7 +252,8 @@ "sourceState" : "click.kamil.domain.OrderState.NEW", "targetState" : "click.kamil.domain.OrderState.PROCESSING", "event" : "click.kamil.domain.OrderEvent.PROCESS" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -286,7 +287,8 @@ "sourceState" : "click.kamil.domain.OrderState.PROCESSING", "targetState" : "click.kamil.domain.OrderState.COMPLETED", "event" : "click.kamil.domain.OrderEvent.COMPLETE" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -316,7 +318,8 @@ "ambiguous" : true }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "AMBIGUOUS_WIDEN" }, { "entryPoint" : { "type" : "REST", @@ -350,7 +353,8 @@ "sourceState" : "click.kamil.domain.OrderState.PROCESSING", "targetState" : "click.kamil.domain.OrderState.COMPLETED", "event" : "click.kamil.domain.OrderEvent.COMPLETE" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "RABBIT", @@ -388,7 +392,8 @@ "sourceState" : "click.kamil.domain.OrderState.NEW", "targetState" : "click.kamil.domain.OrderState.PROCESSING", "event" : "click.kamil.domain.OrderEvent.PROCESS" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "JMS", @@ -426,7 +431,8 @@ "sourceState" : "click.kamil.domain.OrderState.NEW", "targetState" : "click.kamil.domain.OrderState.PROCESSING", "event" : "click.kamil.domain.OrderEvent.PROCESS" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "JMS", @@ -460,7 +466,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" } ], "properties" : { "default" : { } diff --git a/state_machine_exporter/src/test/resources/golden/StateMachineConfig/StateMachineConfig.png b/state_machine_exporter/src/test/resources/golden/StateMachineConfig/StateMachineConfig.png new file mode 100644 index 0000000..66c98a8 Binary files /dev/null and b/state_machine_exporter/src/test/resources/golden/StateMachineConfig/StateMachineConfig.png differ diff --git a/state_machine_exporter/src/test/resources/golden/UserStateMachineConfiguration/UserStateMachineConfiguration.json b/state_machine_exporter/src/test/resources/golden/UserStateMachineConfiguration/UserStateMachineConfiguration.json index 665f567..331debf 100644 --- a/state_machine_exporter/src/test/resources/golden/UserStateMachineConfiguration/UserStateMachineConfiguration.json +++ b/state_machine_exporter/src/test/resources/golden/UserStateMachineConfiguration/UserStateMachineConfiguration.json @@ -252,7 +252,8 @@ "sourceState" : "click.kamil.enterprise.machines.user.UserState.REGISTERED", "targetState" : "click.kamil.enterprise.machines.user.UserState.VERIFIED", "event" : "click.kamil.enterprise.machines.user.UserEvent.VERIFY" - } ] + } ], + "linkResolution" : "RESOLVED" }, { "entryPoint" : { "type" : "REST", @@ -286,7 +287,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "NO_MATCH" }, { "entryPoint" : { "type" : "REST", @@ -328,7 +330,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "UNRESOLVED_EXTERNAL" }, { "entryPoint" : { "type" : "REST", @@ -370,7 +373,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "UNRESOLVED_EXTERNAL" }, { "entryPoint" : { "type" : "REST", @@ -412,7 +416,8 @@ "ambiguous" : false }, "contextMachineId" : null, - "matchedTransitions" : null + "matchedTransitions" : null, + "linkResolution" : "UNRESOLVED_EXTERNAL" } ], "properties" : { "default" : { }