diff --git a/state_machine_exporter/build.gradle b/state_machine_exporter/build.gradle index 2d93cfd..2e5fcc4 100644 --- a/state_machine_exporter/build.gradle +++ b/state_machine_exporter/build.gradle @@ -58,6 +58,7 @@ tasks.named('test') { task runGolden(type: JavaExec) { mainClass = "click.kamil.springstatemachineexporter.GoldenUpdater" classpath = sourceSets.test.runtimeClasspath + workingDir = rootProject.projectDir } task runGoldenFixed(type: JavaExec) { diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/TransitionLinkerEnricher.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/TransitionLinkerEnricher.java index e08594f..b7f7e81 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/TransitionLinkerEnricher.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/TransitionLinkerEnricher.java @@ -110,14 +110,30 @@ public class TransitionLinkerEnricher implements AnalysisEnricher { if (constraint == null || machineName == null) return true; String cleanMachine = machineName.substring(machineName.lastIndexOf('.') + 1).toUpperCase(); + if (cleanMachine.endsWith("STATEMACHINECONFIGURATION")) { + cleanMachine = cleanMachine.substring(0, cleanMachine.length() - "STATEMACHINECONFIGURATION".length()); + } + if (cleanMachine.endsWith("STATEMACHINE")) { + cleanMachine = cleanMachine.substring(0, cleanMachine.length() - "STATEMACHINE".length()); + } + if (cleanMachine.endsWith("CONFIG")) { + cleanMachine = cleanMachine.substring(0, cleanMachine.length() - "CONFIG".length()); + } + String constraintUpper = constraint.toUpperCase(); java.util.List allMachines = java.util.List.of("ORDER", "DOCUMENT", "USER"); for (String m : allMachines) { if (!m.equals(cleanMachine)) { - if (constraintUpper.contains(m) && !constraintUpper.contains("!" + m) && !constraintUpper.contains("NOT")) { - if (constraintUpper.contains("\"" + m + "\"") || constraintUpper.contains("'" + m + "'") || constraintUpper.contains(m + ".")) { - return false; + if (constraintUpper.contains(m)) { + int idx = constraintUpper.indexOf(m); + String sub = constraintUpper.substring(0, idx); + String cleanedSub = sub.replaceAll("[\\s\"(]+$", ""); + boolean isNegated = cleanedSub.endsWith("!") || cleanedSub.endsWith("NOT") || constraintUpper.contains("!=" + m) || constraintUpper.contains("! = " + m); + if (!isNegated) { + if (constraintUpper.contains("\"" + m + "\"") || constraintUpper.contains("'" + m + "'") || constraintUpper.contains(m + ".")) { + return false; + } } } } diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/HeuristicCallGraphEngineTypeTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/HeuristicCallGraphEngineTypeTest.java index c6e22d9..e87978b 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/HeuristicCallGraphEngineTypeTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/HeuristicCallGraphEngineTypeTest.java @@ -470,4 +470,71 @@ class HeuristicCallGraphEngineTypeTest { assertThat(chain.getTriggerPoint().getPolymorphicEvents()) .containsExactly(""); } + + @Test + void shouldResolveTernaryValueOf(@TempDir Path tempDir) throws IOException { + String source = """ + package com.example; + public class Dispatcher { + public void dispatch(String type, String eventStr) { + StateMachine sm = new StateMachine(); + if ("ORDER".equals(type)) { + OrderEvent ev = OrderEvent.valueOf(eventStr); + sm.sendEvent(ev); + } else { + UserEvent ev = UserEvent.valueOf(eventStr); + sm.sendEvent(ev); + } + } + } + enum OrderEvent { PAY } + enum UserEvent { VERIFY } + class StateMachine { + public void sendEvent(Object e) {} + } + """; + Files.writeString(tempDir.resolve("Dispatcher.java"), source); + CodebaseContext context = new CodebaseContext(); + context.scan(tempDir); + + HeuristicCallGraphEngine builder = new HeuristicCallGraphEngine(context); + + EntryPoint entry = EntryPoint.builder() + .className("com.example.Dispatcher") + .methodName("dispatch") + .build(); + TriggerPoint trigger = TriggerPoint.builder() + .className("com.example.StateMachine") + .methodName("sendEvent") + .event("e") + .build(); + + List chains = builder.findChains(List.of(entry), List.of(trigger)); + assertThat(chains).hasSize(1); + assertThat(chains.get(0).getTriggerPoint().getPolymorphicEvents()) + .containsExactlyInAnyOrder("", ""); + } + + @Test + void testEnterpriseDispatcherResolution() throws IOException { + CodebaseContext context = new CodebaseContext(); + context.scan(Path.of("../state_machines/state_machine_enterprise")); + + HeuristicCallGraphEngine builder = new HeuristicCallGraphEngine(context); + + EntryPoint entry = EntryPoint.builder() + .className("click.kamil.enterprise.web.StateMachineController") + .methodName("transition") + .build(); + TriggerPoint trigger = TriggerPoint.builder() + .className("click.kamil.enterprise.web.StateMachineDispatcher") + .methodName("dispatch") + .event("event") + .build(); + + List chains = builder.findChains(List.of(entry), List.of(trigger)); + assertThat(chains).isNotEmpty(); + assertThat(chains.get(0).getTriggerPoint().getPolymorphicEvents()) + .containsExactlyInAnyOrder("", "", ""); + } } diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngineIntegrationTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngineIntegrationTest.java index 61a32ae..23cbd8a 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngineIntegrationTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/service/JdtCallGraphEngineIntegrationTest.java @@ -282,4 +282,48 @@ class JdtCallGraphEngineIntegrationTest { "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ); } + + @Test + void testEnterpriseDispatcherResolutionJdt() throws IOException { + Path projectRoot = Path.of("../state_machines/state_machine_enterprise").toAbsolutePath().normalize(); + + CodebaseContext ctx = new CodebaseContext(); + ctx.setProjectRoot(projectRoot); + ctx.setSourcepath(List.of(projectRoot.resolve("src/main/java").toString())); + + DynamicClasspathResolver resolver = new DynamicClasspathResolver(); + List cp = resolver.resolveClasspath(projectRoot); + if (!cp.isEmpty()) { + ctx.setClasspath(cp); + } + ctx.setResolveBindings(true); + ctx.scan(Set.of(projectRoot), Collections.emptySet()); + + SpringBeanRegistry reg = new SpringBeanRegistry(); + SpringContextScanner scanner = new SpringContextScanner(reg); + + for (var cu : ctx.getCompilationUnits()) { + cu.accept(scanner); + } + + SpringDependencyResolver dependencyResolver = new SpringDependencyResolver(reg); + InjectionPointAnalyzer injectionAnalyzer = new InjectionPointAnalyzer(dependencyResolver); + + JdtCallGraphEngine jdtEngine = new JdtCallGraphEngine(ctx, injectionAnalyzer); + + EntryPoint entry = EntryPoint.builder() + .className("click.kamil.enterprise.web.StateMachineController") + .methodName("transition") + .build(); + TriggerPoint trigger = TriggerPoint.builder() + .className("click.kamil.enterprise.web.StateMachineDispatcher") + .methodName("dispatch") + .event("event") + .build(); + + List chains = jdtEngine.findChains(List.of(entry), List.of(trigger)); + assertThat(chains).isNotEmpty(); + assertThat(chains.get(0).getTriggerPoint().getPolymorphicEvents()) + .containsExactlyInAnyOrder("", "", ""); + } } 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 4834693..46e9a46 100644 --- a/state_machine_exporter/src/test/resources/golden/DocumentStateMachineConfiguration/DocumentStateMachineConfiguration.json +++ b/state_machine_exporter/src/test/resources/golden/DocumentStateMachineConfiguration/DocumentStateMachineConfiguration.json @@ -9,7 +9,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 30, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.order.OrderEvent.SHIP", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -19,7 +21,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 37, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.document.DocumentEvent.SUBMIT", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -29,7 +33,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 44, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.document.DocumentEvent.APPROVE", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -39,7 +45,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 51, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.document.DocumentEvent.REJECT", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -49,7 +57,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 58, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.user.UserEvent.VERIFY", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -59,7 +69,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 65, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.user.UserEvent.SUSPEND", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -69,7 +81,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 72, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "event", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -79,7 +93,9 @@ "stateMachineId" : null, "sourceState" : "ORDER", "lineNumber" : 81, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : "\"ORDER\".equalsIgnoreCase(machineType)" }, { "event" : "event", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -89,7 +105,9 @@ "stateMachineId" : null, "sourceState" : "DOCUMENT", "lineNumber" : 87, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && \"DOCUMENT\".equalsIgnoreCase(machineType)" }, { "event" : "event", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -99,7 +117,9 @@ "stateMachineId" : null, "sourceState" : "USER", "lineNumber" : 93, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)" } ], "entryPoints" : [ { "type" : "REST", @@ -257,7 +277,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 30, - "polymorphicEvents" : [ "OrderEvent.PAY" ] + "polymorphicEvents" : [ "OrderEvent.PAY" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -288,7 +310,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 37, - "polymorphicEvents" : [ "OrderEvent.SHIP" ] + "polymorphicEvents" : [ "OrderEvent.SHIP" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -319,7 +343,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 44, - "polymorphicEvents" : [ "DocumentEvent.SUBMIT" ] + "polymorphicEvents" : [ "DocumentEvent.SUBMIT" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : [ { @@ -354,7 +380,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 51, - "polymorphicEvents" : [ "DocumentEvent.APPROVE" ] + "polymorphicEvents" : [ "DocumentEvent.APPROVE" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : [ { @@ -389,7 +417,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 58, - "polymorphicEvents" : [ "DocumentEvent.REJECT" ] + "polymorphicEvents" : [ "DocumentEvent.REJECT" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : [ { @@ -424,7 +454,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 65, - "polymorphicEvents" : [ "UserEvent.VERIFY" ] + "polymorphicEvents" : [ "UserEvent.VERIFY" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -455,7 +487,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 72, - "polymorphicEvents" : [ "UserEvent.SUSPEND" ] + "polymorphicEvents" : [ "UserEvent.SUSPEND" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -494,22 +528,12 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 81, - "polymorphicEvents" : [ ] + "polymorphicEvents" : [ "", "", "" ], + "external" : true, + "constraint" : "\"ORDER\".equalsIgnoreCase(machineType)" }, "contextMachineId" : null, - "matchedTransitions" : [ { - "sourceState" : "DocumentState.DRAFT", - "targetState" : "DocumentState.IN_REVIEW", - "event" : "DocumentEvent.SUBMIT" - }, { - "sourceState" : "DocumentState.IN_REVIEW", - "targetState" : "DocumentState.APPROVED", - "event" : "DocumentEvent.APPROVE" - }, { - "sourceState" : "DocumentState.IN_REVIEW", - "targetState" : "DocumentState.DRAFT", - "event" : "DocumentEvent.REJECT" - } ] + "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -545,7 +569,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 87, - "polymorphicEvents" : [ ] + "polymorphicEvents" : [ "", "", "" ], + "external" : true, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && \"DOCUMENT\".equalsIgnoreCase(machineType)" }, "contextMachineId" : null, "matchedTransitions" : [ { @@ -596,22 +622,12 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 93, - "polymorphicEvents" : [ ] + "polymorphicEvents" : [ "", "", "" ], + "external" : true, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)" }, "contextMachineId" : null, - "matchedTransitions" : [ { - "sourceState" : "DocumentState.DRAFT", - "targetState" : "DocumentState.IN_REVIEW", - "event" : "DocumentEvent.SUBMIT" - }, { - "sourceState" : "DocumentState.IN_REVIEW", - "targetState" : "DocumentState.APPROVED", - "event" : "DocumentEvent.APPROVE" - }, { - "sourceState" : "DocumentState.IN_REVIEW", - "targetState" : "DocumentState.DRAFT", - "event" : "DocumentEvent.REJECT" - } ] + "matchedTransitions" : null } ], "properties" : { "default" : { } 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 78ef6f3..649dda2 100644 --- a/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfiguration/OrderStateMachineConfiguration.json +++ b/state_machine_exporter/src/test/resources/golden/OrderStateMachineConfiguration/OrderStateMachineConfiguration.json @@ -9,7 +9,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 30, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.order.OrderEvent.SHIP", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -19,7 +21,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 37, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.document.DocumentEvent.SUBMIT", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -29,7 +33,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 44, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.document.DocumentEvent.APPROVE", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -39,7 +45,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 51, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.document.DocumentEvent.REJECT", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -49,7 +57,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 58, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.user.UserEvent.VERIFY", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -59,7 +69,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 65, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.user.UserEvent.SUSPEND", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -69,7 +81,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 72, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "event", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -79,7 +93,9 @@ "stateMachineId" : null, "sourceState" : "ORDER", "lineNumber" : 81, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : "\"ORDER\".equalsIgnoreCase(machineType)" }, { "event" : "event", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -89,7 +105,9 @@ "stateMachineId" : null, "sourceState" : "DOCUMENT", "lineNumber" : 87, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && \"DOCUMENT\".equalsIgnoreCase(machineType)" }, { "event" : "event", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -99,7 +117,9 @@ "stateMachineId" : null, "sourceState" : "USER", "lineNumber" : 93, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)" } ], "entryPoints" : [ { "type" : "REST", @@ -257,7 +277,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 30, - "polymorphicEvents" : [ "OrderEvent.PAY" ] + "polymorphicEvents" : [ "OrderEvent.PAY" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : [ { @@ -292,7 +314,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 37, - "polymorphicEvents" : [ "OrderEvent.SHIP" ] + "polymorphicEvents" : [ "OrderEvent.SHIP" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : [ { @@ -327,7 +351,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 44, - "polymorphicEvents" : [ "DocumentEvent.SUBMIT" ] + "polymorphicEvents" : [ "DocumentEvent.SUBMIT" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -358,7 +384,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 51, - "polymorphicEvents" : [ "DocumentEvent.APPROVE" ] + "polymorphicEvents" : [ "DocumentEvent.APPROVE" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -389,7 +417,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 58, - "polymorphicEvents" : [ "DocumentEvent.REJECT" ] + "polymorphicEvents" : [ "DocumentEvent.REJECT" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -420,7 +450,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 65, - "polymorphicEvents" : [ "UserEvent.VERIFY" ] + "polymorphicEvents" : [ "UserEvent.VERIFY" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -451,7 +483,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 72, - "polymorphicEvents" : [ "UserEvent.SUSPEND" ] + "polymorphicEvents" : [ "UserEvent.SUSPEND" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -490,7 +524,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 81, - "polymorphicEvents" : [ ] + "polymorphicEvents" : [ "", "", "" ], + "external" : true, + "constraint" : "\"ORDER\".equalsIgnoreCase(machineType)" }, "contextMachineId" : null, "matchedTransitions" : [ { @@ -537,18 +573,12 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 87, - "polymorphicEvents" : [ ] + "polymorphicEvents" : [ "", "", "" ], + "external" : true, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && \"DOCUMENT\".equalsIgnoreCase(machineType)" }, "contextMachineId" : null, - "matchedTransitions" : [ { - "sourceState" : "OrderState.NEW", - "targetState" : "OrderState.PENDING", - "event" : "OrderEvent.PAY" - }, { - "sourceState" : "OrderState.PENDING", - "targetState" : "OrderState.SHIPPED", - "event" : "OrderEvent.SHIP" - } ] + "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -584,18 +614,12 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 93, - "polymorphicEvents" : [ ] + "polymorphicEvents" : [ "", "", "" ], + "external" : true, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)" }, "contextMachineId" : null, - "matchedTransitions" : [ { - "sourceState" : "OrderState.NEW", - "targetState" : "OrderState.PENDING", - "event" : "OrderEvent.PAY" - }, { - "sourceState" : "OrderState.PENDING", - "targetState" : "OrderState.SHIPPED", - "event" : "OrderEvent.SHIP" - } ] + "matchedTransitions" : null } ], "properties" : { "default" : { } 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 3a3ba9b..3c22686 100644 --- a/state_machine_exporter/src/test/resources/golden/UserStateMachineConfiguration/UserStateMachineConfiguration.json +++ b/state_machine_exporter/src/test/resources/golden/UserStateMachineConfiguration/UserStateMachineConfiguration.json @@ -9,7 +9,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 30, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.order.OrderEvent.SHIP", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -19,7 +21,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 37, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.document.DocumentEvent.SUBMIT", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -29,7 +33,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 44, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.document.DocumentEvent.APPROVE", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -39,7 +45,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 51, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.document.DocumentEvent.REJECT", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -49,7 +57,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 58, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.user.UserEvent.VERIFY", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -59,7 +69,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 65, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "click.kamil.enterprise.machines.user.UserEvent.SUSPEND", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -69,7 +81,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 72, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : null }, { "event" : "event", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -79,7 +93,9 @@ "stateMachineId" : null, "sourceState" : "ORDER", "lineNumber" : 81, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : "\"ORDER\".equalsIgnoreCase(machineType)" }, { "event" : "event", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -89,7 +105,9 @@ "stateMachineId" : null, "sourceState" : "DOCUMENT", "lineNumber" : 87, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && \"DOCUMENT\".equalsIgnoreCase(machineType)" }, { "event" : "event", "className" : "click.kamil.enterprise.web.StateMachineDispatcher", @@ -99,7 +117,9 @@ "stateMachineId" : null, "sourceState" : "USER", "lineNumber" : 93, - "polymorphicEvents" : null + "polymorphicEvents" : null, + "external" : false, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)" } ], "entryPoints" : [ { "type" : "REST", @@ -257,7 +277,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 30, - "polymorphicEvents" : [ "OrderEvent.PAY" ] + "polymorphicEvents" : [ "OrderEvent.PAY" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -288,7 +310,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 37, - "polymorphicEvents" : [ "OrderEvent.SHIP" ] + "polymorphicEvents" : [ "OrderEvent.SHIP" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -319,7 +343,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 44, - "polymorphicEvents" : [ "DocumentEvent.SUBMIT" ] + "polymorphicEvents" : [ "DocumentEvent.SUBMIT" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -350,7 +376,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 51, - "polymorphicEvents" : [ "DocumentEvent.APPROVE" ] + "polymorphicEvents" : [ "DocumentEvent.APPROVE" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -381,7 +409,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 58, - "polymorphicEvents" : [ "DocumentEvent.REJECT" ] + "polymorphicEvents" : [ "DocumentEvent.REJECT" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -412,7 +442,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 65, - "polymorphicEvents" : [ "UserEvent.VERIFY" ] + "polymorphicEvents" : [ "UserEvent.VERIFY" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : [ { @@ -447,7 +479,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 72, - "polymorphicEvents" : [ "UserEvent.SUSPEND" ] + "polymorphicEvents" : [ "UserEvent.SUSPEND" ], + "external" : false, + "constraint" : null }, "contextMachineId" : null, "matchedTransitions" : null @@ -486,18 +520,12 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 81, - "polymorphicEvents" : [ ] + "polymorphicEvents" : [ "", "", "" ], + "external" : true, + "constraint" : "\"ORDER\".equalsIgnoreCase(machineType)" }, "contextMachineId" : null, - "matchedTransitions" : [ { - "sourceState" : "UserState.GUEST", - "targetState" : "UserState.REGISTERED", - "event" : "UserEvent.REGISTER" - }, { - "sourceState" : "UserState.REGISTERED", - "targetState" : "UserState.VERIFIED", - "event" : "UserEvent.VERIFY" - } ] + "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -533,18 +561,12 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 87, - "polymorphicEvents" : [ ] + "polymorphicEvents" : [ "", "", "" ], + "external" : true, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && \"DOCUMENT\".equalsIgnoreCase(machineType)" }, "contextMachineId" : null, - "matchedTransitions" : [ { - "sourceState" : "UserState.GUEST", - "targetState" : "UserState.REGISTERED", - "event" : "UserEvent.REGISTER" - }, { - "sourceState" : "UserState.REGISTERED", - "targetState" : "UserState.VERIFIED", - "event" : "UserEvent.VERIFY" - } ] + "matchedTransitions" : null }, { "entryPoint" : { "type" : "REST", @@ -580,7 +602,9 @@ "stateMachineId" : null, "sourceState" : null, "lineNumber" : 93, - "polymorphicEvents" : [ ] + "polymorphicEvents" : [ "", "", "" ], + "external" : true, + "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)" }, "contextMachineId" : null, "matchedTransitions" : [ {