package com.github.atemerev.hollywood.johndoe; import com.github.atemerev.hollywood.Actor; import com.github.atemerev.hollywood.annotations.State; import com.github.atemerev.hollywood.annotations.Mandatory; import com.github.atemerev.hollywood.annotations.Initial; /** * @author Alexander Temerev * @version $Id$ */ public abstract class Clerk extends Actor { public abstract @Mandatory void talk(); public abstract @Mandatory Integer getEnergyLevel(); public abstract void goToJob(); public abstract void goHome(); public abstract void goToBar(); public abstract void goToSleep(); @Initial @State public static abstract class AtHome extends Clerk { private int sexualDesire = 120; public void talk() { System.out.println("Hey, gimme some beer!"); } public int getSexualDesire() { return sexualDesire; } } @State public static abstract class AtWork extends Clerk { private int workAmount = 10; public void talk() { System.out.println("Where are my TPS reports?"); } public int getWorkAmount() { return workAmount; } } }