Media Player

This example models a small object protocol with three states and transitions that describe when playback actions are allowed.

import liquidjava.specification.*;

@StateSet({"stopped", "playing", "paused"})
public class MediaPlayer {
    @StateRefinement(to="stopped()")
    public MediaPlayer() {}

    @StateRefinement(from="stopped()", to="playing()")
    public void play() {}

    @StateRefinement(from="playing()", to="paused()")
    public void pause() {}

    @StateRefinement(from="paused()", to="playing()")
    public void resume() {}

    @StateRefinement(from="!stopped()", to="stopped()")
    public void stop() {}
}
MediaPlayer player = new MediaPlayer();
player.play();
player.pause();
player.resume();
player.stop();
player.resume(); // State Refinement Error

Because resume is only valid from paused(), the final call is rejected after stop() puts the object back in stopped().


Previous Pagination Next Email

Help improve this documentation by contributing on GitHub