stateless4j / stateless4j

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

Build Status

Johdanto

luo valtiokoneita ja kevyitä valtiokonepohjaisia työnkulkuja suoraan java-koodiin.

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 on Javan stateless-portti

ominaisuudet

useimmat tavalliset valtionkoneistot ovat tuettuja:

  • yleinen tuki minkä tahansa java-tyypin (numerot, merkkijonot, enumit jne.)
  • hierarkkiset valtiot
  • sisään – / uloskäyntitapahtumat valtioille
  • ehdollisia siirtymiä tukevat Suojauslausekkeet
  • Käyttäjän määrittämät toimet voidaan suorittaa, kun transitio
  • sisäiset transitiot (ei kutsu onExit/onEntry)
  • itsetutkiskelu

on myös joitakin hyödyllisiä laajennuksia:

  • Parametrisoidut laukaisijat
  • Reentrant states

hierarkkiset valtiot

alla olevassa esimerkissä OnHold tila on Connected valtion ala-asema. Tämä tarkoittaa, että OnHold puhelu on edelleen kytketty.

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

StateMachine.getState() – ominaisuuden lisäksi, joka kertoo tarkan nykytilan, on esitetty isInState(State) – menetelmä. isInState(State) huomioi ala-asemat siten, että jos yllä oleva esimerkki olisiOnHold tilassa, isInState(State.Connected) arvioisi myös true.

Entry/Exit Events

esimerkissä startCallTimer() – menetelmä suoritetaan, kun puhelu yhdistetään. stopCallTimer() soitetaan puhelun päätyttyä (joko ripustamalla tai heittämällä puhelin seinää vasten.)

kutsu voi liikkua Connected ja OnHold valtioiden välillä ilman, että startCallTimer() ja stopCallTimer()menetelmiä kutsutaan toistuvasti, koska OnHold tila on Connected valtion aliasema.

saapumis – / Poistumistapahtumien käsittelijöille voidaan toimittaa tyyppi Transition – parametri,joka kuvaa laukaisu -, lähde-ja kohdetiloja.

Action on transition

on mahdollista suorittaa käyttäjän määrittelemä toiminto siirtymää tehtäessä.”Tavanomaisessa” tai ”uuteen liittymiseen” liittyvässä siirtymävaiheessa tätä toimea kutsutaan ilman parametreja. ”Dynaamisissa” siirtymissä (ne, jotka laskevat tavoitetilan liipaisinmuuttujien perusteella) toimelle annetaan käynnistimen parametrit.

tämä toimenpide toteutetaan vain, jos siirtyminen on todella toteutettu; joten jos siirtymä on vartioitu ja vartija kieltää siirtymisen, niin toimenpidettä ei suoriteta.

jos Siirtymä toteutetaan, toimi toteutetaan nykyisen valtiononExit käsittelijän ja kohdevaltion onEntry käsittelijän välillä (joka voi olla sama valtio, jos liittyminen tapahtuu uudelleen.

Lisenssi

Apache 2.0 License

Created by @oxo42

Maintained by Chris Narkiewicz @ezaquarii

Vastaa

Sähköpostiosoitettasi ei julkaista.