blob: fd0325dbc7921ea2601e8db8d273a1870f2db470 [file] [log] [blame]
«IMPORT emf»
«IMPORT metaabm»
«IMPORT metaabm::act»
«IMPORT metaabm::function»
«IMPORT metaabm::tmpl::Java»
«EXTENSION metaabm::tmpl::types»
«EXTENSION metaabm::tmpl::names»
«EXTENSION metaabm::tmpl::infer»
«EXTENSION metaabm::tmpl::util»
«EXTENSION metaabm::tmpl::projections»
«EXTENSION metaabm::ascape::tmpl::namesascape»
«EXTENSION metaabm::ascape::tmpl::inferascape»
«DEFINE AgentBody FOR SAgent
«IF owner != null»
public «owner.typeName()» «owner.getterName()»() {
return owner.typeName()») getScape().getRoot();
}
«ENDIF»
«IF parent != null && !((SContext) parent).projections.typeSelect(SNetwork).isEmpty
public java.util.List getNetwork() {
return ((«pkgs()»Graph) «((SContext) parent).getterName()»().«((SContext) parent).projections.typeSelect(SNetwork).get(0).getterName()»().getSpace()).getNeighborsFor(this);
}
«ENDIF
«ENDDEFINE»
«DEFINE ScapeBody FOR SContext
«EXPAND metaabm::tmpl::Java::UtilBody
«EXPAND metaabm::tmpl::Java::Field FOREACH agents
«EXPAND metaabm::tmpl::Java::Accessor FOREACH agents
/**
* Creates the members of «label».
*/
public void createScape() {
super.createScape();
setName(toString());
«IF (rootActivity != null)-»
«EXPAND CreateScape (0) FOREACH agents
«EXPAND CreateScape (0) FOR rootActivity
«ENDIF
«IF (rootActivity != null)-»
«EXPAND CreateScape (1) FOREACH agents
«EXPAND CreateScape (1) FOR rootActivity
«ENDIF
«IF (rootActivity != null)-»
«EXPAND CreateScape (2) FOREACH agents
«EXPAND CreateScape (2) FOR rootActivity
«ENDIF
«EXPAND metaabm::tmpl::Java::Builder FOREACH projections
«EXPAND metaabm::tmpl::Java::Builder FOREACH agents
«IF rootActivity != null
«EXPAND metaabm::tmpl::Java::Builder FOR rootActivity
«ENDIF
}
/**
* Creates UI views for «label».
*/
public void createGraphicViews() {
super.createGraphicViews();
«IF (rootActivity != null)-»
«EXPAND ViewBuilder FOR rootActivity
«ENDIF
}
public void scapeSetuppkgm()»event.ScapeEvent scapeEvent) {
//Set the size of the scape populations, e.g. for mutable scapes that need to have their size reset
«EXPAND metaabm::tmpl::Java::ProtectedRegion("ScapeSetup"
«IF (rootActivity != null)-»
«EXPAND Setup FOR rootActivity
«ENDIF
}
«ENDDEFINE»
«DEFINE NameAccessor FOR SAgent
public String getName() {
if (name == null) {
return "«label» " + uniqueID;
} else {
return name;
}
}
«ENDDEFINE»
«DEFINE Conditional (List[metaabm::act::AAct] path, Boolean inner) FOR AAct
«IF conditionForAscape()-»
«pkgu()»Conditional «selector().id()»Condition = new «pkgu()»Conditional() {
private static final long serialVersionUID = 6846144446402098985L;
public boolean meetsCondition(Object «selector().id()»Cell) {
«IF findFromHost()-»
«selector().id()»Cell = «converted(selector().id() + "Cell")»;
«ENDIF
if selector().id()»Cell instanceof «selector().typeName()») {
«IF conditionForState().size > 0
«selector().typeName()» «selector().id()» = selector().typeName()») «selector().id()»Cell;
«EXPAND metaabm::tmpl::Java::InnerEvaluation(path, false)-»
return «conditionForState().toList().expressionSink(path, false)»;
«ELSE
return true;
«ENDIF
} else {
return false;
}
}
};
«ENDIF
«ENDDEFINE»
«DEFINE BeginQuery (List[metaabm::act::AAct] path, Boolean inner) FOR AAct»
«IF !convert()-»
«selector().typeName()» «selector().id()» = selector().typeName()») «findStatement(path)»;
«ELSE
«selector().typeName()» «selector().id()» = null;
«pkgs()»Location «selector().id()»Location = «findStatement(path)»;
if selector().id()»Location != null) {
«selector().id()» = selector().typeName()») «converted(selector().id() + "Location")»;
}
«ENDIF
if selector().id()» «metaType != ANone ? "!=" : "=="» null) {
«IF expression(path, inner) != "" && hasControl("here") && !selector().isRoot()-»
if expression(path, inner)») {
«ENDIF
«ENDDEFINE»
«DEFINE EndQuery (List[metaabm::act::AAct] path, Boolean inner) FOR AAct»
«IF expression(path, inner) != "" && hasControl("here") && !selector().isRoot()-»}
«ENDIF-»}
«ENDDEFINE»
«DEFINE BeginSerial(List[AAct] path, Boolean inner) FOR AControl
«IF selector().isRoot() && selector().agent.isHost() && !controlFunctions({"available", "withinBoundaries"}).isEmpty
if EXPAND metaabm::tmpl::Java::FunctionInnerBlock(path, false) FOREACH controlFunctions({"available", "withinBoundaries"}) SEPARATOR "&&"-») {
«ENDIF
«ENDDEFINE»
«DEFINE EndSerial(List[AAct] path, Boolean inner) FOR AControl
«IF selector().isRoot() && selector().agent.isHost() && !controlFunctions({"available", "withinBoundaries"}).isEmpty-»}
«ENDIF
«ENDDEFINE»
«DEFINE Setup FOR ACreateAgents
«IF !agent.isHost()-»
«agent.fieldName()».setSizeagentCount.id()»);
«ENDIF
«ENDDEFINE»
«DEFINE Setup FOR IAct-»«ENDDEFINE»
«DEFINE Setup FOR AGroup
«EXPAND Setup FOREACH members
«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR ABuildSpace-»«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR ABuildNetwork
«IF stage == 0
«projection.fieldName()» = new «pkgm()»Scape(new «projection.spaceClass()»());
«projection.fieldName()».setName("«label»");
addprojection.fieldName()»);
«ENDIF
«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR ABuildGrid
«IF stage == 0
«projection.fieldName()» = new «pkgm()»Scape(new «projection.spaceClass()»());
«projection.fieldName()».setPrototypeAgent(new «fillAgent.typeName()»());
«projection.fieldName()».setExtent(new «projection.coordinateType()»(«projection.getterName()»Dimensions()));
«projection.fieldName()».setName("«label»");
«IF projection.periodic() != ""
((«pkgs()»CollectionSpace) «projection.fieldName()».getSpace()).setPeriodicprojection.periodic()»);
«ENDIF
addprojection.fieldName()»);
org.ascape.model.Scape «fillAgent.fieldName()» = «projection.id()»;
«ELSEIF stage == 1
«FOREACH agents AS agent
«agent.proto()».setHostScapeprojection.fieldName()»);
«ENDFOREACH
«IF ((AGroup) fillAgent.rootActivity).members.isEmpty
«projection.fieldName()».getRules().clear();
«ENDIF
«ENDIF
«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR SAgent
«IF !isHost()»
«IF stage == 0
«typeName()» «proto()» = new «typeName()»();
«fieldName()» = new «pkgm()»Scape();
«fieldName()».setName("«label»");
«fieldName()».setPrototypeAgentproto()»);
«fieldName()».setExecutionOrderpkgm()»Scape.RULE_ORDER);
«ELSEIF stage == 1»
addfieldName()»);
«ELSEIF stage == 2»
«EXPAND StatBuilder
«ENDIF
«ENDIF»
«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR AGroup
«EXPAND CreateScape(stage) FOREACH members.orderBuild()-»
«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR IAct-»«ENDDEFINE»
«DEFINE StatBuilderBody(SAttribute outer, String mod) FOR SAttribute
public final «statSig()»(Object «parent().id()») {
return «mod» «expression((List[AAct]) {}, true)»;
}
«ENDDEFINE»
«DEFINE StatBuilderInner(SAttribute outer) FOR SAttribute
«IF outer.sType == SAttributeType::Boolean»
«EXPAND StatBuilderAdd (outer, "", "")-»
«EXPAND StatBuilderAdd (outer, "!", "Not")-»
«ENDIF»
«ENDDEFINE»
«DEFINE StatBuilderInner(SState outer) FOR SAttribute
«FOREACH outer.options AS option
«EXPAND StatBuilderAdd (outer, option.typeName() + " == ", option.label)-»
«ENDFOREACH»
«ENDDEFINE»
«DEFINE StatBuilderAdd(SAttribute outer, String mod, String desc) FOR SAttribute
«((SAgent) parent()).fieldName()».addStatCollector(new org.ascape.util.data.StatCollector«outer(outer).statCondTerm()»CSAMM("«statLabel(outer, desc)»") {
private static final long serialVersionUID = 6846144446402098985L;
«IF outer != this
«EXPAND StatBuilderBody (outer, mod) FOR outer
«ENDIF
«EXPAND StatBuilderBody (outer, !sType.numeric() ? mod : "")-»
});
«IF genStats() == "cross"
«EXPAND StatBuilderInner(this) FOREACH parent().attributes.select(a | a.numeric() && a.gatherData)-»
«ENDIF
«ENDDEFINE»
«DEFINE StatBuilder FOR SAttribute
«IF gatherData
«IF numeric()»
«EXPAND StatBuilderAdd (this, "", "")-»
«ELSEIF boolean()»
«EXPAND StatBuilderAdd (this, "", "is")-»
«EXPAND StatBuilderAdd (this, "!", "is not")-»
«ENDIF»
«ENDIF
«ENDDEFINE»
«DEFINE StatBuilder FOR SState
«IF gatherData
«FOREACH options AS option
«EXPAND StatBuilderAdd (this, option.typeName() + " == ", option.label)-»
«ENDFOREACH
«ENDIF
«ENDDEFINE»
«DEFINE StatBuilder FOR SAgent
«IF genStats() != "none"»
«fieldName()».addStatCollector(new org.ascape.util.data.StatCollectorCSA("«label» Population") {
private static final long serialVersionUID = 684614444640209893L;
@SuppressWarnings("unused")
public final boolean meetsCondition(Object object) {return true;}
});
«EXPAND StatBuilder FOREACH attributes
«ENDIF»
«ENDDEFINE»
«DEFINE ChildBuilder FOR ARule
«reference.fieldName()».addRule(new «pkgm()»rule.Rule("«label»") {
private static final long serialVersionUID = 6846144446402098981L;
public void executepkgm()»Agent a) {
((«reference.implementation.qualifiedName») a).«id()»();
}
});
«ENDDEFINE»
«DEFINE ChildBuilder FOR AInitialize
«REM»Initialize is automatically invoked by default from framework«ENDREM»
«reference.fieldName()».addInitialRule(new «pkgm()»rule.Rule("«label»") {
private static final long serialVersionUID = 6846144446402098982L;
public void executepkgm()»Agent a) {
((«reference.implementation.qualifiedName») a).«id()»();
}
});
«ENDDEFINE»
«DEFINE ChildBuilder FOR AGroup
«EXPAND ChildBuilder FOREACH roots
«ENDDEFINE»
«DEFINE ChildBuilder FOR IAct-»«ENDDEFINE»
«DEFINE ViewBuilder FOR IAct-»«ENDDEFINE»
«DEFINE ViewBuilder FOR AGroup
«EXPAND ViewBuilder FOREACH members
«ENDDEFINE»
«DEFINE ViewBuilder FOR ABuildGrid
«ENDDEFINE»
«REM»«AROUND metaabm::tmpl::Java::Evaluation(*) FOR Object»«LET timesec() AS start»«targetDef.proceed()»//«timelapse(start)»«ENDLET»«ENDAROUND»«ENDREM»