{
  "name" : "click.kamil.enterprise.machines.user.UserStateMachineConfiguration",
  "states" : [ {
    "rawName" : "UserState.GUEST",
    "fullIdentifier" : "click.kamil.enterprise.machines.user.UserState.GUEST"
  }, {
    "rawName" : "UserState.REGISTERED",
    "fullIdentifier" : "click.kamil.enterprise.machines.user.UserState.REGISTERED"
  }, {
    "rawName" : "UserState.VERIFIED",
    "fullIdentifier" : "click.kamil.enterprise.machines.user.UserState.VERIFIED"
  } ],
  "transitions" : [ {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "UserState.GUEST",
      "fullIdentifier" : "click.kamil.enterprise.machines.user.UserState.GUEST"
    } ],
    "targetStates" : [ {
      "rawName" : "UserState.REGISTERED",
      "fullIdentifier" : "click.kamil.enterprise.machines.user.UserState.REGISTERED"
    } ],
    "event" : {
      "rawName" : "UserEvent.REGISTER",
      "fullIdentifier" : "click.kamil.enterprise.machines.user.UserEvent.REGISTER"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  }, {
    "type" : "EXTERNAL",
    "sourceStates" : [ {
      "rawName" : "UserState.REGISTERED",
      "fullIdentifier" : "click.kamil.enterprise.machines.user.UserState.REGISTERED"
    } ],
    "targetStates" : [ {
      "rawName" : "UserState.VERIFIED",
      "fullIdentifier" : "click.kamil.enterprise.machines.user.UserState.VERIFIED"
    } ],
    "event" : {
      "rawName" : "UserEvent.VERIFY",
      "fullIdentifier" : "click.kamil.enterprise.machines.user.UserEvent.VERIFY"
    },
    "guards" : [ ],
    "actions" : [ ],
    "order" : null
  } ],
  "startStates" : [ "click.kamil.enterprise.machines.user.UserState.GUEST" ],
  "endStates" : [ "click.kamil.enterprise.machines.user.UserState.VERIFIED" ],
  "renderChoicesAsDiamonds" : true,
  "flows" : [ ],
  "stateTypeFqn" : "click.kamil.enterprise.machines.user.UserState",
  "eventTypeFqn" : "click.kamil.enterprise.machines.user.UserEvent",
  "metadata" : {
    "triggers" : [ {
      "event" : "click.kamil.enterprise.machines.user.UserEvent.VERIFY",
      "className" : "click.kamil.enterprise.web.StateMachineDispatcher",
      "methodName" : "verifyUser",
      "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineDispatcher.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 65,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "click.kamil.enterprise.machines.user.UserEvent.SUSPEND",
      "className" : "click.kamil.enterprise.web.StateMachineDispatcher",
      "methodName" : "suspendUser",
      "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineDispatcher.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 72,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : null,
      "ambiguous" : false
    }, {
      "event" : "event",
      "className" : "click.kamil.enterprise.web.StateMachineDispatcher",
      "methodName" : "dispatch",
      "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineDispatcher.java",
      "sourceModule" : null,
      "stateMachineId" : null,
      "sourceState" : null,
      "lineNumber" : 93,
      "polymorphicEvents" : null,
      "external" : false,
      "constraint" : "!(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)",
      "ambiguous" : false
    } ],
    "entryPoints" : [ {
      "type" : "REST",
      "name" : "POST /api/machine/user/verify",
      "className" : "click.kamil.enterprise.web.StateMachineController",
      "methodName" : "verifyUser",
      "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
      "metadata" : {
        "path" : "/api/machine/user/verify",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "userId",
        "type" : "String",
        "annotations" : [ "RequestParam" ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /api/machine/user/suspend",
      "className" : "click.kamil.enterprise.web.StateMachineController",
      "methodName" : "suspendUser",
      "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
      "metadata" : {
        "path" : "/api/machine/user/suspend",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "userId",
        "type" : "String",
        "annotations" : [ "RequestParam" ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /api/machine/ORDER/transition/{event}",
      "className" : "click.kamil.enterprise.web.StateMachineController",
      "methodName" : "transition",
      "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
      "metadata" : {
        "path" : "/api/machine/ORDER/transition/{event}",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "machineType",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      }, {
        "name" : "event",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      }, {
        "name" : "userId",
        "type" : "String",
        "annotations" : [ "RequestParam" ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /api/machine/DOCUMENT/transition/{event}",
      "className" : "click.kamil.enterprise.web.StateMachineController",
      "methodName" : "transition",
      "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
      "metadata" : {
        "path" : "/api/machine/DOCUMENT/transition/{event}",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "machineType",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      }, {
        "name" : "event",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      }, {
        "name" : "userId",
        "type" : "String",
        "annotations" : [ "RequestParam" ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /api/machine/USER/transition/{event}",
      "className" : "click.kamil.enterprise.web.StateMachineController",
      "methodName" : "transition",
      "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
      "metadata" : {
        "path" : "/api/machine/USER/transition/{event}",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "machineType",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      }, {
        "name" : "event",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      }, {
        "name" : "userId",
        "type" : "String",
        "annotations" : [ "RequestParam" ]
      } ]
    }, {
      "type" : "REST",
      "name" : "POST /api/machine/{machineType}/transition/{event}",
      "className" : "click.kamil.enterprise.web.StateMachineController",
      "methodName" : "transition",
      "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
      "metadata" : {
        "path" : "/api/machine/{machineType}/transition/{event}",
        "verb" : "POST"
      },
      "parameters" : [ {
        "name" : "machineType",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      }, {
        "name" : "event",
        "type" : "String",
        "annotations" : [ "PathVariable" ]
      }, {
        "name" : "userId",
        "type" : "String",
        "annotations" : [ "RequestParam" ]
      } ]
    } ],
    "callChains" : [ {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/machine/user/verify",
        "className" : "click.kamil.enterprise.web.StateMachineController",
        "methodName" : "verifyUser",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
        "metadata" : {
          "path" : "/api/machine/user/verify",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "userId",
          "type" : "String",
          "annotations" : [ "RequestParam" ]
        } ]
      },
      "methodChain" : [ "click.kamil.enterprise.web.StateMachineController.verifyUser", "click.kamil.enterprise.web.StateMachineDispatcher.verifyUser" ],
      "triggerPoint" : {
        "event" : "click.kamil.enterprise.machines.user.UserEvent.VERIFY",
        "className" : "click.kamil.enterprise.web.StateMachineDispatcher",
        "methodName" : "verifyUser",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : "click.kamil.enterprise.machines.user.UserState.REGISTERED",
        "lineNumber" : 65,
        "polymorphicEvents" : [ "click.kamil.enterprise.machines.user.UserEvent.VERIFY" ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : [ {
        "sourceState" : "click.kamil.enterprise.machines.user.UserState.REGISTERED",
        "targetState" : "click.kamil.enterprise.machines.user.UserState.VERIFIED",
        "event" : "click.kamil.enterprise.machines.user.UserEvent.VERIFY"
      } ],
      "linkResolution" : "RESOLVED"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/machine/user/suspend",
        "className" : "click.kamil.enterprise.web.StateMachineController",
        "methodName" : "suspendUser",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
        "metadata" : {
          "path" : "/api/machine/user/suspend",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "userId",
          "type" : "String",
          "annotations" : [ "RequestParam" ]
        } ]
      },
      "methodChain" : [ "click.kamil.enterprise.web.StateMachineController.suspendUser", "click.kamil.enterprise.web.StateMachineDispatcher.suspendUser" ],
      "triggerPoint" : {
        "event" : "click.kamil.enterprise.machines.user.UserEvent.SUSPEND",
        "className" : "click.kamil.enterprise.web.StateMachineDispatcher",
        "methodName" : "suspendUser",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 72,
        "polymorphicEvents" : [ ],
        "external" : false,
        "constraint" : null,
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null,
      "linkResolution" : "NO_MATCH"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/machine/ORDER/transition/{event}",
        "className" : "click.kamil.enterprise.web.StateMachineController",
        "methodName" : "transition",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
        "metadata" : {
          "path" : "/api/machine/ORDER/transition/{event}",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "machineType",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        }, {
          "name" : "event",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        }, {
          "name" : "userId",
          "type" : "String",
          "annotations" : [ "RequestParam" ]
        } ]
      },
      "methodChain" : [ "click.kamil.enterprise.web.StateMachineController.transition", "click.kamil.enterprise.web.StateMachineDispatcher.dispatch" ],
      "triggerPoint" : {
        "event" : "OrderEvent.valueOf(eventString.toUpperCase())",
        "className" : "click.kamil.enterprise.web.StateMachineDispatcher",
        "methodName" : "dispatch",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 93,
        "polymorphicEvents" : [ ],
        "external" : true,
        "constraint" : "\"ORDER\".equalsIgnoreCase(machineType) && !(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)",
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null,
      "linkResolution" : "UNRESOLVED_EXTERNAL"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/machine/DOCUMENT/transition/{event}",
        "className" : "click.kamil.enterprise.web.StateMachineController",
        "methodName" : "transition",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
        "metadata" : {
          "path" : "/api/machine/DOCUMENT/transition/{event}",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "machineType",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        }, {
          "name" : "event",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        }, {
          "name" : "userId",
          "type" : "String",
          "annotations" : [ "RequestParam" ]
        } ]
      },
      "methodChain" : [ "click.kamil.enterprise.web.StateMachineController.transition", "click.kamil.enterprise.web.StateMachineDispatcher.dispatch" ],
      "triggerPoint" : {
        "event" : "DocumentEvent.valueOf(eventString.toUpperCase())",
        "className" : "click.kamil.enterprise.web.StateMachineDispatcher",
        "methodName" : "dispatch",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 93,
        "polymorphicEvents" : [ ],
        "external" : true,
        "constraint" : "\"DOCUMENT\".equalsIgnoreCase(machineType) && !(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)",
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null,
      "linkResolution" : "UNRESOLVED_EXTERNAL"
    }, {
      "entryPoint" : {
        "type" : "REST",
        "name" : "POST /api/machine/USER/transition/{event}",
        "className" : "click.kamil.enterprise.web.StateMachineController",
        "methodName" : "transition",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineController.java",
        "metadata" : {
          "path" : "/api/machine/USER/transition/{event}",
          "verb" : "POST"
        },
        "parameters" : [ {
          "name" : "machineType",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        }, {
          "name" : "event",
          "type" : "String",
          "annotations" : [ "PathVariable" ]
        }, {
          "name" : "userId",
          "type" : "String",
          "annotations" : [ "RequestParam" ]
        } ]
      },
      "methodChain" : [ "click.kamil.enterprise.web.StateMachineController.transition", "click.kamil.enterprise.web.StateMachineDispatcher.dispatch" ],
      "triggerPoint" : {
        "event" : "UserEvent.valueOf(eventString.toUpperCase())",
        "className" : "click.kamil.enterprise.web.StateMachineDispatcher",
        "methodName" : "dispatch",
        "sourceFile" : "src/main/java/click/kamil/enterprise/web/StateMachineDispatcher.java",
        "sourceModule" : null,
        "stateMachineId" : null,
        "sourceState" : null,
        "lineNumber" : 93,
        "polymorphicEvents" : [ ],
        "external" : true,
        "constraint" : "\"USER\".equalsIgnoreCase(machineType) && !(\"ORDER\".equalsIgnoreCase(machineType)) && !(\"DOCUMENT\".equalsIgnoreCase(machineType)) && \"USER\".equalsIgnoreCase(machineType)",
        "ambiguous" : false
      },
      "contextMachineId" : null,
      "matchedTransitions" : null,
      "linkResolution" : "UNRESOLVED_EXTERNAL"
    } ],
    "properties" : {
      "default" : { }
    }
  }
}
