{
  "name" : "click.kamil.examples.statemachine.layered.document.config.StandardDocumentStateMachineConfiguration",
  "states" : [ {
    "rawName" : "DocumentState.REJECTED",
    "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.REJECTED"
  }, {
    "rawName" : "DocumentState.DRAFT",
    "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.DRAFT"
  }, {
    "rawName" : "DocumentState.APPROVED",
    "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.APPROVED"
  }, {
    "rawName" : "DocumentState.SUBMITTED",
    "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED"
  } ],
  "transitions" : [ {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "DocumentState.DRAFT",
      "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.DRAFT"
    } ],
    "targetStates" : [ {
      "rawName" : "DocumentState.SUBMITTED",
      "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED"
    } ],
    "event" : {
      "rawName" : "DocumentTransitionEvent.SUBMIT",
      "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.SUBMIT"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "DocumentState.SUBMITTED",
      "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED"
    } ],
    "targetStates" : [ {
      "rawName" : "DocumentState.APPROVED",
      "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.APPROVED"
    } ],
    "event" : {
      "rawName" : "DocumentTransitionEvent.APPROVE",
      "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.APPROVE"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "DocumentState.SUBMITTED",
      "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED"
    } ],
    "targetStates" : [ {
      "rawName" : "DocumentState.REJECTED",
      "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentState.REJECTED"
    } ],
    "event" : {
      "rawName" : "DocumentTransitionEvent.REJECT",
      "fullIdentifier" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.REJECT"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  } ],
  "startStates" : [ "click.kamil.examples.statemachine.layered.document.DocumentState.DRAFT" ],
  "endStates" : [ "click.kamil.examples.statemachine.layered.document.DocumentState.REJECTED", "click.kamil.examples.statemachine.layered.document.DocumentState.APPROVED" ],
  "renderChoicesAsDiamonds" : true,
  "flows" : [ ],
  "stateTypeFqn" : "click.kamil.examples.statemachine.layered.document.DocumentState",
  "eventTypeFqn" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent",
  "metadata" : {
    "triggers" : [ {
      "event" : "event",
      "className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
      "methodName" : "sendDocumentEvent",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 81,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    } ],
    "entryPoints" : [ {
      "type" : "REST",
      "name" : "POST /api/documents/submit",
      "className" : "click.kamil.examples.statemachine.layered.web.DocumentController",
      "methodName" : "submit",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/DocumentController.java",
      "metadata" : {
        "path" : "/api/documents/submit",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/documents/approve",
      "className" : "click.kamil.examples.statemachine.layered.web.DocumentController",
      "methodName" : "approve",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/DocumentController.java",
      "metadata" : {
        "path" : "/api/documents/approve",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/documents/reject",
      "className" : "click.kamil.examples.statemachine.layered.web.DocumentController",
      "methodName" : "reject",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/DocumentController.java",
      "metadata" : {
        "path" : "/api/documents/reject",
        "verb" : "POST"
      },
      "parameters" : [ ]
    }, {
      "type" : "REST",
      "name" : "POST /api/commands/document.submit",
      "className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
      "methodName" : "execute",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
      "metadata" : {
        "path" : "/api/commands/document.submit",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "commandKey",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /api/commands/document.approve",
      "className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
      "methodName" : "execute",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
      "metadata" : {
        "path" : "/api/commands/document.approve",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "commandKey",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /api/commands/document.reject",
      "className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
      "methodName" : "execute",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
      "metadata" : {
        "path" : "/api/commands/document.reject",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "commandKey",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /api/commands/{commandKey}",
      "className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
      "methodName" : "execute",
      "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
      "metadata" : {
        "path" : "/api/commands/{commandKey}",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "commandKey",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      } ]
    } ],
    "callChains" : [ {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/documents/submit",
        "className" : "click.kamil.examples.statemachine.layered.web.DocumentController",
        "methodName" : "submit",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/DocumentController.java",
        "metadata" : {
          "path" : "/api/documents/submit",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.layered.web.DocumentController.submit", "click.kamil.examples.statemachine.layered.web.CommandGateway.submitDocument", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentSubmit", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
      "triggerPoint" : {
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.SUBMIT",
        "className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
        "methodName" : "sendDocumentEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.DRAFT",
        "lineNumber" : 81,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.SUBMIT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.DRAFT",
        "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.SUBMIT"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/documents/approve",
        "className" : "click.kamil.examples.statemachine.layered.web.DocumentController",
        "methodName" : "approve",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/DocumentController.java",
        "metadata" : {
          "path" : "/api/documents/approve",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.layered.web.DocumentController.approve", "click.kamil.examples.statemachine.layered.web.CommandGateway.approveDocument", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentApprove", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
      "triggerPoint" : {
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.APPROVE",
        "className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
        "methodName" : "sendDocumentEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "lineNumber" : 81,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.APPROVE" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.APPROVED",
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.APPROVE"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/documents/reject",
        "className" : "click.kamil.examples.statemachine.layered.web.DocumentController",
        "methodName" : "reject",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/DocumentController.java",
        "metadata" : {
          "path" : "/api/documents/reject",
          "verb" : "POST"
        },
        "parameters" : [ ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.layered.web.DocumentController.reject", "click.kamil.examples.statemachine.layered.web.CommandGateway.rejectDocument", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentReject", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
      "triggerPoint" : {
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.REJECT",
        "className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
        "methodName" : "sendDocumentEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "lineNumber" : 81,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.REJECT" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.REJECTED",
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.REJECT"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/commands/document.submit",
        "className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
        "methodName" : "execute",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
        "metadata" : {
          "path" : "/api/commands/document.submit",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "commandKey",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        } ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.layered.web.GenericCommandController.execute", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentSubmit", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
      "triggerPoint" : {
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.SUBMIT",
        "className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
        "methodName" : "sendDocumentEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.DRAFT",
        "lineNumber" : 81,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.SUBMIT" ],
        "external" : false,
        "constraint" : "\"document.submit\".equalsIgnoreCase(commandKey) && command == DOCUMENT_SUBMIT",
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.DRAFT",
        "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.SUBMIT"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/commands/document.approve",
        "className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
        "methodName" : "execute",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
        "metadata" : {
          "path" : "/api/commands/document.approve",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "commandKey",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        } ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.layered.web.GenericCommandController.execute", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentApprove", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
      "triggerPoint" : {
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.APPROVE",
        "className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
        "methodName" : "sendDocumentEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "lineNumber" : 81,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.APPROVE" ],
        "external" : false,
        "constraint" : "\"document.approve\".equalsIgnoreCase(commandKey) && command == DOCUMENT_APPROVE",
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.APPROVED",
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.APPROVE"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/commands/document.reject",
        "className" : "click.kamil.examples.statemachine.layered.web.GenericCommandController",
        "methodName" : "execute",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/web/GenericCommandController.java",
        "metadata" : {
          "path" : "/api/commands/document.reject",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "commandKey",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        } ]
      },
      "methodChain" : [ "click.kamil.examples.statemachine.layered.web.GenericCommandController.execute", "click.kamil.examples.statemachine.layered.web.CommandGateway.executeViaMapper", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.dispatch", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.documentReject", "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher.sendDocumentEvent" ],
      "triggerPoint" : {
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.REJECT",
        "className" : "click.kamil.examples.statemachine.layered.dispatch.CentralEventDispatcher",
        "methodName" : "sendDocumentEvent",
        "sourceFile" : "src/main/java/click/kamil/examples/statemachine/layered/dispatch/CentralEventDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "lineNumber" : 81,
        "polymorphicEvents" : [ "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.REJECT" ],
        "external" : false,
        "constraint" : "\"document.reject\".equalsIgnoreCase(commandKey) && command == DOCUMENT_REJECT",
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.examples.statemachine.layered.document.DocumentState.SUBMITTED",
        "targetState" : "click.kamil.examples.statemachine.layered.document.DocumentState.REJECTED",
        "event" : "click.kamil.examples.statemachine.layered.document.DocumentTransitionEvent.REJECT"
      } ],
      "linkResolution" : "RESOLVED"
    } ],
    "properties" : {
      "default" : { }
    }
  }
}
