mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 1 | «IMPORT emf»
|
| 2 | «IMPORT metaabm»
|
| 3 | «IMPORT metaabm::act»
|
| 4 | «IMPORT metaabm::function»
|
| 5 | «IMPORT metaabm::tmpl::Java»
|
| 6 |
|
| 7 | «EXTENSION metaabm::tmpl::types»
|
| 8 | «EXTENSION metaabm::tmpl::names»
|
| 9 | «EXTENSION metaabm::tmpl::infer»
|
| 10 | «EXTENSION metaabm::tmpl::util»
|
| 11 | «EXTENSION metaabm::tmpl::projections»
|
| 12 | «EXTENSION metaabm::ascape::tmpl::namesascape»
|
| 13 | «EXTENSION metaabm::ascape::tmpl::inferascape»
|
| 14 |
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 15 |
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 16 | «DEFINE AgentBody FOR SAgent-»
|
| 17 | «IF owner != null»
|
| 18 | public «owner.typeName()» «owner.getterName()»() {
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 19 | return («owner.typeName()») getScape().getScape();
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 20 | }
|
| 21 | «ENDIF»
|
| 22 | «IF parent != null && !((SContext) parent).projections.typeSelect(SNetwork).isEmpty-»
|
| 23 | public java.util.List getNetwork() {
|
| 24 | return ((«pkgs()»Graph) «((SContext) parent).getterName()»().«((SContext) parent).projections.typeSelect(SNetwork).get(0).getterName()»().getSpace()).getNeighborsFor(this);
|
| 25 | }
|
| 26 | «ENDIF-»
|
| 27 | «ENDDEFINE»
|
| 28 |
|
| 29 | «DEFINE ScapeBody FOR SContext-»
|
| 30 | «EXPAND metaabm::tmpl::Java::UtilBody-»
|
| 31 |
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 32 | «FOREACH agents AS agent-»
|
| 33 | «IF !agent.isHost()-»
|
| 34 | org.ascape.model.Scape «agent.scape()»;
|
| 35 | «ENDIF-»
|
| 36 | «ENDFOREACH-»
|
| 37 |
|
| 38 | static int next_vm_id;
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 39 |
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 40 | int vm_unique_id;
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 41 |
|
| 42 | /**
|
| 43 | * Creates the members of «label».
|
| 44 | */
|
| 45 | public void createScape() {
|
| 46 | super.createScape();
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 47 | «IF parent != null»
|
| 48 | vm_unique_id = next_vm_id;
|
| 49 | setName("«label» " + vm_unique_id);
|
| 50 | next_vm_id++;
|
| 51 | «ELSE»
|
| 52 | setName("«label»");
|
| 53 | «ENDIF»
|
| 54 | «IF parent != null»
|
| 55 | setAutoCreate(false);
|
| 56 | setPrototypeAgent(new org.ascape.model.Scape());
|
| 57 | «ENDIF»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 58 | «IF (rootActivity != null)-»
|
| 59 | «EXPAND CreateScape (0) FOREACH agents-»
|
| 60 | «EXPAND CreateScape (0) FOR rootActivity-»
|
| 61 | «ENDIF-»
|
| 62 | «IF (rootActivity != null)-»
|
| 63 | «EXPAND CreateScape (1) FOREACH agents-»
|
| 64 | «EXPAND CreateScape (1) FOR rootActivity-»
|
| 65 | «ENDIF-»
|
| 66 | «IF (rootActivity != null)-»
|
| 67 | «EXPAND CreateScape (2) FOREACH agents-»
|
| 68 | «EXPAND CreateScape (2) FOR rootActivity-»
|
| 69 | «ENDIF-»
|
| 70 | «EXPAND metaabm::tmpl::Java::Builder FOREACH projections-»
|
| 71 | «EXPAND metaabm::tmpl::Java::Builder FOREACH agents-»
|
| 72 | «IF rootActivity != null-»
|
| 73 | «EXPAND metaabm::tmpl::Java::Builder FOR rootActivity-»
|
| 74 | «ENDIF-»
|
| 75 | }
|
| 76 |
|
| 77 | /**
|
| 78 | * Creates UI views for «label».
|
| 79 | */
|
| 80 | public void createGraphicViews() {
|
| 81 | super.createGraphicViews();
|
| 82 | «IF (rootActivity != null)-»
|
| 83 | «EXPAND ViewBuilder FOR rootActivity-»
|
| 84 | «ENDIF-»
|
| 85 | }
|
| 86 |
|
| 87 | public void scapeSetup(«pkgm()»event.ScapeEvent scapeEvent) {
|
| 88 | //Set the size of the scape populations, e.g. for mutable scapes that need to have their size reset
|
| 89 | «EXPAND metaabm::tmpl::Java::ProtectedRegion("ScapeSetup")»
|
| 90 | «IF (rootActivity != null)-»
|
| 91 | «EXPAND Setup FOR rootActivity-»
|
| 92 | «ENDIF-»
|
| 93 | }
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 94 |
|
| 95 | «FOREACH agents AS agent-»
|
| 96 | «IF !agent.isHost()-»
|
| 97 | /**
|
| 98 | * Returns the Scape containing «agent.pluralLabel».
|
| 99 | */
|
| 100 | public org.ascape.model.Scape «agent.getterName()»Scape() {
|
| 101 | return «agent.scape()»;
|
| 102 | }
|
| 103 | «ENDIF-»
|
| 104 | «ENDFOREACH-»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 105 | «ENDDEFINE»
|
| 106 |
|
| 107 | «DEFINE NameAccessor FOR SAgent-»
|
| 108 | public String getName() {
|
| 109 | if (name == null) {
|
| 110 | return "«label» " + uniqueID;
|
| 111 | } else {
|
| 112 | return name;
|
| 113 | }
|
| 114 | }
|
| 115 | «ENDDEFINE»
|
| 116 |
|
| 117 | «DEFINE Conditional (List[metaabm::act::AAct] path, Boolean inner) FOR AAct-»
|
| 118 | «IF conditionForAscape()-»
|
| 119 | «pkgu()»Conditional «selector().id()»Condition = new «pkgu()»Conditional() {
|
| 120 | private static final long serialVersionUID = 6846144446402098985L;
|
| 121 |
|
| 122 | public boolean meetsCondition(Object «selector().id()»Cell) {
|
| 123 | «IF findFromHost()-»
|
| 124 | «selector().id()»Cell = «converted(selector().id() + "Cell")»;
|
| 125 | «ENDIF-»
|
| 126 | if («selector().id()»Cell instanceof «selector().typeName()») {
|
mparker | 90b54d7 | 2009-09-19 01:29:18 +0000 | [diff] [blame] | 127 | «IF conditionForState().size > 0-»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 128 | «selector().typeName()» «selector().id()» = («selector().typeName()») «selector().id()»Cell;
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 129 | «EXPAND metaabm::tmpl::Java::InnerEvaluation(path, false)-»
|
mparker | 90b54d7 | 2009-09-19 01:29:18 +0000 | [diff] [blame] | 130 | return «conditionForState().toList().expressionSink(path, false)»;
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 131 | «ELSE-»
|
| 132 | return true;
|
| 133 | «ENDIF-»
|
| 134 | } else {
|
| 135 | return false;
|
| 136 | }
|
| 137 | }
|
| 138 | };
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 139 | «ENDIF-»«ENDDEFINE»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 140 |
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 141 | «DEFINE BeginQuery (List[metaabm::act::AAct] path, Boolean inner) FOR AAct-»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 142 | «IF !convert()-»
|
| 143 | «selector().typeName()» «selector().id()» = («selector().typeName()») «findStatement(path)»;
|
| 144 | «ELSE-»
|
| 145 | «selector().typeName()» «selector().id()» = null;
|
| 146 | «pkgs()»Location «selector().id()»Location = «findStatement(path)»;
|
| 147 | if («selector().id()»Location != null) {
|
| 148 | «selector().id()» = («selector().typeName()») «converted(selector().id() + "Location")»;
|
| 149 | }
|
| 150 | «ENDIF-»
|
| 151 | if («selector().id()» «metaType != ANone ? "!=" : "=="» null) {
|
| 152 | «IF expression(path, inner) != "" && hasControl("here") && !selector().isRoot()-»
|
| 153 | if («expression(path, inner)») {
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 154 | «ENDIF-»«ENDDEFINE»
|
| 155 | «DEFINE EndQuery (List[metaabm::act::AAct] path, Boolean inner) FOR AAct-»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 156 | «IF expression(path, inner) != "" && hasControl("here") && !selector().isRoot()-»}
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 157 | «ENDIF-»}«ENDDEFINE»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 158 |
|
| 159 | «DEFINE BeginSerial(List[AAct] path, Boolean inner) FOR AControl-»
|
| 160 | «IF selector().isRoot() && selector().agent.isHost() && !controlFunctions({"available", "withinBoundaries"}).isEmpty-»
|
| 161 | if («EXPAND metaabm::tmpl::Java::FunctionInnerBlock(path, false) FOREACH controlFunctions({"available", "withinBoundaries"}) SEPARATOR "&&"-») {
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 162 | «ENDIF-»«ENDDEFINE»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 163 | «DEFINE EndSerial(List[AAct] path, Boolean inner) FOR AControl-»
|
| 164 | «IF selector().isRoot() && selector().agent.isHost() && !controlFunctions({"available", "withinBoundaries"}).isEmpty-»}
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 165 | «ENDIF-»«ENDDEFINE»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 166 |
|
| 167 | «DEFINE Setup FOR ACreateAgents-»
|
| 168 | «IF !agent.isHost()-»
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 169 | «agent.scape()».setSize(«agentCount.id()»);
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 170 | «ENDIF-»
|
| 171 | «ENDDEFINE»
|
| 172 | «DEFINE Setup FOR IAct-»«ENDDEFINE»
|
| 173 | «DEFINE Setup FOR AGroup-»
|
| 174 | «EXPAND Setup FOREACH members-»
|
| 175 | «ENDDEFINE»
|
| 176 |
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 177 | «DEFINE CreateScape(int stage) FOR ACreateAgents-»
|
| 178 | «IF stage == 0-»
|
| 179 | «IF !agent.isHost()-»
|
| 180 | «agent.scape()».setSize(«agentCount.id()»);
|
| 181 | «ENDIF-»
|
| 182 | «ENDIF-»
|
| 183 | «ENDDEFINE»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 184 | «DEFINE CreateScape(int stage) FOR ABuildSpace-»«ENDDEFINE»
|
| 185 | «DEFINE CreateScape(int stage) FOR ABuildNetwork-»
|
| 186 | «IF stage == 0-»
|
| 187 | «projection.fieldName()» = new «pkgm()»Scape(new «projection.spaceClass()»());
|
| 188 | «projection.fieldName()».setName("«label»");
|
| 189 | add(«projection.fieldName()»);
|
| 190 | «ENDIF-»
|
| 191 | «ENDDEFINE»
|
| 192 | «DEFINE CreateScape(int stage) FOR ABuildGrid-»
|
| 193 | «IF stage == 0-»
|
| 194 | «projection.fieldName()» = new «pkgm()»Scape(new «projection.spaceClass()»());
|
| 195 | «projection.fieldName()».setPrototypeAgent(new «fillAgent.typeName()»());
|
| 196 | «projection.fieldName()».setExtent(new «projection.coordinateType()»(«projection.getterName()»Dimensions()));
|
| 197 | «projection.fieldName()».setName("«label»");
|
| 198 | «IF projection.periodic() != ""-»
|
| 199 | ((«pkgs()»CollectionSpace) «projection.fieldName()».getSpace()).setPeriodic(«projection.periodic()»);
|
| 200 | «ENDIF-»
|
| 201 | add(«projection.fieldName()»);
|
| 202 | org.ascape.model.Scape «fillAgent.fieldName()» = «projection.id()»;
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 203 | «IF fillAgent.metaType == SContext»
|
| 204 | «projection.fieldName()».setAutoCreate(false);
|
| 205 | «projection.fieldName()».createScape();
|
| 206 | «ENDIF»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 207 | «ELSEIF stage == 1-»
|
| 208 | «FOREACH agents AS agent-»
|
| 209 | «agent.proto()».setHostScape(«projection.fieldName()»);
|
| 210 | «ENDFOREACH-»
|
| 211 | «IF ((AGroup) fillAgent.rootActivity).members.isEmpty-»
|
| 212 | «projection.fieldName()».getRules().clear();
|
| 213 | «ENDIF-»
|
| 214 | «ENDIF-»
|
| 215 | «ENDDEFINE»
|
| 216 | «DEFINE CreateScape(int stage) FOR SAgent-»
|
| 217 | «IF !isHost()»
|
| 218 | «IF stage == 0-»
|
| 219 | «typeName()» «proto()» = new «typeName()»();
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 220 | «scape()» = new «pkgm()»Scape();
|
| 221 | «scape()».setName("«label»");
|
| 222 | «scape()».setPrototypeAgent(«proto()»);
|
| 223 | «scape()».setExecutionOrder(«pkgm()»Scape.RULE_ORDER);
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 224 | «ELSEIF stage == 1»
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 225 | add(«scape()»);
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 226 | «ELSEIF stage == 2»
|
| 227 | «EXPAND StatBuilder-»
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 228 | «IF metaType == SContext»
|
| 229 | «scape()».setAutoCreate(false);
|
| 230 | «scape()».createScape();
|
| 231 | «ENDIF»
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 232 | «ENDIF-»
|
| 233 | «ENDIF»
|
| 234 | «ENDDEFINE»
|
| 235 | «DEFINE CreateScape(int stage) FOR AGroup-»
|
| 236 | «EXPAND CreateScape(stage) FOREACH members.orderBuild()-»
|
| 237 | «ENDDEFINE»
|
| 238 | «DEFINE CreateScape(int stage) FOR IAct-»«ENDDEFINE»
|
| 239 |
|
| 240 | «DEFINE StatBuilderBody(SAttribute outer, String mod) FOR SAttribute-»
|
| 241 | public final «statSig()»(Object «parent().id()») {
|
| 242 | return «mod» «expression((List[AAct]) {}, true)»;
|
| 243 | }
|
| 244 | «ENDDEFINE»
|
| 245 |
|
| 246 | «DEFINE StatBuilderInner(SAttribute outer) FOR SAttribute-»
|
| 247 | «IF outer.sType == SAttributeType::Boolean»
|
| 248 | «EXPAND StatBuilderAdd (outer, "", "")-»
|
| 249 | «EXPAND StatBuilderAdd (outer, "!", "Not")-»
|
| 250 | «ENDIF»
|
| 251 | «ENDDEFINE»
|
| 252 |
|
| 253 | «DEFINE StatBuilderInner(SState outer) FOR SAttribute-»
|
| 254 | «FOREACH outer.options AS option-»
|
| 255 | «EXPAND StatBuilderAdd (outer, option.typeName() + " == ", option.label)-»
|
| 256 | «ENDFOREACH»
|
| 257 | «ENDDEFINE»
|
| 258 |
|
| 259 | «DEFINE StatBuilderAdd(SAttribute outer, String mod, String desc) FOR SAttribute-»
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 260 | «((SAgent) parent()).fieldName()».addStatCollector(new org.ascape.util.data.StatCollector«outer(outer).statCondTerm()»CSAMM(«statLabel(outer, desc)») {
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 261 | private static final long serialVersionUID = 6846144446402098985L;
|
| 262 | «IF outer != this-»
|
| 263 | «EXPAND StatBuilderBody (outer, mod) FOR outer-»
|
| 264 | «ENDIF-»
|
| 265 | «EXPAND StatBuilderBody (outer, !sType.numeric() ? mod : "")-»
|
| 266 | });
|
| 267 | «IF genStats() == "cross"-»
|
| 268 | «EXPAND StatBuilderInner(this) FOREACH parent().attributes.select(a | a.numeric() && a.gatherData)-»
|
| 269 | «ENDIF-»
|
| 270 | «ENDDEFINE»
|
| 271 |
|
| 272 | «DEFINE StatBuilder FOR SAttribute-»
|
| 273 | «IF gatherData-»
|
| 274 | «IF numeric()»
|
| 275 | «EXPAND StatBuilderAdd (this, "", "")-»
|
| 276 | «ELSEIF boolean()»
|
| 277 | «EXPAND StatBuilderAdd (this, "", "is")-»
|
| 278 | «EXPAND StatBuilderAdd (this, "!", "is not")-»
|
| 279 | «ENDIF»
|
| 280 | «ENDIF-»
|
| 281 | «ENDDEFINE»
|
| 282 | «DEFINE StatBuilder FOR SState-»
|
| 283 | «IF gatherData-»
|
| 284 | «FOREACH options AS option-»
|
| 285 | «EXPAND StatBuilderAdd (this, option.typeName() + " == ", option.label)-»
|
| 286 | «ENDFOREACH-»
|
| 287 | «ENDIF-»
|
| 288 | «ENDDEFINE»
|
| 289 | «DEFINE StatBuilder FOR SAgent-»
|
| 290 | «IF genStats() != "none"»
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 291 | «scape()».addStatCollector(new org.ascape.util.data.StatCollectorCSA(getName() + " Population") {
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 292 | private static final long serialVersionUID = 684614444640209893L;
|
| 293 |
|
| 294 | @SuppressWarnings("unused")
|
| 295 | public final boolean meetsCondition(Object object) {return true;}
|
| 296 | });
|
| 297 | «EXPAND StatBuilder FOREACH attributes-»
|
| 298 | «ENDIF»
|
| 299 | «ENDDEFINE»
|
| 300 |
|
| 301 | «DEFINE ChildBuilder FOR ARule-»
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 302 | «reference.scape()».addRule(new «pkgm()»rule.Rule("«label»") {
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 303 | private static final long serialVersionUID = 6846144446402098981L;
|
| 304 | public void execute(«pkgm()»Agent a) {
|
| 305 | ((«reference.implementation.qualifiedName») a).«id()»();
|
| 306 | }
|
| 307 | });
|
| 308 | «ENDDEFINE»
|
| 309 | «DEFINE ChildBuilder FOR AInitialize-»
|
| 310 | «REM»Initialize is automatically invoked by default from framework«ENDREM»
|
mparker | 7fff34b | 2009-12-03 04:36:08 +0000 | [diff] [blame^] | 311 | «reference.scape()».addInitialRule(new «pkgm()»rule.Rule("«label»") {
|
mparker | 5600833 | 2009-07-16 20:57:57 +0000 | [diff] [blame] | 312 | private static final long serialVersionUID = 6846144446402098982L;
|
| 313 | public void execute(«pkgm()»Agent a) {
|
| 314 | ((«reference.implementation.qualifiedName») a).«id()»();
|
| 315 | }
|
| 316 | });
|
| 317 | «ENDDEFINE»
|
| 318 | «DEFINE ChildBuilder FOR AGroup-»
|
| 319 | «EXPAND ChildBuilder FOREACH roots-»
|
| 320 | «ENDDEFINE»
|
| 321 | «DEFINE ChildBuilder FOR IAct-»«ENDDEFINE»
|
| 322 |
|
| 323 | «DEFINE ViewBuilder FOR IAct-»«ENDDEFINE»
|
| 324 | «DEFINE ViewBuilder FOR AGroup-»
|
| 325 | «EXPAND ViewBuilder FOREACH members-»
|
| 326 | «ENDDEFINE»
|
| 327 | «DEFINE ViewBuilder FOR ABuildGrid-»
|
| 328 | «ENDDEFINE»
|
| 329 |
|
| 330 |
|
| 331 | «REM»«AROUND metaabm::tmpl::Java::Evaluation(*) FOR Object»«LET timesec() AS start»«targetDef.proceed()»//«timelapse(start)»«ENDLET»«ENDAROUND»«ENDREM»
|