00001 00066 package com.arcle.rmt.superwaba.model.imp.rqml; 00067 00068 import superwaba.ext.xplat.io.Storable; 00069 import superwaba.ext.xplat.io.DataStream; 00070 import com.arcle.rmt.xplat.util.List; 00071 import com.arcle.rmt.xplat.util.Iterator; 00072 00073 import com.arcle.rmt.rqml.*; 00074 import com.arcle.rmt.superwaba.model.imp.*; 00075 00082 public abstract class CourseImpl extends RQMLSecondClassImpl implements Course { 00083 public CourseImpl() { 00084 descriptions = createList(); 00085 actorActions = createList(); 00086 systemResponses = createList(); 00087 } 00088 00089 //----------------------------------------------------------------------- 00090 // Course Implementations 00091 00092 00093 public Description createDescription() { 00094 Description desc = createDescriptionImpl(); 00095 descriptions.add(desc); 00096 return desc; 00097 } 00098 00099 public ActorAction createActorAction() { 00100 ActorAction aa = createActorActionImpl(); 00101 actorActions.add(aa); 00102 return aa; 00103 } 00104 00105 public SystemResponse createSystemResponse() { 00106 SystemResponse sr = createSystemResponseImpl(); 00107 systemResponses.add(sr); 00108 return sr; 00109 } 00110 00111 public Iterator getDescriptions() { 00112 return descriptions.iterator(); 00113 } 00114 00115 00116 public Description getDescription() { 00117 if (descriptions.size() == 0) { 00118 return createDescription(); 00119 } else { 00120 return (Description) descriptions.get(0); 00121 } 00122 } 00123 00124 public ActorAction getActorAction() { 00125 if (actorActions.size() == 0) { 00126 return createActorAction(); 00127 } else { 00128 return (ActorAction) actorActions.get(0); 00129 } 00130 } 00131 00132 public SystemResponse getSystemResponse() { 00133 if (systemResponses.size() == 0) { 00134 return createSystemResponse(); 00135 } else { 00136 return (SystemResponse) systemResponses.get(0); 00137 } 00138 } 00139 00140 00141 00142 //----------------------------------------------------------------------- 00143 // Factory Methods 00144 00145 public abstract GenericMemento createMemento(); 00146 00147 protected ActorActionImpl createActorActionImpl() { 00148 return new ActorActionImpl(); 00149 } 00150 00151 protected SystemResponseImpl createSystemResponseImpl() { 00152 return new SystemResponseImpl(); 00153 } 00154 00155 //----------------------------------------------------------------------- 00156 // Member variables 00157 00158 private List actorActions; 00159 00160 private List systemResponses; 00161 00162 private List descriptions; 00163 00164 //----------------------------------------------------------------------- 00165 // Inner Classes 00166 00167 protected static abstract class Memento extends RQMLSecondClassImpl.Memento { 00168 public Memento(CourseImpl originator) { 00169 super(originator); 00170 } 00171 00172 public Storable getInstance() { 00173 // This memento is not directly stored in the Catalog, 00174 // so this factory method is not required. 00175 return null; 00176 } 00177 00178 00179 public void saveState(DataStream data) { 00180 final CourseImpl org = (CourseImpl) getOriginator(); 00181 super.saveState(data); 00182 saveList(org.descriptions, data); 00183 saveList(org.actorActions, data); 00184 saveList(org.systemResponses, data); 00185 } 00186 00187 public void loadState(DataStream data) { 00188 final CourseImpl org = (CourseImpl) getOriginator(); 00189 super.loadState(data); 00190 00191 org.descriptions = loadList(data, new MementoableFactory() { 00192 public Mementoable createOriginator() { 00193 return org.createDescriptionImpl(); 00194 } 00195 }); 00196 00197 org.actorActions = loadList(data, new MementoableFactory() { 00198 public Mementoable createOriginator() { 00199 return org.createActorActionImpl(); 00200 } 00201 }); 00202 org.systemResponses = loadList(data, new MementoableFactory() { 00203 public Mementoable createOriginator() { 00204 return org.createSystemResponseImpl(); 00205 } 00206 }); 00207 } 00208 } 00209 }