package NET.worlds.console; import NET.worlds.scape.BumpEventTemp; import NET.worlds.scape.BumpHandler; import NET.worlds.scape.NoSuchPropertyException; import NET.worlds.scape.Portal; import NET.worlds.scape.Restorer; import NET.worlds.scape.Room; import NET.worlds.scape.Saver; import NET.worlds.scape.SuperRoot; import NET.worlds.scape.TooNewException; import NET.worlds.scape.VectorProperty; import java.io.IOException; import java.util.Enumeration; import java.util.Vector; public class AddHandler extends SuperRoot implements BumpHandler { private Vector handlers = new Vector(1); private static Object classCookie = new Object(); public AddHandler() { } public AddHandler(SuperRoot newhandler) { this.handlers.addElement(newhandler); } @Override public boolean handle(BumpEventTemp e) { Room sc = ((Portal)e.target).farSide().getRoom(); assert sc instanceof Staircase || sc instanceof Stair; Enumeration enh = this.handlers.elements(); while (enh.hasMoreElements()) { sc.addHandler(enh.nextElement()); } return true; } @Override public void saveState(Saver s) throws IOException { s.saveVersion(2, classCookie); super.saveState(s); s.saveVector(this.handlers); } @Override public void restoreState(Restorer r) throws IOException, TooNewException { switch (r.restoreVersion(classCookie)) { case 1: super.restoreState(r); case 0: if (r.restoreBoolean()) { this.handlers.addElement((SuperRoot)r.restore()); } break; case 2: super.restoreState(r); this.handlers = r.restoreVectorSuperRoot(); break; default: throw new TooNewException(); } } @Override public Object properties(int index, int offset, int mode, Object value) throws NoSuchPropertyException { Object ret = null; switch (index - offset) { case 0: if (mode == 0) { ret = new VectorProperty(this, index, "Handlers to Add"); } else if (mode == 1) { ret = this.handlers.clone(); } else if (mode == 4) { this.handlers.removeElement(value); } else if (mode == 3) { this.handlers.addElement((SuperRoot)value); } break; default: ret = super.properties(index, offset + 1, mode, value); } return ret; } }