package tc.catseye.whothm; import java.util.ArrayList; abstract class Command { public abstract void execute(Machine m); } class DrawCommand extends Command { private Rectangle r; private TruthTable tt; public DrawCommand(Rectangle r, TruthTable tt) { this.r = r; this.tt = tt; } public void execute(Machine m) { r.draw(m.bitmap, tt); } public String toString() { return "DrawCommand(r=" + r.toString() + ",tt=" + tt.toString() + ")"; } } class DeltaCommand extends Command { private Rectangle r; private String memberName; private int delta; public DeltaCommand(Rectangle r, String memberName, int delta) { this.r = r; this.memberName = memberName; this.delta = delta; } public void execute(Machine m) { r.deltaMember(memberName, delta); } public String toString() { return "DeltaCommand(r=" + r.toString() + ",m=" + memberName + ",d=" + delta + ")"; } } class DeltaIndirectCommand extends Command { private Rectangle destRect, srcRect; private String destMember, srcMember; public DeltaIndirectCommand(Rectangle destRect, String destMember, Rectangle srcRect, String srcMember) { this.destRect = destRect; this.destMember = destMember; this.srcRect = srcRect; this.srcMember = srcMember; } public void execute(Machine m) { destRect.deltaMember(destMember, srcRect.getMember(srcMember)); } public String toString() { return "DeltaIndirectCommand(srcR=" + srcRect.toString() + ",srcM=" + srcMember + ",destR=" + destRect.toString() + ",destM=" + destMember + ")"; } } public class Machine { public BitMap bitmap; private ArrayList commands; public Machine() { this.bitmap = null; commands = new ArrayList(); } public void addDrawCommand(Rectangle r, TruthTable tt) { commands.add(new DrawCommand(r, tt)); } public void addDeltaCommand(Rectangle r, String memberName, int delta) { commands.add(new DeltaCommand(r, memberName, delta)); } public void addDeltaIndirectCommand(Rectangle destRect, String destMember, Rectangle srcRect, String srcMember) { commands.add(new DeltaIndirectCommand(destRect, destMember, srcRect, srcMember)); } public void run(BitMap bitmap) { this.bitmap = bitmap; for (int i = 0; i < 100; i++) { for (Command c : commands) { c.execute(this); } } } public String toString() { String k = "Machine(\n"; for (Command c : commands) { k += " " + c.toString() + "\n"; } return k + ")"; } }