stateless4j / stateless4j

 <dependency> <groupId>com.github.stateless4j</groupId> <artifactId>stateless4j</artifactId> <version>2.6.0</version> </dependency>

Status de Compilação

Introdução

Criar máquinas de estado e leve máquina de estado baseado em fluxos de trabalho diretamente em código java.

StateMachineConfig<State, Trigger> phoneCallConfig = new StateMachineConfig<>();phoneCallConfig.configure(State.OffHook) .permit(Trigger.CallDialed, State.Ringing);phoneCallConfig.configure(State.Ringing) .permit(Trigger.HungUp, State.OffHook) .permit(Trigger.CallConnected, State.Connected);// this example uses Java 8 method references// a Java 7 example is provided in /examplesphoneCallConfig.configure(State.Connected) .onEntry(this::startCallTimer) .onExit(this::stopCallTimer) .permit(Trigger.LeftMessage, State.OffHook) .permit(Trigger.HungUp, State.OffHook) .permit(Trigger.PlacedOnHold, State.OnHold);// ...StateMachine<State, Trigger> phoneCall = new StateMachine<>(State.OffHook, phoneCallConfig);phoneCall.fire(Trigger.CallDialed);assertEquals(State.Ringing, phoneCall.getState());

stateless4j é uma porta de monitoração de estado para java

Características

Mais padrão de máquina de estado construções são suportadas:

  • suporte Genérico para os estados e disparadores de qualquer tipo java (números, strings, enumerações, etc.)
  • Hierárquica estados
  • Entrada/saída de eventos para os estados
  • Guarda cláusulas de apoio condicional transições
  • ações definidas pelo Usuário podem ser executadas quando a transição
  • transições Internas (não chamando onExit/onEntry)
  • Introspecção

Algumas extensões úteis também são fornecidos:

  • Parametrizado, dispara
  • Reentrante estados

Hierárquica Estados

No exemplo abaixo, o OnHold estado é um substate do Connected estado. Isso significa que uma chamada OnHold ainda está conectada.

phoneCall.configure(State.OnHold) .substateOf(State.Connected) .permit(Trigger.TakenOffHold, State.Connected) .permit(Trigger.HungUp, State.OffHook) .permit(Trigger.PhoneHurledAgainstWall, State.PhoneDestroyed);

além da propriedade StateMachine.getState(), que relatará o estado atual preciso, um método isInState(State)é fornecido. isInState(State) levará em consideração as subestações, de modo que, se o exemplo acima estivesse no estadoOnHold, isInState(State.Connected) também avaliaria para true.

eventos de entrada/saída

no exemplo, o método startCallTimer() será executado quando uma chamada estiver conectada. O stopCallTimer() seráexecutado quando a chamada for concluída (desligando ou arremessando o telefone contra a parede.)

a chamada pode se mover entre os Estados Connected e OnHold sem os métodos startCallTimer() e stopCallTimer()sendo chamados repetidamente porque o estado OnHold é uma subestação do estado Connected.

os manipuladores de eventos de entrada/saída podem ser fornecidos com um parâmetro do tipo Transition que descreve os estados de gatilho,origem e destino.

Ação na transição

é possível executar uma ação definida pelo usuário ao fazer uma transição.Para uma transição’ normal ‘ou’ reentrante’, esta ação será chamadasem quaisquer parâmetros. Para transições ‘dinâmicas’ (aqueles que calculam oestado de destino com base em parâmetros fornecidos pelo gatilho), os parâmetros do thetrigger serão dados à ação.

esta ação só é executada se a transição for realmente realizada; portanto, se a transição for guardada e o guarda proibir uma transição, a ação não será executada.

se a transição for realizada, a ação será executada entre o manipuladoronExit do estado atual e o manipulador onEntry do Estado do objeto (que pode ser o mesmo estado no caso de uma transição reentrante.

Licença

Apache 2.0 Licença

Criado por @oxo42

Mantidas por Chris Narkiewicz @ezaquarii

Deixe uma resposta

O seu endereço de email não será publicado.