blob: 11d0284cfb24e9f7adfe318f2ec5883bcfcab1a9 [file] [log] [blame]
mparker56008332009-07-16 20:57:57 +00001«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
mparker7fff34b2009-12-03 04:36:08 +000015
mparker56008332009-07-16 20:57:57 +000016«DEFINE AgentBody FOR SAgent
17 «IF owner != null»
18 public «owner.typeName()» «owner.getterName()»() {
mparker7fff34b2009-12-03 04:36:08 +000019 return owner.typeName()») getScape().getScape();
mparker56008332009-07-16 20:57:57 +000020 }
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
mparker7fff34b2009-12-03 04:36:08 +000032 «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;
mparker56008332009-07-16 20:57:57 +000039
mparker7fff34b2009-12-03 04:36:08 +000040 int vm_unique_id;
mparker56008332009-07-16 20:57:57 +000041
42 /**
43 * Creates the members of «label».
44 */
45 public void createScape() {
46 super.createScape();
mparker7fff34b2009-12-03 04:36:08 +000047 «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»
mparker56008332009-07-16 20:57:57 +000058 «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 scapeSetuppkgm()»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 }
mparker7fff34b2009-12-03 04:36:08 +000094
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
mparker56008332009-07-16 20:57:57 +0000105«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()») {
mparker90b54d72009-09-19 01:29:18 +0000127 «IF conditionForState().size > 0
mparker56008332009-07-16 20:57:57 +0000128 «selector().typeName()» «selector().id()» = selector().typeName()») «selector().id()»Cell;
mparker56008332009-07-16 20:57:57 +0000129 «EXPAND metaabm::tmpl::Java::InnerEvaluation(path, false)-»
mparker90b54d72009-09-19 01:29:18 +0000130 return «conditionForState().toList().expressionSink(path, false)»;
mparker56008332009-07-16 20:57:57 +0000131 «ELSE
132 return true;
133 «ENDIF
134 } else {
135 return false;
136 }
137 }
138 };
mparker7fff34b2009-12-03 04:36:08 +0000139 «ENDIF-»«ENDDEFINE»
mparker56008332009-07-16 20:57:57 +0000140
mparker7fff34b2009-12-03 04:36:08 +0000141«DEFINE BeginQuery (List[metaabm::act::AAct] path, Boolean inner) FOR AAct
mparker56008332009-07-16 20:57:57 +0000142 «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)») {
mparker7fff34b2009-12-03 04:36:08 +0000154 «ENDIF-»«ENDDEFINE»
155«DEFINE EndQuery (List[metaabm::act::AAct] path, Boolean inner) FOR AAct
mparker56008332009-07-16 20:57:57 +0000156 «IF expression(path, inner) != "" && hasControl("here") && !selector().isRoot()-»}
mparker7fff34b2009-12-03 04:36:08 +0000157 «ENDIF-»}«ENDDEFINE»
mparker56008332009-07-16 20:57:57 +0000158
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 "&&"-») {
mparker7fff34b2009-12-03 04:36:08 +0000162 «ENDIF-»«ENDDEFINE»
mparker56008332009-07-16 20:57:57 +0000163«DEFINE EndSerial(List[AAct] path, Boolean inner) FOR AControl
164 «IF selector().isRoot() && selector().agent.isHost() && !controlFunctions({"available", "withinBoundaries"}).isEmpty-»}
mparker7fff34b2009-12-03 04:36:08 +0000165 «ENDIF-»«ENDDEFINE»
mparker56008332009-07-16 20:57:57 +0000166
167«DEFINE Setup FOR ACreateAgents
168 «IF !agent.isHost()-»
mparker7fff34b2009-12-03 04:36:08 +0000169 «agent.scape()».setSizeagentCount.id()»);
mparker56008332009-07-16 20:57:57 +0000170 «ENDIF
171«ENDDEFINE»
172«DEFINE Setup FOR IAct-»«ENDDEFINE»
173«DEFINE Setup FOR AGroup
174 «EXPAND Setup FOREACH members
175«ENDDEFINE»
176
mparker7fff34b2009-12-03 04:36:08 +0000177«DEFINE CreateScape(int stage) FOR ACreateAgents
178 «IF stage == 0
179 «IF !agent.isHost()-»
180 «agent.scape()».setSizeagentCount.id()»);
181 «ENDIF
182 «ENDIF
183«ENDDEFINE»
mparker56008332009-07-16 20:57:57 +0000184«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 addprojection.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()).setPeriodicprojection.periodic()»);
200 «ENDIF
201 addprojection.fieldName()»);
202 org.ascape.model.Scape «fillAgent.fieldName()» = «projection.id()»;
mparker7fff34b2009-12-03 04:36:08 +0000203 «IF fillAgent.metaType == SContext»
204 «projection.fieldName()».setAutoCreate(false);
205 «projection.fieldName()».createScape();
206 «ENDIF»
mparker56008332009-07-16 20:57:57 +0000207 «ELSEIF stage == 1
208 «FOREACH agents AS agent
209 «agent.proto()».setHostScapeprojection.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()»();
mparker7fff34b2009-12-03 04:36:08 +0000220 «scape()» = new «pkgm()»Scape();
221 «scape()».setName("«label»");
222 «scape()».setPrototypeAgentproto()»);
223 «scape()».setExecutionOrderpkgm()»Scape.RULE_ORDER);
mparker56008332009-07-16 20:57:57 +0000224 «ELSEIF stage == 1»
mparker7fff34b2009-12-03 04:36:08 +0000225 addscape()»);
mparker56008332009-07-16 20:57:57 +0000226 «ELSEIF stage == 2»
227 «EXPAND StatBuilder
mparker7fff34b2009-12-03 04:36:08 +0000228 «IF metaType == SContext»
229 «scape()».setAutoCreate(false);
230 «scape()».createScape();
231 «ENDIF»
mparker56008332009-07-16 20:57:57 +0000232 «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
mparker7fff34b2009-12-03 04:36:08 +0000260 «((SAgent) parent()).fieldName()».addStatCollector(new org.ascape.util.data.StatCollector«outer(outer).statCondTerm()»CSAMMstatLabel(outer, desc)») {
mparker56008332009-07-16 20:57:57 +0000261 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"»
mparker7fff34b2009-12-03 04:36:08 +0000291 «scape()».addStatCollector(new org.ascape.util.data.StatCollectorCSA(getName() + " Population") {
mparker56008332009-07-16 20:57:57 +0000292 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
mparker7fff34b2009-12-03 04:36:08 +0000302 «reference.scape()».addRule(new «pkgm()»rule.Rule("«label»") {
mparker56008332009-07-16 20:57:57 +0000303 private static final long serialVersionUID = 6846144446402098981L;
304 public void executepkgm()»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»
mparker7fff34b2009-12-03 04:36:08 +0000311 «reference.scape()».addInitialRule(new «pkgm()»rule.Rule("«label»") {
mparker56008332009-07-16 20:57:57 +0000312 private static final long serialVersionUID = 6846144446402098982L;
313 public void executepkgm()»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»