{
  "name" : "click.kamil.examples.statemachine.polymorphic.PolymorphicStateMachineConfiguration",
  "states" : [ {
    "rawName" : "OrderStates.CANCELED",
    "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED"
  }, {
    "rawName" : "OrderStates.SUBMITTED",
    "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED"
  }, {
    "rawName" : "OrderStates.FULFILLED",
    "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.FULFILLED"
  }, {
    "rawName" : "OrderStates.PAID",
    "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID"
  } ],
  "transitions" : [ {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "OrderStates.SUBMITTED",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED"
    } ],
    "targetStates" : [ {
      "rawName" : "OrderStates.PAID",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID"
    } ],
    "event" : {
      "rawName" : "OrderEvents.PAY",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "OrderStates.PAID",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID"
    } ],
    "targetStates" : [ {
      "rawName" : "OrderStates.FULFILLED",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.FULFILLED"
    } ],
    "event" : {
      "rawName" : "OrderEvents.FULFILL",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.FULFILL"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "OrderStates.SUBMITTED",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED"
    } ],
    "targetStates" : [ {
      "rawName" : "OrderStates.CANCELED",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED"
    } ],
    "event" : {
      "rawName" : "OrderEvents.CANCEL",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.CANCEL"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "OrderStates.PAID",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID"
    } ],
    "targetStates" : [ {
      "rawName" : "OrderStates.CANCELED",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED"
    } ],
    "event" : {
      "rawName" : "OrderEvents.ABCD",
      "fullIdentifier" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.ABCD"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  } ],
  "startStates" : [ "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED" ],
  "endStates" : [ "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED", "click.kamil.examples.statemachine.polymorphic.OrderStates.FULFILLED" ],
  "renderChoicesAsDiamonds" : true,
  "flows" : [ ],
  "stateTypeFqn" : "click.kamil.examples.statemachine.polymorphic.OrderStates",
  "eventTypeFqn" : "click.kamil.examples.statemachine.polymorphic.OrderEvents",
  "metadata" : {
    "triggers" : [ {
      "event" : "event",
      "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
      "methodName" : "processEvent",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 13,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "payload",
      "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
      "methodName" : "processPayloadEvent",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 17,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "event",
      "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
      "methodName" : "processCustomEvent",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 21,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    } ],
    "entryPoints" : [ {
      "type" : "REST",
      "name" : "POST /pay",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "pay",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/pay",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /fulfill",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "fulfill",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/fulfill",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /cancel",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "cancel",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/cancel",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /payload-pay",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "payloadPay",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/payload-pay",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /pay-variable",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "payVariable",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/pay-variable",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /pay-cast",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "payCast",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/pay-cast",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /pay-ternary?isPay=true",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "payTernary",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/pay-ternary?isPay=true",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "isPay",
        "type" : "boolean",
        "annotations" : [ ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /pay-ternary?isPay=false",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "payTernary",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/pay-ternary?isPay=false",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "isPay",
        "type" : "boolean",
        "annotations" : [ ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /pay-list",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "payList",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/pay-list",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /pay-builder-static",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "payBuilderStatic",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/pay-builder-static",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /pay-builder-instance",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "payBuilderInstance",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/pay-builder-instance",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /abcd",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "abcd",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/abcd",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /mystery",
      "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
      "methodName" : "mystery",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
      "metadata" : {
        "path" : "/mystery",
        "verb" : "POST"
      },
      "parameters" : [ ]
    } ],
    "callChains" : [ {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /pay",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "pay",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/pay",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.pay", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new PayEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /fulfill",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "fulfill",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/fulfill",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.fulfill", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new FulfillEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.FULFILL" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.FULFILLED",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.FULFILL"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /cancel",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "cancel",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/cancel",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.cancel", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new CancelEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.CANCEL" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.CANCEL"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /payload-pay",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "payloadPay",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/payload-pay",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.payloadPay", "click.kamil.examples.statemachine.polymorphic.OrderService.processPayloadEvent" ],
      "triggerPoint" : {
        "event" : "new PayEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processPayloadEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "lineNumber" : 17,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /pay-variable",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "payVariable",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/pay-variable",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.payVariable", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new PayEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /pay-cast",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "payCast",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/pay-cast",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.payCast", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new PayEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /pay-ternary?isPay=true",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "payTernary",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/pay-ternary?isPay=true",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "isPay",
          "type" : "boolean",
          "annotations" : [ ]
        } ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.payTernary", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new PayEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /pay-ternary?isPay=false",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "payTernary",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/pay-ternary?isPay=false",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "isPay",
          "type" : "boolean",
          "annotations" : [ ]
        } ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.payTernary", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new CancelEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.CANCEL" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.CANCEL"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /pay-list",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "payList",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/pay-list",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.payList", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new PayEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /pay-builder-static",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "payBuilderStatic",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/pay-builder-static",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.payBuilderStatic", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new FulfillEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.FULFILL" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.FULFILLED",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.FULFILL"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /pay-builder-instance",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "payBuilderInstance",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/pay-builder-instance",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.payBuilderInstance", "click.kamil.examples.statemachine.polymorphic.OrderService.processEvent" ],
      "triggerPoint" : {
        "event" : "new CancelEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "lineNumber" : 13,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.CANCEL" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.CANCEL"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /abcd",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "abcd",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/abcd",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.abcd", "click.kamil.examples.statemachine.polymorphic.OrderService.processCustomEvent" ],
      "triggerPoint" : {
        "event" : "new AbcdEvent()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processCustomEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "lineNumber" : 21,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.ABCD" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.PAID",
        "targetState" : "click.kamil.examples.statemachine.polymorphic.OrderStates.CANCELED",
        "event" : "click.kamil.examples.statemachine.polymorphic.OrderEvents.ABCD"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /mystery",
        "className" : "click.kamil.examples.statemachine.polymorphic.PolymorphicController",
        "methodName" : "mystery",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/PolymorphicController.java",
        "metadata" : {
          "path" : "/mystery",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.polymorphic.PolymorphicController.mystery", "click.kamil.examples.statemachine.polymorphic.OrderService.processCustomEvent" ],
      "triggerPoint" : {
        "event" : "new MysteryPayload()",
        "className" : "click.kamil.examples.statemachine.polymorphic.OrderService",
        "methodName" : "processCustomEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/polymorphic/OrderService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 21,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.polymorphic.OrderEvents.ABCD", "click.kamil.examples.statemachine.polymorphic.OrderEvents.PAY" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : true
      },
      "contextMachineId" : null,
      "matchedTransitions" : null,
      "linkResolution" : "AMBIGUOUS_WIDEN"
    } ],
    "properties" : {
      "default" : {
        "spring.application.name" : "statemachinedemo"
      }
    }
  }
}
