MCPcopy Index your code
hub / github.com/Beh01der/EasyFlow

github.com/Beh01der/EasyFlow @EasyFlow-1.3.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release EasyFlow-1.3.1 ↗ · + Follow
179 symbols 603 edges 23 files 9 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

EasyFlow

by DataSymphony.com.au

EasyFlow 1.3 is out (12 Dec 2013) * refactored to use Java enums for states and events * added new example ATM emulator - Console application

EasyFlow is a simple and lightweight Finite State Machine for Java

With EasyFlow you can: * implement complex logic but keep your code simple and clean * handle asynchronous calls with ease and elegance * avoid concurrency by using event-driven programming approach * avoid StackOverflow error by avoiding recursion * simplify design, programming and testing of complex java applications

All this in less then 30kB and no run-time overhead! Download EasyFlow 1.3

Here is a simple example illustrating how a state machine can be definded and implemented with EasyFlow

This is a State diargam fragment describing a simple ATM workflow

State diagram fragment

With EasyFlow we can define the above state machine like this

enum States implements StateEnum {
    SHOWING_WELCOME, WAITING_FOR_PIN, RETURNING_CARD, SHOWING_WELCOME, ...
}

enum Events implements EventEnum {
    cardPresent, pinProvided, cardExtracted, cancel, ...
}
...
EasyFlow<FlowContext> flow =

    from(SHOWING_WELCOME).transit(
        on(cardPresent).to(WAITING_FOR_PIN).transit(
            on(pinProvided).to(...).transit(
                ...
            ),
            on(cancel).to(RETURNING_CARD).transit(
                on(cardExtracted).to(SHOWING_WELCOME)
            )
        )
    );

then all what's left to do is to implement our state handlers like so

whenEnter(SHOWING_WELCOME, new ContextHandler<FlowContext>() {
    @Override
    public void call(final FlowContext context) throws Exception {
        ...
        btnOption1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                context.trigger(cardPresent);
            }
        });
        ...
    }
});
...

and start the flow

flow.start(new FlowContext());

See complete example ATM emulator - Android application

To start using EasyFlow on your project, define Maven dependency like so

<dependency>
    <groupId>au.com.datasymphony</groupId>
    <artifactId>EasyFlow</artifactId>
    <version>1.3</version>
</dependency>

License Apache 2.0

Extension points exported contracts — how you extend this code

EventEnum (Interface)
User: andrey Date: 3/12/2013 Time: 9:52 PM [4 implementers]
src/main/java/au/com/ds/ef/EventEnum.java
StateEnum (Interface)
User: andrey Date: 3/12/2013 Time: 9:52 PM [4 implementers]
src/main/java/au/com/ds/ef/StateEnum.java
ContextHandler (Interface)
User: andrey Date: 12/03/13 Time: 7:29 PM [4 implementers]
src/main/java/au/com/ds/ef/call/ContextHandler.java
EventHandler (Interface)
(no doc) [4 implementers]
src/main/java/au/com/ds/ef/call/EventHandler.java
StateHandler (Interface)
(no doc) [4 implementers]
src/main/java/au/com/ds/ef/call/StateHandler.java

Core symbols most depended-on inside this repo

on
called by 65
src/main/java/au/com/ds/ef/FlowBuilder.java
transit
called by 45
src/main/java/au/com/ds/ef/Transition.java
to
called by 43
src/main/java/au/com/ds/ef/FlowBuilder.java
trigger
called by 30
src/main/java/au/com/ds/ef/EasyFlow.java
finish
called by 22
src/main/java/au/com/ds/ef/FlowBuilder.java
whenEnter
called by 21
src/main/java/au/com/ds/ef/EasyFlow.java
from
called by 17
src/main/java/au/com/ds/ef/FlowBuilder.java
getState
called by 17
src/main/java/au/com/ds/ef/StatefulContext.java

Shape

Method 140
Class 22
Enum 10
Interface 7

Languages

Java100%

Modules by API surface

src/test/java/au/com/ds/ef/JsonArrayParserTest.java33 symbols
src/main/java/au/com/ds/ef/EasyFlow.java25 symbols
src/main/java/au/com/ds/ef/StatefulContext.java20 symbols
src/main/java/au/com/ds/ef/Transition.java13 symbols
src/test/java/au/com/ds/ef/ValidationTest.java12 symbols
src/main/java/au/com/ds/ef/HandlerCollection.java12 symbols
src/test/java/au/com/ds/ef/SynchronizationTest.java10 symbols
src/test/java/au/com/ds/ef/RunSingleTest.java9 symbols
src/main/java/au/com/ds/ef/FlowBuilder.java9 symbols
src/main/java/au/com/ds/ef/TransitionCollection.java8 symbols
src/main/java/au/com/ds/ef/err/ExecutionError.java5 symbols
src/main/java/au/com/ds/ef/err/LogicViolationError.java2 symbols

For agents

$ claude mcp add EasyFlow \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact