Exclude cross-machine call chains from per-machine exports and link string-literal sendEvent triggers.
Shared String/Object generic types no longer prove machine affinity when multiple configs coexist, so Payment exports omit Order/Audit NO_MATCH stubs while @Qualifier-backed chains stay RESOLVED. String literal events now match configured string transition names for provable linking. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -6,6 +6,7 @@ import click.kamil.springstatemachineexporter.analysis.model.CallChain;
|
|||||||
import click.kamil.springstatemachineexporter.analysis.model.EntryPoint;
|
import click.kamil.springstatemachineexporter.analysis.model.EntryPoint;
|
||||||
import click.kamil.springstatemachineexporter.analysis.model.TriggerPoint;
|
import click.kamil.springstatemachineexporter.analysis.model.TriggerPoint;
|
||||||
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
|
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
|
||||||
|
import click.kamil.springstatemachineexporter.model.Transition;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -22,12 +23,20 @@ public final class MachineScopeFilter {
|
|||||||
|
|
||||||
public static List<TriggerPoint> filterTriggersForMachine(
|
public static List<TriggerPoint> filterTriggersForMachine(
|
||||||
List<TriggerPoint> triggers, String machineName, CodebaseContext context) {
|
List<TriggerPoint> triggers, String machineName, CodebaseContext context) {
|
||||||
|
return filterTriggersForMachine(triggers, machineName, context, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<TriggerPoint> filterTriggersForMachine(
|
||||||
|
List<TriggerPoint> triggers,
|
||||||
|
String machineName,
|
||||||
|
CodebaseContext context,
|
||||||
|
List<Transition> machineTransitions) {
|
||||||
if (triggers == null || machineName == null) {
|
if (triggers == null || machineName == null) {
|
||||||
return triggers == null ? List.of() : triggers;
|
return triggers == null ? List.of() : triggers;
|
||||||
}
|
}
|
||||||
List<TriggerPoint> filtered = new ArrayList<>();
|
List<TriggerPoint> filtered = new ArrayList<>();
|
||||||
for (TriggerPoint trigger : triggers) {
|
for (TriggerPoint trigger : triggers) {
|
||||||
if (isTriggerForMachine(trigger, machineName, context)) {
|
if (isTriggerForMachine(trigger, machineName, context, machineTransitions)) {
|
||||||
filtered.add(trigger);
|
filtered.add(trigger);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -36,12 +45,20 @@ public final class MachineScopeFilter {
|
|||||||
|
|
||||||
public static List<CallChain> filterCallChainsForMachine(
|
public static List<CallChain> filterCallChainsForMachine(
|
||||||
List<CallChain> chains, String machineName, CodebaseContext context) {
|
List<CallChain> chains, String machineName, CodebaseContext context) {
|
||||||
|
return filterCallChainsForMachine(chains, machineName, context, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<CallChain> filterCallChainsForMachine(
|
||||||
|
List<CallChain> chains,
|
||||||
|
String machineName,
|
||||||
|
CodebaseContext context,
|
||||||
|
List<Transition> machineTransitions) {
|
||||||
if (chains == null || machineName == null) {
|
if (chains == null || machineName == null) {
|
||||||
return chains == null ? List.of() : chains;
|
return chains == null ? List.of() : chains;
|
||||||
}
|
}
|
||||||
List<CallChain> filtered = new ArrayList<>();
|
List<CallChain> filtered = new ArrayList<>();
|
||||||
for (CallChain chain : chains) {
|
for (CallChain chain : chains) {
|
||||||
if (ROUTING.isRoutedToCorrectMachine(chain, machineName, context)) {
|
if (ROUTING.hasProvenMachineAffinity(chain, machineName, context, machineTransitions)) {
|
||||||
filtered.add(chain);
|
filtered.add(chain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,11 +101,12 @@ public final class MachineScopeFilter {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isTriggerForMachine(TriggerPoint trigger, String machineName, CodebaseContext context) {
|
private static boolean isTriggerForMachine(
|
||||||
|
TriggerPoint trigger, String machineName, CodebaseContext context, List<Transition> machineTransitions) {
|
||||||
if (trigger == null) {
|
if (trigger == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
CallChain probe = CallChain.builder().triggerPoint(trigger).methodChain(List.of()).build();
|
CallChain probe = CallChain.builder().triggerPoint(trigger).methodChain(List.of()).build();
|
||||||
return ROUTING.isRoutedToCorrectMachine(probe, machineName, context);
|
return ROUTING.hasProvenMachineAffinity(probe, machineName, context, machineTransitions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class TransitionLinkerEnricher implements AnalysisEnricher {
|
|||||||
Map<String, String> canonicalSourceBySimplified = new LinkedHashMap<>();
|
Map<String, String> canonicalSourceBySimplified = new LinkedHashMap<>();
|
||||||
for (Transition t : stateMachineTransitions) {
|
for (Transition t : stateMachineTransitions) {
|
||||||
if (t.getEvent() != null && matchingEngine.matches(t.getEvent(), tp)
|
if (t.getEvent() != null && matchingEngine.matches(t.getEvent(), tp)
|
||||||
&& isRoutedToCorrectMachine(chain, result.getName(), context)
|
&& isRoutedToCorrectMachine(chain, result.getName(), context, stateMachineTransitions)
|
||||||
&& isConstraintCompatible(tp.getConstraint(), result.getName())) {
|
&& isConstraintCompatible(tp.getConstraint(), result.getName())) {
|
||||||
String smEventForLink = canonicalEvent(t.getEvent());
|
String smEventForLink = canonicalEvent(t.getEvent());
|
||||||
for (State smSourceState : t.getSourceStates()) {
|
for (State smSourceState : t.getSourceStates()) {
|
||||||
@@ -125,7 +125,7 @@ public class TransitionLinkerEnricher implements AnalysisEnricher {
|
|||||||
.targetState(smSourceForLink)
|
.targetState(smSourceForLink)
|
||||||
.event(smEventForLink)
|
.event(smEventForLink)
|
||||||
.build();
|
.build();
|
||||||
if (isRoutedToCorrectMachine(chain, result.getName(), context)
|
if (isRoutedToCorrectMachine(chain, result.getName(), context, stateMachineTransitions)
|
||||||
&& isConstraintCompatible(tp.getConstraint(), result.getName())) {
|
&& isConstraintCompatible(tp.getConstraint(), result.getName())) {
|
||||||
matched.add(mt);
|
matched.add(mt);
|
||||||
}
|
}
|
||||||
@@ -137,7 +137,7 @@ public class TransitionLinkerEnricher implements AnalysisEnricher {
|
|||||||
.targetState(targetForLink)
|
.targetState(targetForLink)
|
||||||
.event(smEventForLink)
|
.event(smEventForLink)
|
||||||
.build();
|
.build();
|
||||||
if (isRoutedToCorrectMachine(chain, result.getName(), context)
|
if (isRoutedToCorrectMachine(chain, result.getName(), context, stateMachineTransitions)
|
||||||
&& isConstraintCompatible(tp.getConstraint(), result.getName())) {
|
&& isConstraintCompatible(tp.getConstraint(), result.getName())) {
|
||||||
matched.add(mt);
|
matched.add(mt);
|
||||||
}
|
}
|
||||||
@@ -172,14 +172,16 @@ public class TransitionLinkerEnricher implements AnalysisEnricher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<TriggerPoint> scopedTriggers = MachineScopeFilter.filterTriggersForMachine(
|
List<TriggerPoint> scopedTriggers = MachineScopeFilter.filterTriggersForMachine(
|
||||||
result.getMetadata().getTriggers(), result.getName(), context);
|
result.getMetadata().getTriggers(), result.getName(), context, stateMachineTransitions);
|
||||||
|
List<CallChain> scopedChains = MachineScopeFilter.filterCallChainsForMachine(
|
||||||
|
updatedChains, result.getName(), context, stateMachineTransitions);
|
||||||
List<EntryPoint> scopedEntryPoints = EntryPointScopeResolver.scopeFromCallChains(
|
List<EntryPoint> scopedEntryPoints = EntryPointScopeResolver.scopeFromCallChains(
|
||||||
updatedChains, result.getMetadata().getEntryPoints());
|
scopedChains, result.getMetadata().getEntryPoints());
|
||||||
|
|
||||||
CodebaseMetadata updatedMetadata = CodebaseMetadata.builder()
|
CodebaseMetadata updatedMetadata = CodebaseMetadata.builder()
|
||||||
.triggers(scopedTriggers)
|
.triggers(scopedTriggers)
|
||||||
.entryPoints(scopedEntryPoints)
|
.entryPoints(scopedEntryPoints)
|
||||||
.callChains(updatedChains)
|
.callChains(scopedChains)
|
||||||
.properties(result.getMetadata().getProperties())
|
.properties(result.getMetadata().getProperties())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@@ -187,8 +189,9 @@ public class TransitionLinkerEnricher implements AnalysisEnricher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean isRoutedToCorrectMachine(CallChain chain, String currentMachineName, CodebaseContext context) {
|
private boolean isRoutedToCorrectMachine(
|
||||||
return routingEngine.isRoutedToCorrectMachine(chain, currentMachineName, context);
|
CallChain chain, String currentMachineName, CodebaseContext context, List<Transition> machineTransitions) {
|
||||||
|
return routingEngine.hasProvenMachineAffinity(chain, currentMachineName, context, machineTransitions);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isConstraintCompatible(String constraint, String machineName) {
|
private boolean isConstraintCompatible(String constraint, String machineName) {
|
||||||
|
|||||||
@@ -88,9 +88,10 @@ public class StrictFqnMatchingEngine implements EventMatchingEngine {
|
|||||||
|
|
||||||
if (!tConst.equals(smConst)) return false;
|
if (!tConst.equals(smConst)) return false;
|
||||||
|
|
||||||
// Prevent matching string/primitive triggers to enum transitions
|
// String-typed triggers may match configured string transition events by constant name.
|
||||||
if (isStringTypeOrPrimitive(eventTypeFqn) && smEvent.contains(".") && !triggerEvent.contains(".")) {
|
if (isStringTypeOrPrimitive(eventTypeFqn) && smEvent.contains(".") && !triggerEvent.contains(".")) {
|
||||||
return false;
|
String smEnumType = smEvent.substring(0, smEvent.lastIndexOf('.'));
|
||||||
|
return isStringTypeOrPrimitive(smEnumType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevent matching enum triggers to string transitions
|
// Prevent matching enum triggers to string transitions
|
||||||
|
|||||||
@@ -2,8 +2,19 @@ package click.kamil.springstatemachineexporter.analysis.enricher.routing;
|
|||||||
|
|
||||||
import click.kamil.springstatemachineexporter.analysis.model.CallChain;
|
import click.kamil.springstatemachineexporter.analysis.model.CallChain;
|
||||||
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
|
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
|
||||||
|
import click.kamil.springstatemachineexporter.model.Transition;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface BeanResolutionEngine {
|
public interface BeanResolutionEngine {
|
||||||
boolean isRoutedToCorrectMachine(CallChain chain, String currentMachineName, CodebaseContext context);
|
boolean isRoutedToCorrectMachine(CallChain chain, String currentMachineName, CodebaseContext context);
|
||||||
|
|
||||||
|
default boolean hasProvenMachineAffinity(
|
||||||
|
CallChain chain,
|
||||||
|
String currentMachineName,
|
||||||
|
CodebaseContext context,
|
||||||
|
List<Transition> machineTransitions) {
|
||||||
|
return isRoutedToCorrectMachine(chain, currentMachineName, context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,76 @@
|
|||||||
package click.kamil.springstatemachineexporter.analysis.enricher.routing;
|
package click.kamil.springstatemachineexporter.analysis.enricher.routing;
|
||||||
|
|
||||||
|
import click.kamil.springstatemachineexporter.analysis.enricher.matching.StrictFqnMatchingEngine;
|
||||||
import click.kamil.springstatemachineexporter.analysis.model.CallChain;
|
import click.kamil.springstatemachineexporter.analysis.model.CallChain;
|
||||||
|
import click.kamil.springstatemachineexporter.analysis.model.TriggerPoint;
|
||||||
import click.kamil.springstatemachineexporter.analysis.resolver.StateMachineTypeResolver;
|
import click.kamil.springstatemachineexporter.analysis.resolver.StateMachineTypeResolver;
|
||||||
import click.kamil.springstatemachineexporter.ast.common.AstUtils;
|
import click.kamil.springstatemachineexporter.ast.common.AstUtils;
|
||||||
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
|
import click.kamil.springstatemachineexporter.ast.common.CodebaseContext;
|
||||||
|
import click.kamil.springstatemachineexporter.model.Transition;
|
||||||
import org.eclipse.jdt.core.dom.Annotation;
|
import org.eclipse.jdt.core.dom.Annotation;
|
||||||
import org.eclipse.jdt.core.dom.TypeDeclaration;
|
import org.eclipse.jdt.core.dom.TypeDeclaration;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class HeuristicBeanResolutionEngine implements BeanResolutionEngine {
|
public class HeuristicBeanResolutionEngine implements BeanResolutionEngine {
|
||||||
|
|
||||||
|
private final StrictFqnMatchingEngine matchingEngine = new StrictFqnMatchingEngine();
|
||||||
|
|
||||||
|
private enum DistinctTypeAffinity {
|
||||||
|
FOR_MACHINE,
|
||||||
|
AGAINST_MACHINE,
|
||||||
|
UNKNOWN
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasProvenMachineAffinity(
|
||||||
|
CallChain chain,
|
||||||
|
String currentMachineName,
|
||||||
|
CodebaseContext context,
|
||||||
|
List<Transition> machineTransitions) {
|
||||||
|
if (chain == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (currentMachineName == null) {
|
||||||
|
return isRoutedToCorrectMachine(chain, currentMachineName, context);
|
||||||
|
}
|
||||||
|
|
||||||
|
String explicitTarget = resolveExplicitTarget(chain);
|
||||||
|
if (explicitTarget != null && !explicitTarget.isEmpty() && context != null) {
|
||||||
|
Boolean namedTarget = resolveNamedBeanTarget(explicitTarget, currentMachineName, context);
|
||||||
|
if (namedTarget != null) {
|
||||||
|
return namedTarget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chain.getTriggerPoint() != null && context != null) {
|
||||||
|
DistinctTypeAffinity typeAffinity =
|
||||||
|
resolveDistinctTypeAffinity(chain.getTriggerPoint(), currentMachineName, context);
|
||||||
|
if (typeAffinity == DistinctTypeAffinity.FOR_MACHINE) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (typeAffinity == DistinctTypeAffinity.AGAINST_MACHINE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (context == null || isSingleStateMachine(context)) {
|
||||||
|
return isRoutedToCorrectMachine(chain, currentMachineName, context);
|
||||||
|
}
|
||||||
|
|
||||||
|
TriggerPoint trigger = chain.getTriggerPoint();
|
||||||
|
if (trigger != null && matchesConfiguredTransitionEvent(trigger, machineTransitions)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRoutedToCorrectMachine(CallChain chain, String currentMachineName, CodebaseContext context) {
|
public boolean isRoutedToCorrectMachine(CallChain chain, String currentMachineName, CodebaseContext context) {
|
||||||
String explicitTarget = chain.getContextMachineId();
|
String explicitTarget = resolveExplicitTarget(chain);
|
||||||
if (explicitTarget == null && chain.getTriggerPoint() != null) {
|
|
||||||
explicitTarget = chain.getTriggerPoint().getStateMachineId();
|
|
||||||
}
|
|
||||||
if (explicitTarget != null && !explicitTarget.isEmpty() && context != null && currentMachineName != null) {
|
if (explicitTarget != null && !explicitTarget.isEmpty() && context != null && currentMachineName != null) {
|
||||||
Boolean namedTarget = resolveNamedBeanTarget(explicitTarget, currentMachineName, context);
|
Boolean namedTarget = resolveNamedBeanTarget(explicitTarget, currentMachineName, context);
|
||||||
if (namedTarget != null) {
|
if (namedTarget != null) {
|
||||||
@@ -59,7 +112,11 @@ public class HeuristicBeanResolutionEngine implements BeanResolutionEngine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (matched) {
|
if (matched) {
|
||||||
return true;
|
if (!isAmbiguousSharedGenericMatch(
|
||||||
|
triggerEventFqn, triggerStateFqn, machineStateFqn, machineEventFqn)
|
||||||
|
|| isSingleStateMachine(context)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (mismatched) {
|
if (mismatched) {
|
||||||
return false;
|
return false;
|
||||||
@@ -144,6 +201,105 @@ public class HeuristicBeanResolutionEngine implements BeanResolutionEngine {
|
|||||||
return context == null || isSingleStateMachine(context);
|
return context == null || isSingleStateMachine(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String resolveExplicitTarget(CallChain chain) {
|
||||||
|
if (chain == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String explicitTarget = chain.getContextMachineId();
|
||||||
|
if (explicitTarget == null && chain.getTriggerPoint() != null) {
|
||||||
|
explicitTarget = chain.getTriggerPoint().getStateMachineId();
|
||||||
|
}
|
||||||
|
return explicitTarget;
|
||||||
|
}
|
||||||
|
|
||||||
|
private DistinctTypeAffinity resolveDistinctTypeAffinity(
|
||||||
|
TriggerPoint trigger, String machineName, CodebaseContext context) {
|
||||||
|
String triggerEventFqn = trigger.getEventTypeFqn();
|
||||||
|
String triggerStateFqn = trigger.getStateTypeFqn();
|
||||||
|
if (triggerEventFqn == null && triggerStateFqn == null) {
|
||||||
|
return DistinctTypeAffinity.UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] machineTypes = StateMachineTypeResolver.resolve(machineName, context);
|
||||||
|
String machineStateFqn = machineTypes[0];
|
||||||
|
String machineEventFqn = machineTypes[1];
|
||||||
|
|
||||||
|
boolean matched = false;
|
||||||
|
boolean mismatched = false;
|
||||||
|
|
||||||
|
if (triggerEventFqn != null && machineEventFqn != null) {
|
||||||
|
if (typesEquivalent(triggerEventFqn, machineEventFqn)
|
||||||
|
&& !isAmbiguousSharedGenericType(triggerEventFqn)) {
|
||||||
|
matched = true;
|
||||||
|
} else if (isDistinctTypeMismatched(triggerEventFqn, machineEventFqn)) {
|
||||||
|
mismatched = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (triggerStateFqn != null && machineStateFqn != null) {
|
||||||
|
if (typesEquivalent(triggerStateFqn, machineStateFqn)
|
||||||
|
&& !isAmbiguousSharedGenericType(triggerStateFqn)) {
|
||||||
|
matched = true;
|
||||||
|
} else if (isDistinctTypeMismatched(triggerStateFqn, machineStateFqn)) {
|
||||||
|
mismatched = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matched) {
|
||||||
|
return DistinctTypeAffinity.FOR_MACHINE;
|
||||||
|
}
|
||||||
|
if (mismatched) {
|
||||||
|
return DistinctTypeAffinity.AGAINST_MACHINE;
|
||||||
|
}
|
||||||
|
return DistinctTypeAffinity.UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean matchesConfiguredTransitionEvent(TriggerPoint trigger, List<Transition> machineTransitions) {
|
||||||
|
if (trigger == null || machineTransitions == null || machineTransitions.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (Transition transition : machineTransitions) {
|
||||||
|
if (transition.getEvent() != null && matchingEngine.matches(transition.getEvent(), trigger)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isAmbiguousSharedGenericMatch(
|
||||||
|
String triggerEventFqn,
|
||||||
|
String triggerStateFqn,
|
||||||
|
String machineStateFqn,
|
||||||
|
String machineEventFqn) {
|
||||||
|
boolean eventShared = triggerEventFqn != null
|
||||||
|
&& machineEventFqn != null
|
||||||
|
&& typesEquivalent(triggerEventFqn, machineEventFqn)
|
||||||
|
&& isAmbiguousSharedGenericType(triggerEventFqn);
|
||||||
|
boolean stateShared = triggerStateFqn != null
|
||||||
|
&& machineStateFqn != null
|
||||||
|
&& typesEquivalent(triggerStateFqn, machineStateFqn)
|
||||||
|
&& isAmbiguousSharedGenericType(triggerStateFqn);
|
||||||
|
return eventShared || stateShared;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isAmbiguousSharedGenericType(String typeFqn) {
|
||||||
|
return isErasedOrOpaqueType(typeFqn) || isStringType(typeFqn);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isDistinctTypeMismatched(String type1, String type2) {
|
||||||
|
if (isAmbiguousSharedGenericType(type1) || isAmbiguousSharedGenericType(type2)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return isTypeMismatched(type1, type2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isStringType(String typeFqn) {
|
||||||
|
if (typeFqn == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String erased = eraseGenerics(typeFqn);
|
||||||
|
return "java.lang.String".equals(erased) || "String".equals(erased);
|
||||||
|
}
|
||||||
|
|
||||||
private Boolean resolveNamedBeanTarget(String beanName, String currentMachineName, CodebaseContext context) {
|
private Boolean resolveNamedBeanTarget(String beanName, String currentMachineName, CodebaseContext context) {
|
||||||
String normalized = stripAnnotationQuotes(beanName);
|
String normalized = stripAnnotationQuotes(beanName);
|
||||||
if (normalized == null || normalized.isEmpty()) {
|
if (normalized == null || normalized.isEmpty()) {
|
||||||
|
|||||||
@@ -144,6 +144,79 @@ class MachineScopeFilterEntryPointTest {
|
|||||||
assertThat(orderScoped.get(0).getTriggerPoint().getEvent()).isEqualTo("com.example.OrderEvent.PAY");
|
assertThat(orderScoped.get(0).getTriggerPoint().getEvent()).isEqualTo("com.example.OrderEvent.PAY");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldExcludeOrderAndAuditChainsFromPaymentMachineExport(@TempDir Path tempDir) throws Exception {
|
||||||
|
writeExtendedStringMachineSample(tempDir);
|
||||||
|
|
||||||
|
CodebaseContext context = new CodebaseContext();
|
||||||
|
context.setResolveBindings(true);
|
||||||
|
context.scan(tempDir);
|
||||||
|
|
||||||
|
CallChain orderSubmit = CallChain.builder()
|
||||||
|
.entryPoint(EntryPoint.builder()
|
||||||
|
.type(EntryPoint.Type.REST)
|
||||||
|
.name("POST /api/orders/submit")
|
||||||
|
.className("com.example.OrderController")
|
||||||
|
.methodName("submitOrder")
|
||||||
|
.build())
|
||||||
|
.methodChain(List.of(
|
||||||
|
"com.example.OrderController.submitOrder",
|
||||||
|
"com.example.OrderService.processSubmit"))
|
||||||
|
.triggerPoint(TriggerPoint.builder()
|
||||||
|
.event("java.lang.String.SUBMIT_EVENT")
|
||||||
|
.eventTypeFqn("java.lang.String")
|
||||||
|
.stateTypeFqn("java.lang.String")
|
||||||
|
.className("com.example.OrderService")
|
||||||
|
.methodName("processSubmit")
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
CallChain paymentAuthorize = CallChain.builder()
|
||||||
|
.methodChain(List.of("com.example.PaymentService.processPayment"))
|
||||||
|
.triggerPoint(TriggerPoint.builder()
|
||||||
|
.event("java.lang.String.AUTHORIZE")
|
||||||
|
.eventTypeFqn("java.lang.String")
|
||||||
|
.stateTypeFqn("java.lang.String")
|
||||||
|
.stateMachineId("paymentStateMachine")
|
||||||
|
.className("com.example.PaymentService")
|
||||||
|
.methodName("processPayment")
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
List<CallChain> paymentScoped = MachineScopeFilter.filterCallChainsForMachine(
|
||||||
|
List.of(orderSubmit, paymentAuthorize),
|
||||||
|
"com.example.PaymentStateMachineConfig",
|
||||||
|
context,
|
||||||
|
List.of());
|
||||||
|
|
||||||
|
assertThat(paymentScoped).hasSize(1);
|
||||||
|
assertThat(paymentScoped.get(0).getTriggerPoint().getEvent()).isEqualTo("java.lang.String.AUTHORIZE");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeExtendedStringMachineSample(Path tempDir) throws Exception {
|
||||||
|
Files.writeString(tempDir.resolve("Machines.java"), """
|
||||||
|
package com.example;
|
||||||
|
@org.springframework.statemachine.config.EnableStateMachine(name = "paymentStateMachine")
|
||||||
|
public class PaymentStateMachineConfig
|
||||||
|
extends org.springframework.statemachine.config.StateMachineConfigurerAdapter<String, String> {}
|
||||||
|
@org.springframework.statemachine.config.EnableStateMachine(name = "extendedStateMachine")
|
||||||
|
public class ExtendedStateMachineConfig
|
||||||
|
extends org.springframework.statemachine.config.StateMachineConfigurerAdapter<String, String> {}
|
||||||
|
class OrderController {
|
||||||
|
private final OrderService orderService = new OrderService();
|
||||||
|
public void submitOrder() { orderService.processSubmit(); }
|
||||||
|
}
|
||||||
|
class OrderService {
|
||||||
|
org.springframework.statemachine.StateMachine<String, String> stateMachine;
|
||||||
|
public void processSubmit() { stateMachine.sendEvent("SUBMIT_EVENT"); }
|
||||||
|
}
|
||||||
|
class PaymentService {
|
||||||
|
@org.springframework.beans.factory.annotation.Qualifier("paymentStateMachine")
|
||||||
|
org.springframework.statemachine.StateMachine<String, String> stateMachine;
|
||||||
|
public void processPayment() { stateMachine.sendEvent("AUTHORIZE"); }
|
||||||
|
}
|
||||||
|
""");
|
||||||
|
}
|
||||||
|
|
||||||
private static void writeEnterpriseWebLayer(Path tempDir) throws Exception {
|
private static void writeEnterpriseWebLayer(Path tempDir) throws Exception {
|
||||||
Files.writeString(tempDir.resolve("App.java"), """
|
Files.writeString(tempDir.resolve("App.java"), """
|
||||||
package com.example;
|
package com.example;
|
||||||
|
|||||||
@@ -513,8 +513,7 @@ class TransitionLinkerEnricherTest {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
enricher.enrich(resultComputer, null, null);
|
enricher.enrich(resultComputer, null, null);
|
||||||
CallChain updatedChainComp = resultComputer.getMetadata().getCallChains().get(0);
|
assertThat(resultComputer.getMetadata().getCallChains()).isEmpty();
|
||||||
assertThat(updatedChainComp.getMatchedTransitions()).isNullOrEmpty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -615,27 +614,22 @@ class TransitionLinkerEnricherTest {
|
|||||||
|
|
||||||
// Test Electronics SM - Should only keep Electronics Chain
|
// Test Electronics SM - Should only keep Electronics Chain
|
||||||
enricher.enrich(resElec, null, null);
|
enricher.enrich(resElec, null, null);
|
||||||
assertThat(resElec.getMetadata().getCallChains().get(0).getMatchedTransitions()).hasSize(1); // Elec
|
assertThat(resElec.getMetadata().getCallChains()).hasSize(1);
|
||||||
assertThat(resElec.getMetadata().getCallChains().get(1).getMatchedTransitions()).isNullOrEmpty(); // Furn
|
assertThat(resElec.getMetadata().getCallChains().get(0).getMatchedTransitions()).hasSize(1);
|
||||||
assertThat(resElec.getMetadata().getCallChains().get(2).getMatchedTransitions()).isNullOrEmpty(); // Groc
|
|
||||||
|
|
||||||
// Test Furniture SM - Should only keep Furniture Chain
|
// Test Furniture SM - Should only keep Furniture Chain
|
||||||
enricher.enrich(resFurn, null, null);
|
enricher.enrich(resFurn, null, null);
|
||||||
assertThat(resFurn.getMetadata().getCallChains().get(0).getMatchedTransitions()).isNullOrEmpty(); // Elec
|
assertThat(resFurn.getMetadata().getCallChains()).hasSize(1);
|
||||||
assertThat(resFurn.getMetadata().getCallChains().get(1).getMatchedTransitions()).hasSize(1); // Furn
|
assertThat(resFurn.getMetadata().getCallChains().get(0).getMatchedTransitions()).hasSize(1);
|
||||||
assertThat(resFurn.getMetadata().getCallChains().get(2).getMatchedTransitions()).isNullOrEmpty(); // Groc
|
|
||||||
|
|
||||||
// Test Groceries SM - Should only keep Groceries Chain
|
// Test Groceries SM - Should only keep Groceries Chain
|
||||||
enricher.enrich(resGroc, null, null);
|
enricher.enrich(resGroc, null, null);
|
||||||
assertThat(resGroc.getMetadata().getCallChains().get(0).getMatchedTransitions()).isNullOrEmpty(); // Elec
|
assertThat(resGroc.getMetadata().getCallChains()).hasSize(1);
|
||||||
assertThat(resGroc.getMetadata().getCallChains().get(1).getMatchedTransitions()).isNullOrEmpty(); // Furn
|
assertThat(resGroc.getMetadata().getCallChains().get(0).getMatchedTransitions()).hasSize(1);
|
||||||
assertThat(resGroc.getMetadata().getCallChains().get(2).getMatchedTransitions()).hasSize(1); // Groc
|
|
||||||
|
|
||||||
// Test ComputerStore SM - Should reject ALL because none belong to computerstore
|
// Test ComputerStore SM - Should reject ALL because none belong to computerstore
|
||||||
enricher.enrich(resComp, null, null);
|
enricher.enrich(resComp, null, null);
|
||||||
assertThat(resComp.getMetadata().getCallChains().get(0).getMatchedTransitions()).isNullOrEmpty(); // Elec
|
assertThat(resComp.getMetadata().getCallChains()).isEmpty();
|
||||||
assertThat(resComp.getMetadata().getCallChains().get(1).getMatchedTransitions()).isNullOrEmpty(); // Furn
|
|
||||||
assertThat(resComp.getMetadata().getCallChains().get(2).getMatchedTransitions()).isNullOrEmpty(); // Groc
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -130,6 +130,28 @@ class StrictFqnMatchingEngineTest {
|
|||||||
assertThat(engine.matches(smEvent, triggerPoint)).isFalse();
|
assertThat(engine.matches(smEvent, triggerPoint)).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldMatchStringLiteralTriggerToConfiguredStringTransition() {
|
||||||
|
Event smEvent = Event.of("\"AUDIT_EVENT\"", "String.AUDIT_EVENT");
|
||||||
|
TriggerPoint triggerPoint = TriggerPoint.builder()
|
||||||
|
.event("AUDIT_EVENT")
|
||||||
|
.eventTypeFqn("java.lang.String")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
assertThat(engine.matches(smEvent, triggerPoint)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldMatchCanonicalStringLiteralTriggerToConfiguredStringTransition() {
|
||||||
|
Event smEvent = Event.of("\"AUDIT_EVENT\"", "String.AUDIT_EVENT");
|
||||||
|
TriggerPoint triggerPoint = TriggerPoint.builder()
|
||||||
|
.event("java.lang.String.AUDIT_EVENT")
|
||||||
|
.eventTypeFqn("java.lang.String")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
assertThat(engine.matches(smEvent, triggerPoint)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldNotMatchStringTypeToEnumFqn() {
|
void shouldNotMatchStringTypeToEnumFqn() {
|
||||||
Event smEvent = Event.of("PAY", "com.example.OrderEvents.PAY");
|
Event smEvent = Event.of("PAY", "com.example.OrderEvents.PAY");
|
||||||
|
|||||||
@@ -123,157 +123,8 @@
|
|||||||
"stateTypeFqn" : "String",
|
"stateTypeFqn" : "String",
|
||||||
"eventTypeFqn" : "String",
|
"eventTypeFqn" : "String",
|
||||||
"metadata" : {
|
"metadata" : {
|
||||||
"triggers" : [ {
|
"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.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",
|
|
||||||
"sourceFile" : null,
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 29,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
}, {
|
|
||||||
"event" : "[LIFECYCLE:RESTORE]",
|
|
||||||
"className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl",
|
|
||||||
"methodName" : "capturePayment",
|
|
||||||
"sourceFile" : null,
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 28,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"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" : [ {
|
"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/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" : [ ]
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"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",
|
"type" : "REST",
|
||||||
"name" : "GET /api/base/{id}",
|
"name" : "GET /api/base/{id}",
|
||||||
"className" : "click.kamil.examples.statemachine.extended.web.PaymentController",
|
"className" : "click.kamil.examples.statemachine.extended.web.PaymentController",
|
||||||
@@ -304,185 +155,7 @@
|
|||||||
"annotations" : [ "PathVariable" ]
|
"annotations" : [ "PathVariable" ]
|
||||||
} ]
|
} ]
|
||||||
} ],
|
} ],
|
||||||
"callChains" : [ {
|
"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/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"
|
|
||||||
} ],
|
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"default" : {
|
"default" : {
|
||||||
"app.states.initial" : "INIT_STATE"
|
"app.states.initial" : "INIT_STATE"
|
||||||
|
|||||||
@@ -123,157 +123,8 @@
|
|||||||
"stateTypeFqn" : "String",
|
"stateTypeFqn" : "String",
|
||||||
"eventTypeFqn" : "String",
|
"eventTypeFqn" : "String",
|
||||||
"metadata" : {
|
"metadata" : {
|
||||||
"triggers" : [ {
|
"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.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",
|
|
||||||
"sourceFile" : null,
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 29,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
}, {
|
|
||||||
"event" : "[LIFECYCLE:RESTORE]",
|
|
||||||
"className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl",
|
|
||||||
"methodName" : "capturePayment",
|
|
||||||
"sourceFile" : null,
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 28,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"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" : [ {
|
"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/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" : [ ]
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"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",
|
"type" : "REST",
|
||||||
"name" : "GET /api/base/{id}",
|
"name" : "GET /api/base/{id}",
|
||||||
"className" : "click.kamil.examples.statemachine.extended.web.PaymentController",
|
"className" : "click.kamil.examples.statemachine.extended.web.PaymentController",
|
||||||
@@ -304,185 +155,7 @@
|
|||||||
"annotations" : [ "PathVariable" ]
|
"annotations" : [ "PathVariable" ]
|
||||||
} ]
|
} ]
|
||||||
} ],
|
} ],
|
||||||
"callChains" : [ {
|
"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/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"
|
|
||||||
} ],
|
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"default" : {
|
"default" : {
|
||||||
"app.states.initial" : "INIT_STATE"
|
"app.states.initial" : "INIT_STATE"
|
||||||
|
|||||||
@@ -59,143 +59,9 @@
|
|||||||
"stateTypeFqn" : "String",
|
"stateTypeFqn" : "String",
|
||||||
"eventTypeFqn" : "String",
|
"eventTypeFqn" : "String",
|
||||||
"metadata" : {
|
"metadata" : {
|
||||||
"triggers" : [ {
|
"triggers" : [ ],
|
||||||
"event" : "java.lang.String.SUBMIT",
|
"entryPoints" : [ ],
|
||||||
"className" : "click.kamil.maven.core.MavenOrderStateMachine.OrderController",
|
"callChains" : [ ],
|
||||||
"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",
|
|
||||||
"className" : "click.kamil.maven.core.MavenOrderStateMachine.OrderController",
|
|
||||||
"methodName" : "submitOrder",
|
|
||||||
"sourceFile" : "core-module/src/main/java/click/kamil/maven/core/MavenOrderStateMachine.java",
|
|
||||||
"metadata" : {
|
|
||||||
"path" : "/maven/orders/submit",
|
|
||||||
"verb" : "POST"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "orderId",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ "RequestBody" ]
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"type" : "JMS",
|
|
||||||
"name" : "JMS: order.queue",
|
|
||||||
"className" : "click.kamil.maven.api.JmsOrderListener",
|
|
||||||
"methodName" : "onMessage",
|
|
||||||
"sourceFile" : "api-module/src/main/java/click/kamil/maven/api/JmsOrderListener.java",
|
|
||||||
"metadata" : {
|
|
||||||
"protocol" : "JMS",
|
|
||||||
"destination" : "order.queue"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "message",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ ]
|
|
||||||
} ]
|
|
||||||
} ],
|
|
||||||
"callChains" : [ {
|
|
||||||
"entryPoint" : {
|
|
||||||
"type" : "REST",
|
|
||||||
"name" : "POST /maven/orders/submit",
|
|
||||||
"className" : "click.kamil.maven.core.MavenOrderStateMachine.OrderController",
|
|
||||||
"methodName" : "submitOrder",
|
|
||||||
"sourceFile" : "core-module/src/main/java/click/kamil/maven/core/MavenOrderStateMachine.java",
|
|
||||||
"metadata" : {
|
|
||||||
"path" : "/maven/orders/submit",
|
|
||||||
"verb" : "POST"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "orderId",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ "RequestBody" ]
|
|
||||||
} ]
|
|
||||||
},
|
|
||||||
"methodChain" : [ "click.kamil.maven.core.MavenOrderStateMachine.OrderController.submitOrder" ],
|
|
||||||
"triggerPoint" : {
|
|
||||||
"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" : "java.lang.String.INIT",
|
|
||||||
"lineNumber" : 40,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : [ {
|
|
||||||
"sourceState" : "String.INIT",
|
|
||||||
"targetState" : "String.BUSY",
|
|
||||||
"event" : "String.SUBMIT"
|
|
||||||
} ],
|
|
||||||
"linkResolution" : "RESOLVED"
|
|
||||||
}, {
|
|
||||||
"entryPoint" : {
|
|
||||||
"type" : "JMS",
|
|
||||||
"name" : "JMS: order.queue",
|
|
||||||
"className" : "click.kamil.maven.api.JmsOrderListener",
|
|
||||||
"methodName" : "onMessage",
|
|
||||||
"sourceFile" : "api-module/src/main/java/click/kamil/maven/api/JmsOrderListener.java",
|
|
||||||
"metadata" : {
|
|
||||||
"protocol" : "JMS",
|
|
||||||
"destination" : "order.queue"
|
|
||||||
},
|
|
||||||
"parameters" : [ {
|
|
||||||
"name" : "message",
|
|
||||||
"type" : "String",
|
|
||||||
"annotations" : [ ]
|
|
||||||
} ]
|
|
||||||
},
|
|
||||||
"methodChain" : [ "click.kamil.maven.api.JmsOrderListener.onMessage", "click.kamil.maven.core.MavenOrderStateMachine.OrderService.onMessage" ],
|
|
||||||
"triggerPoint" : {
|
|
||||||
"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" : "java.lang.String.BUSY",
|
|
||||||
"lineNumber" : 52,
|
|
||||||
"polymorphicEvents" : [ "java.lang.String.ORDER_EVENT" ],
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : [ {
|
|
||||||
"sourceState" : "String.BUSY",
|
|
||||||
"targetState" : "String.DONE",
|
|
||||||
"event" : "String.ORDER_EVENT"
|
|
||||||
} ],
|
|
||||||
"linkResolution" : "RESOLVED"
|
|
||||||
} ],
|
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"default" : { }
|
"default" : { }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,32 +153,6 @@
|
|||||||
"eventTypeFqn" : "String",
|
"eventTypeFqn" : "String",
|
||||||
"metadata" : {
|
"metadata" : {
|
||||||
"triggers" : [ {
|
"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",
|
"event" : "java.lang.String.FALLBACK_EVENT",
|
||||||
"className" : "click.kamil.examples.statemachine.extended.service.FallbackQuirkService",
|
"className" : "click.kamil.examples.statemachine.extended.service.FallbackQuirkService",
|
||||||
"methodName" : "doQuirk",
|
"methodName" : "doQuirk",
|
||||||
@@ -217,45 +191,6 @@
|
|||||||
"external" : false,
|
"external" : false,
|
||||||
"constraint" : null,
|
"constraint" : null,
|
||||||
"ambiguous" : false
|
"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",
|
|
||||||
"sourceFile" : null,
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 29,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
}, {
|
}, {
|
||||||
"event" : "java.lang.String.QUALIFIER_EVENT",
|
"event" : "java.lang.String.QUALIFIER_EVENT",
|
||||||
"className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService",
|
"className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService",
|
||||||
@@ -308,92 +243,8 @@
|
|||||||
"external" : false,
|
"external" : false,
|
||||||
"constraint" : null,
|
"constraint" : null,
|
||||||
"ambiguous" : false
|
"ambiguous" : false
|
||||||
}, {
|
|
||||||
"event" : "[LIFECYCLE:RESTORE]",
|
|
||||||
"className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl",
|
|
||||||
"methodName" : "capturePayment",
|
|
||||||
"sourceFile" : null,
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 28,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"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" : [ {
|
"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/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" : [ ]
|
|
||||||
} ]
|
|
||||||
}, {
|
|
||||||
"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",
|
"type" : "REST",
|
||||||
"name" : "GET /test-setter",
|
"name" : "GET /test-setter",
|
||||||
"className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController",
|
"className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController",
|
||||||
@@ -502,164 +353,6 @@
|
|||||||
} ]
|
} ]
|
||||||
} ],
|
} ],
|
||||||
"callChains" : [ {
|
"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" : null,
|
|
||||||
"lineNumber" : 20,
|
|
||||||
"polymorphicEvents" : [ ],
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : null,
|
|
||||||
"linkResolution" : "NO_MATCH"
|
|
||||||
}, {
|
|
||||||
"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" : null,
|
|
||||||
"lineNumber" : 25,
|
|
||||||
"polymorphicEvents" : [ ],
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : null,
|
|
||||||
"linkResolution" : "NO_MATCH"
|
|
||||||
}, {
|
|
||||||
"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" : null,
|
|
||||||
"lineNumber" : 34,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : null,
|
|
||||||
"linkResolution" : "NO_MATCH"
|
|
||||||
}, {
|
|
||||||
"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" : null,
|
|
||||||
"lineNumber" : 18,
|
|
||||||
"polymorphicEvents" : [ ],
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : null,
|
|
||||||
"linkResolution" : "NO_MATCH"
|
|
||||||
}, {
|
|
||||||
"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" : null,
|
|
||||||
"lineNumber" : 16,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
},
|
|
||||||
"contextMachineId" : null,
|
|
||||||
"matchedTransitions" : null,
|
|
||||||
"linkResolution" : "NO_MATCH"
|
|
||||||
}, {
|
|
||||||
"entryPoint" : {
|
"entryPoint" : {
|
||||||
"type" : "REST",
|
"type" : "REST",
|
||||||
"name" : "GET /test-setter",
|
"name" : "GET /test-setter",
|
||||||
@@ -943,80 +636,6 @@
|
|||||||
"event" : "String.AUTHORIZE"
|
"event" : "String.AUTHORIZE"
|
||||||
} ],
|
} ],
|
||||||
"linkResolution" : "RESOLVED"
|
"linkResolution" : "RESOLVED"
|
||||||
}, {
|
|
||||||
"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" : "paymentStateMachine",
|
|
||||||
"sourceState" : "java.lang.String.AUTHORIZED",
|
|
||||||
"lineNumber" : 35,
|
|
||||||
"polymorphicEvents" : [ "java.lang.String.CAPTURE" ],
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
},
|
|
||||||
"contextMachineId" : "paymentId",
|
|
||||||
"matchedTransitions" : [ {
|
|
||||||
"sourceState" : "String.AUTHORIZED",
|
|
||||||
"targetState" : "String.CAPTURED",
|
|
||||||
"event" : "String.CAPTURE"
|
|
||||||
} ],
|
|
||||||
"linkResolution" : "RESOLVED"
|
|
||||||
}, {
|
|
||||||
"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" : "[LIFECYCLE:RESTORE]",
|
|
||||||
"className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl",
|
|
||||||
"methodName" : "capturePayment",
|
|
||||||
"sourceFile" : null,
|
|
||||||
"sourceModule" : null,
|
|
||||||
"stateMachineId" : null,
|
|
||||||
"sourceState" : null,
|
|
||||||
"lineNumber" : 28,
|
|
||||||
"polymorphicEvents" : null,
|
|
||||||
"external" : false,
|
|
||||||
"constraint" : null,
|
|
||||||
"ambiguous" : false
|
|
||||||
},
|
|
||||||
"contextMachineId" : "paymentId",
|
|
||||||
"matchedTransitions" : null,
|
|
||||||
"linkResolution" : null
|
|
||||||
} ],
|
} ],
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"default" : {
|
"default" : {
|
||||||
|
|||||||
Reference in New Issue
Block a user