NEW - bug 296651: Support multi-scales for Escape target
https://bugs.eclipse.org/bugs/show_bug.cgi?id=296651
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/ScapeAspect.xpt b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/ScapeAspect.xpt
index fd0325d..11d0284 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/ScapeAspect.xpt
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/ScapeAspect.xpt
@@ -12,10 +12,11 @@
«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();
+ return («owner.typeName()») getScape().getScape();
}
«ENDIF»
«IF parent != null && !((SContext) parent).projections.typeSelect(SNetwork).isEmpty-»
@@ -28,16 +29,32 @@
«DEFINE ScapeBody FOR SContext-»
«EXPAND metaabm::tmpl::Java::UtilBody-»
- «EXPAND metaabm::tmpl::Java::Field FOREACH agents-»
+ «FOREACH agents AS agent-»
+ «IF !agent.isHost()-»
+ org.ascape.model.Scape «agent.scape()»;
+ «ENDIF-»
+ «ENDFOREACH-»
+
+ static int next_vm_id;
- «EXPAND metaabm::tmpl::Java::Accessor FOREACH agents-»
+ int vm_unique_id;
/**
* Creates the members of «label».
*/
public void createScape() {
super.createScape();
- setName(toString());
+ «IF parent != null»
+ vm_unique_id = next_vm_id;
+ setName("«label» " + vm_unique_id);
+ next_vm_id++;
+ «ELSE»
+ setName("«label»");
+ «ENDIF»
+ «IF parent != null»
+ setAutoCreate(false);
+ setPrototypeAgent(new org.ascape.model.Scape());
+ «ENDIF»
«IF (rootActivity != null)-»
«EXPAND CreateScape (0) FOREACH agents-»
«EXPAND CreateScape (0) FOR rootActivity-»
@@ -74,6 +91,17 @@
«EXPAND Setup FOR rootActivity-»
«ENDIF-»
}
+
+ «FOREACH agents AS agent-»
+ «IF !agent.isHost()-»
+ /**
+ * Returns the Scape containing «agent.pluralLabel».
+ */
+ public org.ascape.model.Scape «agent.getterName()»Scape() {
+ return «agent.scape()»;
+ }
+ «ENDIF-»
+ «ENDFOREACH-»
«ENDDEFINE»
«DEFINE NameAccessor FOR SAgent-»
@@ -108,10 +136,9 @@
}
}
};
- «ENDIF-»
-«ENDDEFINE»
+ «ENDIF-»«ENDDEFINE»
-«DEFINE BeginQuery (List[metaabm::act::AAct] path, Boolean inner) FOR AAct»
+«DEFINE BeginQuery (List[metaabm::act::AAct] path, Boolean inner) FOR AAct-»
«IF !convert()-»
«selector().typeName()» «selector().id()» = («selector().typeName()») «findStatement(path)»;
«ELSE-»
@@ -124,26 +151,22 @@
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»
+ «ENDIF-»«ENDDEFINE»
+«DEFINE EndQuery (List[metaabm::act::AAct] path, Boolean inner) FOR AAct-»
«IF expression(path, inner) != "" && hasControl("here") && !selector().isRoot()-»}
- «ENDIF-»}
-«ENDDEFINE»
+ «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»
+ «ENDIF-»«ENDDEFINE»
«DEFINE EndSerial(List[AAct] path, Boolean inner) FOR AControl-»
«IF selector().isRoot() && selector().agent.isHost() && !controlFunctions({"available", "withinBoundaries"}).isEmpty-»}
- «ENDIF-»
-«ENDDEFINE»
+ «ENDIF-»«ENDDEFINE»
«DEFINE Setup FOR ACreateAgents-»
«IF !agent.isHost()-»
- «agent.fieldName()».setSize(«agentCount.id()»);
+ «agent.scape()».setSize(«agentCount.id()»);
«ENDIF-»
«ENDDEFINE»
«DEFINE Setup FOR IAct-»«ENDDEFINE»
@@ -151,6 +174,13 @@
«EXPAND Setup FOREACH members-»
«ENDDEFINE»
+«DEFINE CreateScape(int stage) FOR ACreateAgents-»
+ «IF stage == 0-»
+ «IF !agent.isHost()-»
+ «agent.scape()».setSize(«agentCount.id()»);
+ «ENDIF-»
+ «ENDIF-»
+«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR ABuildSpace-»«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR ABuildNetwork-»
«IF stage == 0-»
@@ -170,6 +200,10 @@
«ENDIF-»
add(«projection.fieldName()»);
org.ascape.model.Scape «fillAgent.fieldName()» = «projection.id()»;
+ «IF fillAgent.metaType == SContext»
+ «projection.fieldName()».setAutoCreate(false);
+ «projection.fieldName()».createScape();
+ «ENDIF»
«ELSEIF stage == 1-»
«FOREACH agents AS agent-»
«agent.proto()».setHostScape(«projection.fieldName()»);
@@ -183,14 +217,18 @@
«IF !isHost()»
«IF stage == 0-»
«typeName()» «proto()» = new «typeName()»();
- «fieldName()» = new «pkgm()»Scape();
- «fieldName()».setName("«label»");
- «fieldName()».setPrototypeAgent(«proto()»);
- «fieldName()».setExecutionOrder(«pkgm()»Scape.RULE_ORDER);
+ «scape()» = new «pkgm()»Scape();
+ «scape()».setName("«label»");
+ «scape()».setPrototypeAgent(«proto()»);
+ «scape()».setExecutionOrder(«pkgm()»Scape.RULE_ORDER);
«ELSEIF stage == 1»
- add(«fieldName()»);
+ add(«scape()»);
«ELSEIF stage == 2»
«EXPAND StatBuilder-»
+ «IF metaType == SContext»
+ «scape()».setAutoCreate(false);
+ «scape()».createScape();
+ «ENDIF»
«ENDIF-»
«ENDIF»
«ENDDEFINE»
@@ -219,7 +257,7 @@
«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)»") {
+ «((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-»
@@ -250,7 +288,7 @@
«ENDDEFINE»
«DEFINE StatBuilder FOR SAgent-»
«IF genStats() != "none"»
- «fieldName()».addStatCollector(new org.ascape.util.data.StatCollectorCSA("«label» Population") {
+ «scape()».addStatCollector(new org.ascape.util.data.StatCollectorCSA(getName() + " Population") {
private static final long serialVersionUID = 684614444640209893L;
@SuppressWarnings("unused")
@@ -261,7 +299,7 @@
«ENDDEFINE»
«DEFINE ChildBuilder FOR ARule-»
- «reference.fieldName()».addRule(new «pkgm()»rule.Rule("«label»") {
+ «reference.scape()».addRule(new «pkgm()»rule.Rule("«label»") {
private static final long serialVersionUID = 6846144446402098981L;
public void execute(«pkgm()»Agent a) {
((«reference.implementation.qualifiedName») a).«id()»();
@@ -270,7 +308,7 @@
«ENDDEFINE»
«DEFINE ChildBuilder FOR AInitialize-»
«REM»Initialize is automatically invoked by default from framework«ENDREM»
- «reference.fieldName()».addInitialRule(new «pkgm()»rule.Rule("«label»") {
+ «reference.scape()».addInitialRule(new «pkgm()»rule.Rule("«label»") {
private static final long serialVersionUID = 6846144446402098982L;
public void execute(«pkgm()»Agent a) {
((«reference.implementation.qualifiedName») a).«id()»();
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/inferascape.ext b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/inferascape.ext
index cd75c53..78c80fc 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/inferascape.ext
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/inferascape.ext
@@ -79,7 +79,7 @@
act.selected.asAgent().pre() + act.method(path, inner) + "(" + act.destination.asHost().expl() + ");";
cached String call(ACreateAgents act, List[AAct] path, Boolean inner) :
- act.agent.typeName() + " " + act.id() + " = (" + act.agent.typeName() + ")" + act.getterPath(act.reference.parent(), inner) + "." + act.agent.getterName() + "().getSpace().newLocation(false);";
+ act.agent.typeName() + " " + act.id() + " = (" + act.agent.typeName() + ")" + act.getterPath(act.reference.parent(), inner) + ".get" + act.agent.scape().toFirstUpper() + "().getSpace().newLocation(false);";
cached String call(ADie act, List[AAct] path, Boolean inner) :
act.selected.local(act.selected.id()).expl().pre() + "die();";
@@ -202,7 +202,7 @@
statCond(typed) ? "Cond" : "";
cached String statLabel(SAttribute inner, SAttribute outer, String desc) :
- inner.parent().label + " " + desc.spaceTrail() + (outer != inner ? outer.label.spaceTrail() : "") + inner.label;
+ (inner.parent().parent().parent() != null ? "getName() + \" " : "\"") + inner.parent().label + " " + desc.spaceTrail() + (outer != inner ? outer.label.spaceTrail() : "") + inner.label + "\"";
cached int gridDimSize(SGrid grid) :
grid.attributes.size > 1 ? grid.attributes.get(1).defaultValue.asInteger() : 20;
@@ -224,4 +224,8 @@
attr.gatherData && attr.sType == SAttributeType::Boolean ? {{"is " + attr.label, attr.setTo("true")}, {"is not " + attr.label, attr.setTo("false")}} : {};
List setterSpace(SStyle style) :
- style.agent.attributes.setterSpace();
\ No newline at end of file
+ style.agent.attributes.setterSpace();
+
+//cached String typeName(SAgent agent) :
+// "org.ascape.model.Scape";
+
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/namesascape.ext b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/namesascape.ext
index 5c1c43d..89d4d0c 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/namesascape.ext
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/namesascape.ext
@@ -74,4 +74,10 @@
cached String coordinateType(SNDimensional proj) :
"org.ascape.model.space.Coordinate" + proj.dimension() + "D" + spaceType(proj);
-
\ No newline at end of file
+
+cached String scape(SAgent agent) :
+ agent.id() + "Scape";
+
+cached String fieldName(SAgent agent) :
+ agent.scape();
+
\ No newline at end of file
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/model/generate_ascape_tests.mwe b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/model/generate_ascape_tests.mwe
index bd27c4b..95bbde1 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/model/generate_ascape_tests.mwe
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/model/generate_ascape_tests.mwe
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<workflow>
<property name="outputPath" value="./" />
- <property name="modelPath" value="test/" />
+ <property name="modelPath" value="" />
<property name="modelFile" value="TestGeneration.metaabm" />
<property name="testing" value="true" />
<property name="fullStats" value="true" />