00001 00066 package com.arcle.rmt.superwaba.model.imp; 00067 00068 import waba.util.Vector; 00069 00070 import superwaba.ext.xplat.io.Storable; 00071 import superwaba.ext.xplat.io.DataStream; 00072 00073 import com.arcle.rmt.xplat.util.List; 00074 import com.arcle.rmt.superwaba.util.VectorListAdapter; 00075 00124 public abstract class GenericMemento implements Storable { 00125 00126 public GenericMemento(Mementoable originator) { 00127 theOriginator = originator; 00128 } 00129 00130 //----------------------------------------------------------------------- 00131 // Storable methods 00132 00139 public abstract Storable getInstance(); 00140 00150 public abstract byte getID(); 00151 00157 public abstract void saveState(DataStream data); 00158 00165 public abstract void loadState(DataStream data); 00166 00167 00168 //----------------------------------------------------------------------- 00169 // Public Methods 00170 00174 public Mementoable getOriginator() { 00175 return theOriginator; 00176 } 00177 00178 //------------------------------------------------------------------------ 00179 // Factory Methods 00180 00181 public List createList(int initCapacity) { 00182 return new VectorListAdapter(new Vector(initCapacity)); 00183 } 00184 00185 00186 //------------------------------------------------------------------------ 00187 // Own protected methods 00188 00195 protected void saveList(List v, DataStream stream) { 00196 int numElems = v.size(); 00197 stream.writeInt(numElems); 00198 for (int i=0; i<numElems; i++) { 00199 saveMementoable((Mementoable)v.get(i), stream); 00200 } 00201 } 00202 00211 protected List loadList(DataStream stream, MementoableFactory factory) { 00212 int numElems = stream.readInt(); 00213 List v = createList(numElems); 00214 for (int i=0; i<numElems; i++) { 00215 v.add(loadMementoable(stream, factory)); 00216 } 00217 return v; 00218 } 00219 00225 protected static void saveMementoable(Mementoable m, DataStream stream) { 00226 Storable memento = (Storable) m.createMemento(); 00227 memento.saveState(stream); 00228 } 00229 00236 protected static Mementoable loadMementoable(DataStream stream, MementoableFactory factory) { 00237 Mementoable object = factory.createOriginator(); 00238 GenericMemento memento = object.createMemento(); 00239 memento.loadState(stream); 00240 object.setMemento(memento); 00241 return object; 00242 } 00243 00247 private Mementoable theOriginator = null; 00248 }