From: Hendrik B. <nh...@us...> - 2009-12-17 23:08:07
|
Update of /cvsroot/arianne/marauroa/src/marauroa/common/game In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv32227/src/marauroa/common/game Modified Files: RPObject.java SlotOwner.java RPSlot.java Definition.java RPClass.java Log Message: prepared support of RPSlots for RPEvents by abstracting RPObjects in this context to SlotOwner. The method getContainer and getContainerBase have been deprecated, as they always return an RPObject or throw an ClassCastException. They have been replaced by getContainerOwner and getContainerOwnerBase Index: RPClass.java =================================================================== RCS file: /cvsroot/arianne/marauroa/src/marauroa/common/game/RPClass.java,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -d -r1.65 -r1.66 *** RPClass.java 8 Jul 2009 18:44:03 -0000 1.65 --- RPClass.java 17 Dec 2009 23:07:54 -0000 1.66 *************** *** 313,316 **** --- 313,320 ---- rpevents.put(name, def); break; + case RPEVENT_WITH_SLOTS: + def = Definition.defineEventWithSlots(name, flags); + rpevents.put(name, def); + break; default: *************** *** 469,472 **** --- 473,488 ---- /** + * Adds a definition of an event with the given flags. + * + * @param name + * name of the definition + * @param flags + * like visibility, storability, etc... + */ + public void addRPEventWithSlots(String name, byte flags) { + add(DefinitionClass.RPEVENT_WITH_SLOTS, name, flags); + } + + /** * Returns the definition object itself. * *************** *** 488,491 **** --- 504,508 ---- break; case RPEVENT: + case RPEVENT_WITH_SLOTS: def = rpevents.get(name); break; Index: Definition.java =================================================================== RCS file: /cvsroot/arianne/marauroa/src/marauroa/common/game/Definition.java,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** Definition.java 17 Jul 2009 21:20:06 -0000 1.25 --- Definition.java 17 Dec 2009 23:07:54 -0000 1.26 *************** *** 63,67 **** RPEVENT, /** This definition is for a RPLink */ ! RPLINK } --- 63,69 ---- RPEVENT, /** This definition is for a RPLink */ ! RPLINK, ! /** This definition is for a RPEvent with slots */ ! RPEVENT_WITH_SLOTS } *************** *** 224,227 **** --- 226,247 ---- /** + * Creates an Event definition + * + * @param name + * the name of the event + * @param flags + * flags options. + * @return an Event Definition + */ + public static Definition defineEventWithSlots(String name, byte flags) { + Definition def = new Definition(DefinitionClass.RPEVENT_WITH_SLOTS); + def.name = name; + def.type = Type.NOTYPE; + def.flags = flags; + def.capacity = 0; + return def; + } + + /** * Creates a RPSLot definition * *************** *** 273,276 **** --- 293,305 ---- /** + * Returns the DefinitionClass + * + * @return DefinitionClass + */ + public DefinitionClass getDefinitionClass() { + return clazz; + } + + /** * Returns the name of the definition * Index: RPObject.java =================================================================== RCS file: /cvsroot/arianne/marauroa/src/marauroa/common/game/RPObject.java,v retrieving revision 1.92 retrieving revision 1.93 diff -C2 -d -r1.92 -r1.93 *** RPObject.java 13 Sep 2009 09:36:17 -0000 1.92 --- RPObject.java 17 Dec 2009 23:07:52 -0000 1.93 *************** *** 42,46 **** */ ! public class RPObject extends Attributes { /** the logger instance. */ --- 42,46 ---- */ ! public class RPObject extends SlotOwner { /** the logger instance. */ *************** *** 50,56 **** private boolean modified; - /** a list of slots that this object contains */ - private List<RPSlot> slots; - /** a list of events that this object contains */ private List<RPEvent> events; --- 50,53 ---- *************** *** 60,64 **** /** Which object contains this one. */ ! private RPObject container; /** In which slot are this object contained */ --- 57,61 ---- /** Which object contains this one. */ ! private SlotOwner container; /** In which slot are this object contained */ *************** *** 147,156 **** containerSlot = object.containerSlot; - for (RPSlot slot : object.slots) { - RPSlot added = (RPSlot) slot.clone(); - added.setOwner(this); - slots.add(added); - } - for (RPEvent event : object.events) { RPEvent added = (RPEvent) event.clone(); --- 144,147 ---- *************** *** 297,302 **** * the slot of the object that contains this object. */ ! public void setContainer(RPObject object, RPSlot slot) { ! container = object; containerSlot = slot; } --- 288,294 ---- * the slot of the object that contains this object. */ ! @Override ! public void setContainer(SlotOwner slotOwner, RPSlot slot) { ! container = slotOwner; containerSlot = slot; } *************** *** 307,312 **** * @return the container of this object. */ public RPObject getContainer() { ! return container; } --- 299,305 ---- * @return the container of this object. */ + @Deprecated public RPObject getContainer() { ! return (RPObject) container; } *************** *** 316,322 **** * @return the base container of this object. */ public RPObject getBaseContainer() { if (container != null) { ! return container.getBaseContainer(); } else { return this; --- 309,316 ---- * @return the base container of this object. */ + @Deprecated public RPObject getBaseContainer() { if (container != null) { ! return (RPObject) container.getContainerBaseOwner(); } else { return this; *************** *** 325,328 **** --- 319,347 ---- /** + * Returns the container where this object is + * + * @return the container of this object. + */ + @Override + public SlotOwner getContainerOwner() { + return container; + } + + /** + * Returns the base container where this object is + * + * @return the base container of this object. + */ + @Override + public SlotOwner getContainerBaseOwner() { + if (container != null) { + return container.getContainerBaseOwner(); + } else { + return this; + } + } + + + /** * Returns the slot where this object is contained * *************** *** 346,349 **** --- 365,369 ---- * object to be added to a slot */ + @Override void assignSlotID(RPObject object) { if (container != null) { *************** *** 364,367 **** --- 384,388 ---- * An ID. */ + @Override void usedSlotID(int id) { if (container != null) { *************** *** 407,425 **** } - /** - * This method returns true if the object has that slot - * - * @param name - * the name of the slot - * @return true if slot exists or false otherwise - */ - public boolean hasSlot(String name) { - for (RPSlot slot : slots) { - if (slot.getName().equals(name)) { - return true; - } - } - return false; - } /** --- 428,431 ---- *************** *** 705,709 **** public void writeObject(marauroa.common.net.OutputSerializer out) throws java.io.IOException { try { ! writeObject(out, DetailLevel.NORMAL); } catch(NullPointerException e) { logger.warn(this,e); --- 711,715 ---- public void writeObject(marauroa.common.net.OutputSerializer out) throws java.io.IOException { try { ! writeObject(out, DetailLevel.NORMAL); } catch(NullPointerException e) { logger.warn(this,e); *************** *** 737,762 **** } ! /* ! * We compute the amount of slots to serialize first. We don't serialize ! * hidden or private slots unless detail level is full. ! */ ! int size = 0; ! for (RPSlot slot : slots) { ! if (shouldSerialize(DefinitionClass.RPSLOT, slot.getName(), level)) { ! size++; ! } ! } ! ! /* ! * Now write it. ! */ ! out.write(size); ! for (RPSlot slot : slots) { ! Definition def = getRPClass().getDefinition(DefinitionClass.RPSLOT, slot.getName()); ! ! if (shouldSerialize(def, level)) { ! slot.writeObject(out, level); ! } ! } /* --- 743,747 ---- } ! serializeRPSlots(out, level); /* *************** *** 764,768 **** * hidden or private slots unless detail level is full. */ ! size = 0; for (RPLink link : links) { if (shouldSerialize(DefinitionClass.RPLINK, link.getName(), level)) { --- 749,753 ---- * hidden or private slots unless detail level is full. */ ! int size = 0; for (RPLink link : links) { if (shouldSerialize(DefinitionClass.RPLINK, link.getName(), level)) { *************** *** 823,848 **** } ! /* ! * First we load slots ! */ ! int size = in.readInt(); ! ! if (size > TimeoutConf.MAX_ARRAY_ELEMENTS) { ! throw new IOException("Illegal request of an list of " + String.valueOf(size) + " size"); ! } ! ! slots = new LinkedList<RPSlot>(); ! ! for (int i = 0; i < size; ++i) { ! RPSlot slot = new RPSlot(); ! slot.setOwner(this); ! slot = (RPSlot) in.readObject(slot); ! slots.add(slot); ! } /* * then we load links */ ! size = in.readInt(); if (size > TimeoutConf.MAX_ARRAY_ELEMENTS) { --- 808,817 ---- } ! deserializeRPSlots(in); /* * then we load links */ ! int size = in.readInt(); if (size > TimeoutConf.MAX_ARRAY_ELEMENTS) { *************** *** 1535,1537 **** --- 1504,1507 ---- } } + } Index: SlotOwner.java =================================================================== RCS file: /cvsroot/arianne/marauroa/src/marauroa/common/game/SlotOwner.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** SlotOwner.java 17 Dec 2009 21:46:48 -0000 1.1 --- SlotOwner.java 17 Dec 2009 23:07:54 -0000 1.2 *************** *** 1,7 **** --- 1,12 ---- package marauroa.common.game; + import java.io.IOException; import java.util.Iterator; + import java.util.LinkedList; import java.util.List; + import marauroa.common.TimeoutConf; + import marauroa.common.game.Definition.DefinitionClass; + /** * interface for RP-classes that own slots *************** *** 9,13 **** * @author hendrik */ ! public interface SlotOwner { /** --- 14,45 ---- * @author hendrik */ ! public abstract class SlotOwner extends Attributes { ! ! /** a list of slots that this object contains */ ! protected List<RPSlot> slots; ! ! public SlotOwner(RPClass rpclass) { ! super(rpclass); ! slots = new LinkedList<RPSlot>(); ! } ! ! ! ! @Override ! public Object fill(Attributes attr) { ! Object res = super.fill(attr); ! slots.clear(); ! if (attr instanceof SlotOwner) { ! SlotOwner slotOwner = (SlotOwner) attr; ! for (RPSlot slot : slotOwner.slots) { ! RPSlot added = (RPSlot) slot.clone(); ! added.setOwner(this); ! slots.add(added); ! } ! } ! return res; ! } ! ! /** *************** *** 18,22 **** * @return true if slot exists or false otherwise */ ! public boolean hasSlot(String name); /** --- 50,61 ---- * @return true if slot exists or false otherwise */ ! public boolean hasSlot(String name) { ! for (RPSlot slot : slots) { ! if (slot.getName().equals(name)) { ! return true; ! } ! } ! return false; ! } /** *************** *** 38,42 **** * if the slot already exists */ ! public void addSlot(RPSlot slot) throws SlotAlreadyAddedException; /** --- 77,81 ---- * if the slot already exists */ ! public abstract void addSlot(RPSlot slot) throws SlotAlreadyAddedException; /** *************** *** 56,60 **** * @return the slot or null if the slot is not found */ ! public RPSlot getSlot(String name); /** --- 95,99 ---- * @return the slot or null if the slot is not found */ ! public abstract RPSlot getSlot(String name); /** *************** *** 63,67 **** * @return an iterator over the slots */ ! public Iterator<RPSlot> slotsIterator(); /** --- 102,106 ---- * @return an iterator over the slots */ ! public abstract Iterator<RPSlot> slotsIterator(); /** *************** *** 70,81 **** * @return a list of the slots */ ! public List<RPSlot> slots(); ! /** ! * Returns the RPClass of the attributes ! * ! * @return the object RPClass ! */ ! public RPClass getRPClass(); } \ No newline at end of file --- 109,169 ---- * @return a list of the slots */ ! public abstract List<RPSlot> slots(); ! abstract void assignSlotID(RPObject object); ! ! abstract void usedSlotID(int int1); ! ! abstract void setContainer(SlotOwner owner, RPSlot slot); ! ! abstract SlotOwner getContainerOwner(); ! ! abstract SlotOwner getContainerBaseOwner(); ! ! protected void serializeRPSlots(marauroa.common.net.OutputSerializer out, ! DetailLevel level) throws IOException { ! /* ! * We compute the amount of slots to serialize first. We don't serialize ! * hidden or private slots unless detail level is full. ! */ ! int size = 0; ! for (RPSlot slot : slots) { ! if (shouldSerialize(DefinitionClass.RPSLOT, slot.getName(), level)) { ! size++; ! } ! } ! ! /* ! * Now write it. ! */ ! out.write(size); ! for (RPSlot slot : slots) { ! Definition def = getRPClass().getDefinition(DefinitionClass.RPSLOT, slot.getName()); ! ! if (shouldSerialize(def, level)) { ! slot.writeObject(out, level); ! } ! } ! } ! ! ! protected void deserializeRPSlots(marauroa.common.net.InputSerializer in) ! throws IOException { ! /* ! * First we load slots ! */ ! int size = in.readInt(); ! if (size > TimeoutConf.MAX_ARRAY_ELEMENTS) { ! throw new IOException("Illegal request of an list of " + String.valueOf(size) + " size"); ! } ! ! slots = new LinkedList<RPSlot>(); + for (int i = 0; i < size; ++i) { + RPSlot slot = new RPSlot(); + slot.setOwner(this); + slot = (RPSlot) in.readObject(slot); + slots.add(slot); + } + } } \ No newline at end of file Index: RPSlot.java =================================================================== RCS file: /cvsroot/arianne/marauroa/src/marauroa/common/game/RPSlot.java,v retrieving revision 1.66 retrieving revision 1.67 diff -C2 -d -r1.66 -r1.67 *** RPSlot.java 13 Sep 2009 09:36:17 -0000 1.66 --- RPSlot.java 17 Dec 2009 23:07:54 -0000 1.67 *************** *** 32,37 **** private String name; ! /** This slot is linked to an object: its owner. */ ! private RPObject owner; /** A List<RPObject> of objects */ --- 32,37 ---- private String name; ! /** This slot is linked to an owner. */ ! private SlotOwner owner; /** A List<RPObject> of objects */ *************** *** 75,83 **** * to RPClass. * ! * @param object ! * sets the object that owns this slot. */ ! void setOwner(RPObject object) { ! owner = object; /* --- 75,83 ---- * to RPClass. * ! * @param owner ! * sets owner of this slot. */ ! void setOwner(SlotOwner owner) { ! this.owner = owner; /* *************** *** 94,98 **** * @return the owner of the slot */ ! RPObject getOwner() { return owner; } --- 94,98 ---- * @return the owner of the slot */ ! SlotOwner getOwner() { return owner; } *************** *** 314,326 **** * otherwise. */ ! public boolean hasAsAncestor(RPObject object) { ! RPObject owner = getOwner(); // traverse the owner tree while (owner != null) { // NOTE: We compare pointers. ! if (owner==object) { return true; } ! owner = owner.getContainer(); } return false; --- 314,326 ---- * otherwise. */ ! public boolean hasAsAncestor(SlotOwner object) { ! SlotOwner owner = getOwner(); // traverse the owner tree while (owner != null) { // NOTE: We compare pointers. ! if (owner == object) { return true; } ! owner = owner.getContainerOwner(); } return false; |