{
  "metadata" : {
    "triggers" : [ {
      "event" : "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" : "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" : "FALLBACK_EVENT",
      "className" : "click.kamil.examples.statemachine.extended.service.FallbackQuirkService",
      "methodName" : "doQuirk",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/FallbackQuirkService.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 17,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "PROFILED_EVENT",
      "className" : "click.kamil.examples.statemachine.extended.service.ProfiledQuirkService",
      "methodName" : "doQuirk",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ProfiledQuirkService.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 19,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "PRIMARY_EVENT",
      "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService",
      "methodName" : "doQuirk",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 19,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "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" : "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" : "QUALIFIER_EVENT",
      "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService",
      "methodName" : "doQuirk",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 17,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "NAMED_EVENT",
      "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService",
      "methodName" : "doQuirk",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 17,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "AUTHORIZE",
      "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl",
      "methodName" : "processPayment",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 22,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "CAPTURE",
      "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl",
      "methodName" : "capturePayment",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 35,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "[LIFECYCLE:RESTORE]",
      "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl",
      "methodName" : "capturePayment",
      "sourceFile" : null,
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 28,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "REACTIVE_EVENT",
      "className" : "click.kamil.examples.statemachine.extended.service.ReactiveOrderService",
      "methodName" : "processReactive",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/ReactiveOrderService.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 18,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    } ],
    "entryPoints" : [ {
      "type" : "REST",
      "name" : "POST /api/orders/submit",
      "className" : "click.kamil.examples.statemachine.extended.web.OrderController",
      "methodName" : "submitOrder",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
      "metadata" : {
        "path" : "/api/orders/submit",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/orders/cancel",
      "className" : "click.kamil.examples.statemachine.extended.web.OrderController",
      "methodName" : "cancelOrder",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
      "metadata" : {
        "path" : "/api/orders/cancel",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/orders/finish",
      "className" : "click.kamil.examples.statemachine.extended.web.OrderController",
      "methodName" : "finishOrder",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
      "metadata" : {
        "path" : "/api/orders/finish",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/orders/resume",
      "className" : "click.kamil.examples.statemachine.extended.web.OrderController",
      "methodName" : "resumeOrder",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
      "metadata" : {
        "path" : "/api/orders/resume",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "orderId",
        "type" : "String",
        "annotations" : [ ]
      } ]
    }, {
      "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",
      "name" : "GET /test-setter",
      "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController",
      "methodName" : "testSetter",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java",
      "metadata" : {
        "path" : "/test-setter",
        "verb" : "GET"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/quirk/primary",
      "className" : "click.kamil.examples.statemachine.extended.web.QuirkController",
      "methodName" : "testPrimary",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java",
      "metadata" : {
        "path" : "/api/quirk/primary",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/quirk/named",
      "className" : "click.kamil.examples.statemachine.extended.web.QuirkController",
      "methodName" : "testNamed",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java",
      "metadata" : {
        "path" : "/api/quirk/named",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/quirk/qualifier",
      "className" : "click.kamil.examples.statemachine.extended.web.QuirkController",
      "methodName" : "testQualifier",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java",
      "metadata" : {
        "path" : "/api/quirk/qualifier",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/quirk/fallback",
      "className" : "click.kamil.examples.statemachine.extended.web.QuirkController",
      "methodName" : "testFallback",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java",
      "metadata" : {
        "path" : "/api/quirk/fallback",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "GET /test-order",
      "className" : "click.kamil.examples.statemachine.extended.web.OrderedTestController",
      "methodName" : "testOrder",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderedTestController.java",
      "metadata" : {
        "path" : "/test-order",
        "verb" : "GET"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "GET /test-concrete",
      "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController",
      "methodName" : "testConcrete",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java",
      "metadata" : {
        "path" : "/test-concrete",
        "verb" : "GET"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "GET /test-field",
      "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController",
      "methodName" : "testField",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java",
      "metadata" : {
        "path" : "/test-field",
        "verb" : "GET"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "GET /test-list",
      "className" : "click.kamil.examples.statemachine.extended.web.ListInjectionController",
      "methodName" : "testList",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ListInjectionController.java",
      "metadata" : {
        "path" : "/test-list",
        "verb" : "GET"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "GET /api/base/{id}",
      "className" : "click.kamil.examples.statemachine.extended.web.PaymentController",
      "methodName" : "processBaseEndpoint",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java",
      "metadata" : {
        "path" : "/api/base/{id}",
        "verb" : "GET"
      },
      "parameters" : [ {
        "name" : "id",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /api/payment/{id}/capture",
      "className" : "click.kamil.examples.statemachine.extended.web.PaymentController",
      "methodName" : "capturePaymentEndpoint",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java",
      "metadata" : {
        "path" : "/api/payment/{id}/capture",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "id",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      } ]
    } ],
    "callChains" : [ {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/orders/submit",
        "className" : "click.kamil.examples.statemachine.extended.web.OrderController",
        "methodName" : "submitOrder",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
        "metadata" : {
          "path" : "/api/orders/submit",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.submitOrder", "click.kamil.examples.statemachine.extended.service.OrderService.processSubmit" ],
      "triggerPoint" : {
        "event" : "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" : [ "SUBMIT_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "START",
        "targetState" : "PROCESSING",
        "event" : "SUBMIT_EVENT"
      } ]
    }, {
      "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" : "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" : [ "CANCEL_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "PROCESSING",
        "targetState" : "CANCELLED",
        "event" : "CANCEL_EVENT"
      } ]
    }, {
      "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" : "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" : [ {
        "sourceState" : "PROCESSING",
        "targetState" : "COMPLETED",
        "event" : "FINISH"
      } ]
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/orders/resume",
        "className" : "click.kamil.examples.statemachine.extended.web.OrderController",
        "methodName" : "resumeOrder",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
        "metadata" : {
          "path" : "/api/orders/resume",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "orderId",
          "type" : "String",
          "annotations" : [ ]
        } ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.resumeOrder", "click.kamil.examples.statemachine.extended.service.OrderService.resumeOrder" ],
      "triggerPoint" : {
        "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
      },
      "contextMachineId" : "orderId",
      "matchedTransitions" : null
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/orders/reactive",
        "className" : "click.kamil.examples.statemachine.extended.web.OrderController",
        "methodName" : "reactiveOrder",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/OrderController.java",
        "metadata" : {
          "path" : "/api/orders/reactive",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "orderId",
          "type" : "String",
          "annotations" : [ ]
        } ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.OrderController.reactiveOrder", "click.kamil.examples.statemachine.extended.service.ReactiveOrderService.processReactive" ],
      "triggerPoint" : {
        "event" : "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" : [ "REACTIVE_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "START",
        "targetState" : "PROCESSING",
        "event" : "REACTIVE_EVENT"
      } ]
    }, {
      "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" : "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" : [ {
        "sourceState" : "START",
        "targetState" : "START",
        "event" : "AUDIT_EVENT"
      } ]
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "GET /test-setter",
        "className" : "click.kamil.examples.statemachine.extended.web.SetterInjectionController",
        "methodName" : "testSetter",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/SetterInjectionController.java",
        "metadata" : {
          "path" : "/test-setter",
          "verb" : "GET"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.SetterInjectionController.testSetter", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ],
      "triggerPoint" : {
        "event" : "NAMED_EVENT",
        "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService",
        "methodName" : "doQuirk",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 17,
        "polymorphicEvents" : [ "NAMED_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/quirk/primary",
        "className" : "click.kamil.examples.statemachine.extended.web.QuirkController",
        "methodName" : "testPrimary",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java",
        "metadata" : {
          "path" : "/api/quirk/primary",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testPrimary", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ],
      "triggerPoint" : {
        "event" : "PRIMARY_EVENT",
        "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService",
        "methodName" : "doQuirk",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 19,
        "polymorphicEvents" : [ "PRIMARY_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/quirk/named",
        "className" : "click.kamil.examples.statemachine.extended.web.QuirkController",
        "methodName" : "testNamed",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java",
        "metadata" : {
          "path" : "/api/quirk/named",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testNamed", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ],
      "triggerPoint" : {
        "event" : "NAMED_EVENT",
        "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService",
        "methodName" : "doQuirk",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 17,
        "polymorphicEvents" : [ "NAMED_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/quirk/qualifier",
        "className" : "click.kamil.examples.statemachine.extended.web.QuirkController",
        "methodName" : "testQualifier",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java",
        "metadata" : {
          "path" : "/api/quirk/qualifier",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testQualifier", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ],
      "triggerPoint" : {
        "event" : "QUALIFIER_EVENT",
        "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService",
        "methodName" : "doQuirk",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 17,
        "polymorphicEvents" : [ "QUALIFIER_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/quirk/fallback",
        "className" : "click.kamil.examples.statemachine.extended.web.QuirkController",
        "methodName" : "testFallback",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/QuirkController.java",
        "metadata" : {
          "path" : "/api/quirk/fallback",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.QuirkController.testFallback", "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService.doQuirk" ],
      "triggerPoint" : {
        "event" : "PRIMARY_EVENT",
        "className" : "click.kamil.examples.statemachine.extended.service.PrimaryQuirkService",
        "methodName" : "doQuirk",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PrimaryQuirkService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 19,
        "polymorphicEvents" : [ "PRIMARY_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "GET /test-concrete",
        "className" : "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController",
        "methodName" : "testConcrete",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/ConcreteReturnTypeController.java",
        "metadata" : {
          "path" : "/test-concrete",
          "verb" : "GET"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.ConcreteReturnTypeController.testConcrete", "click.kamil.examples.statemachine.extended.service.QualifierQuirkService.doQuirk" ],
      "triggerPoint" : {
        "event" : "QUALIFIER_EVENT",
        "className" : "click.kamil.examples.statemachine.extended.service.QualifierQuirkService",
        "methodName" : "doQuirk",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/QualifierQuirkService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 17,
        "polymorphicEvents" : [ "QUALIFIER_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "GET /test-field",
        "className" : "click.kamil.examples.statemachine.extended.web.FieldInjectionController",
        "methodName" : "testField",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/FieldInjectionController.java",
        "metadata" : {
          "path" : "/test-field",
          "verb" : "GET"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.FieldInjectionController.testField", "click.kamil.examples.statemachine.extended.service.NamedQuirkService.doQuirk" ],
      "triggerPoint" : {
        "event" : "NAMED_EVENT",
        "className" : "click.kamil.examples.statemachine.extended.service.NamedQuirkService",
        "methodName" : "doQuirk",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/NamedQuirkService.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 17,
        "polymorphicEvents" : [ "NAMED_EVENT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "GET /api/base/{id}",
        "className" : "click.kamil.examples.statemachine.extended.web.PaymentController",
        "methodName" : "processBaseEndpoint",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/web/PaymentController.java",
        "metadata" : {
          "path" : "/api/base/{id}",
          "verb" : "GET"
        },
        "parameters" : [ {
          "name" : "id",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        } ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.extended.web.PaymentController.processBaseEndpoint", "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl.processPayment" ],
      "triggerPoint" : {
        "event" : "AUTHORIZE",
        "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl",
        "methodName" : "processPayment",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 22,
        "polymorphicEvents" : [ "AUTHORIZE" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null
    }, {
      "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" : "CAPTURE",
        "className" : "click.kamil.examples.statemachine.extended.service.PaymentServiceImpl",
        "methodName" : "capturePayment",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/extended/service/PaymentServiceImpl.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 35,
        "polymorphicEvents" : [ "CAPTURE" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : "paymentId",
      "matchedTransitions" : null
    }, {
      "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
    } ],
    "properties" : {
      "default" : {
        "app.states.initial" : "INIT_STATE"
      },
      "prod" : {
        "app.states.initial" : "PROD_INITIAL"
      }
    }
  },
  "name" : "click.kamil.examples.statemachine.extended.config.ExtendedStateMachineConfig",
  "renderChoicesAsDiamonds" : true,
  "startStates" : [ "INIT_STATE" ],
  "transitions" : [ {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "\"START\"",
      "fullIdentifier" : "START"
    } ],
    "targetStates" : [ {
      "rawName" : "\"PROCESSING\"",
      "fullIdentifier" : "PROCESSING"
    } ],
    "event" : {
      "rawName" : "MyEvents.SUBMIT",
      "fullIdentifier" : "SUBMIT_EVENT"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "\"PROCESSING\"",
      "fullIdentifier" : "PROCESSING"
    } ],
    "targetStates" : [ {
      "rawName" : "\"COMPLETED\"",
      "fullIdentifier" : "COMPLETED"
    } ],
    "event" : {
      "rawName" : "\"FINISH\"",
      "fullIdentifier" : "FINISH"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "\"PROCESSING\"",
      "fullIdentifier" : "PROCESSING"
    } ],
    "targetStates" : [ {
      "rawName" : "\"CANCELLED\"",
      "fullIdentifier" : "CANCELLED"
    } ],
    "event" : {
      "rawName" : "MyEvents.CANCEL",
      "fullIdentifier" : "CANCEL_EVENT"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "\"START\"",
      "fullIdentifier" : "START"
    } ],
    "targetStates" : [ {
      "rawName" : "\"PROCESSING\"",
      "fullIdentifier" : "PROCESSING"
    } ],
    "event" : {
      "rawName" : "\"REACTIVE_EVENT\"",
      "fullIdentifier" : "REACTIVE_EVENT"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "\"START\"",
      "fullIdentifier" : "START"
    } ],
    "targetStates" : [ {
      "rawName" : "\"START\"",
      "fullIdentifier" : "START"
    } ],
    "event" : {
      "rawName" : "\"AUDIT_EVENT\"",
      "fullIdentifier" : "AUDIT_EVENT"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "\"START\"",
      "fullIdentifier" : "START"
    } ],
    "targetStates" : [ {
      "rawName" : "\"PROCESSING\"",
      "fullIdentifier" : "PROCESSING"
    } ],
    "event" : {
      "rawName" : "\"EXTERNAL_TRIGGER\"",
      "fullIdentifier" : "EXTERNAL_TRIGGER"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  } ],
  "endStates" : [ "CANCELLED", "COMPLETED" ]
}
