Isolated and generalized IAgentChild dependency so that it won't affect
Ascape generation. Should lay ground for better integration.
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.sd/srcgen/sdl/SIR/sd/SIR.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.sd/srcgen/sdl/SIR/sd/SIR.java
index 6d22bdf..0578683 100644
--- a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.sd/srcgen/sdl/SIR/sd/SIR.java
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.sd/srcgen/sdl/SIR/sd/SIR.java
@@ -36,9 +36,10 @@
import org.ascape.view.vis.GEFView;
import org.ascape.view.vis.GraphView;
-import sdl.SIR.sd.sir_SD.SD;
-
import org.eclipse.amp.escape.runtime.extension.IAgentChild;
+import org.eclipse.amp.escape.runtime.extension.IAgentChildProvider;
+
+import sdl.SIR.sd.sir_SD.SD;
/**
* <!-- begin-user-doc -->
@@ -48,7 +49,7 @@
* <!-- end-user-doc -->
* @generated
*/
-public class SIR extends Scape implements IGraphicsAdapted {
+public class SIR extends Scape implements IGraphicsAdapted, IAgentChildProvider {
/**
* <!-- begin-user-doc -->
@@ -88,6 +89,10 @@
children.add(new SD());
+ children = new ArrayList<IAgentChild>();
+
+ children.add(new SD());
+
}
//todo, make this a useful value for evaluating compatibility of different versions of generated classes
@@ -191,17 +196,13 @@
sIRAgentScape.setPrototypeAgent(sIRAgentProto);
sIRAgentScape.setExecutionOrder(Scape.RULE_ORDER);
- for (IAgentChild tmp : sIRAgentProto.getChildren()) {
- tmp.addDataCollectors(this);
- }
+ createExtensions(sIRAgentProto);
sIRAgentScape.setSize(getSIRAgentCount());
add(sIRAgentScape);
- for (IAgentChild tmp : sIRAgentProto.getChildren()) {
- tmp.addDataCollectors(this);
- }
+ createExtensions(sIRAgentProto);
sIRAgentScape
.addStatCollector(new org.ascape.util.data.StatCollectorCond(
@@ -213,13 +214,9 @@
}
});
- for (IAgentChild tmp : sIRAgentProto.getChildren()) {
- tmp.addDataCollectors(this);
- }
+ createExtensions(sIRAgentProto);
- for (IAgentChild tmp : getChildren()) {
- tmp.addDataCollectors(this);
- }
+ createExtensions(this);
}
/**
@@ -267,35 +264,14 @@
final SIR sIRAgentScape = new SIR();
sIRAgentScape.setRunner(new NonGraphicRunner());
SIRAgent sIRAgent = new SIRAgent() {
-
- /**
- * <!-- begin-user-doc -->
- *
- * <!-- end-user-doc -->
- * @generated
- */
public void requestUpdate() {
}
-
- /**
- * <!-- begin-user-doc -->
- *
- * <!-- end-user-doc -->
- * @generated
- */
public SIR getSIR() {
return sIRAgentScape;
}
};
sIRAgentScape.add(sIRAgent);
HostCell sIRAgentHost = new HostCell() {
-
- /**
- * <!-- begin-user-doc -->
- *
- * <!-- end-user-doc -->
- * @generated
- */
public void requestUpdate() {
}
};
@@ -385,6 +361,14 @@
}
+ public void createExtensions(Object object) {
+ if (object instanceof IAgentChildProvider) {
+ for (IAgentChild tmp : ((IAgentChildProvider) object).getChildren()) {
+ tmp.addDataCollectors(this);
+ }
+ }
+ }
+
/**
* <!-- begin-user-doc -->
*
diff --git a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.sd/srcgen/sdl/SIR/sd/SIRAgent.java b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.sd/srcgen/sdl/SIR/sd/SIRAgent.java
index 9e7716f..9b97554 100644
--- a/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.sd/srcgen/sdl/SIR/sd/SIRAgent.java
+++ b/org.eclipse.amp.amf/examples/org.eclipse.amp.amf.examples.sd/srcgen/sdl/SIR/sd/SIRAgent.java
@@ -37,6 +37,7 @@
import org.ascape.view.vis.GraphView;
import org.eclipse.amp.escape.runtime.extension.IAgentChild;
+import org.eclipse.amp.escape.runtime.extension.IAgentChildProvider;
/**
* <!-- begin-user-doc -->
@@ -46,7 +47,7 @@
* <!-- end-user-doc -->
* @generated
*/
-public class SIRAgent extends CellOccupant {
+public class SIRAgent extends CellOccupant implements IAgentChildProvider {
/**
* <!-- begin-user-doc -->
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/AscapeAspect.xpt b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/AscapeAspect.xpt
index f7f12c9..14609ba 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/AscapeAspect.xpt
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.ascape/src/metaabm/ascape/tmpl/AscapeAspect.xpt
@@ -72,6 +72,9 @@
«AROUND metaabm::tmpl::Java::Body FOR SContext-»
«EXPAND metaabm::ascape::tmpl::ScapeAspect::ScapeBody-»
+
+ public void createExtensions(Object object) {
+ }
«EXPAND metaabm::tmpl::Java::GenerateComment»
public static void main(String[] args) {
@@ -229,7 +232,7 @@
«ELSEIF function.id() == "uniformDistribution"-»
randomInRange(«inputs.expression(path, inner).toString(", ")»);
«ELSEIF function.id() == "timeNow"-»
- «path.last().accessPath(this, inner)»«reference.owner.parent != null ? "getScape()." : ""»getPeriod()
+ «path.last().accessPath(this, inner)»«reference.owner != null ? "getScape()." : ""»getPeriod()
«ELSEIF function.id() == "available"-»
isAvailable()
«ELSEIF function.id() == "withinBoundaries"-»
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 99e5f62..8fa59e9 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
@@ -167,11 +167,7 @@
«ENDIF-»
«EXPAND metaabm::tmpl::Java::Builder FOREACH projections-»
«EXPAND metaabm::tmpl::Java::Builder FOREACH agents-»
-
-
- for (IAgentChild tmp : getChildren()) {
- tmp.addDataCollectors(this);
- }
+ createExtensions(this);
}
/**
@@ -349,9 +345,7 @@
add(«projection.fieldName()»);
«IF fillAgent != null-»
org.ascape.model.Scape «fillAgent.fieldName()» = «projection.id()»;
- for (IAgentChild tmp :proto«fillAgentType()».getChildren()) {
- tmp.addDataCollectors(this);
- }
+ createExtensions(proto«fillAgentType()»);
«ENDIF-»
«IF fillAgent.metaType == SContext-»
«projection.fieldName()».setAutoCreate(false);
@@ -363,7 +357,7 @@
«ENDFOREACH-»
«IF fillAgent == null || ((AGroup) fillAgent.rootActivity).members.isEmpty-»
«projection.fieldName()».getRules().clear();
- «ENDIF-»
+ «ENDIF-»
«ENDIF-»
«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR SAgent-»
@@ -389,9 +383,7 @@
«ENDIF-»
«ENDIF-»
«IF !isHost()»
- for (IAgentChild tmp : «proto()».getChildren()) {
- tmp.addDataCollectors(this);
- }
+ createExtensions(«proto()»);
«ENDIF»
«ENDDEFINE»
«DEFINE CreateScape(int stage) FOR AGroup-»
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.escape/src/metaabm/escape/tmpl/EscapeAspect.xpt b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.escape/src/metaabm/escape/tmpl/EscapeAspect.xpt
index 4bf7055..8c913d3 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.escape/src/metaabm/escape/tmpl/EscapeAspect.xpt
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen.escape/src/metaabm/escape/tmpl/EscapeAspect.xpt
@@ -62,6 +62,9 @@
import org.ascape.view.vis.GEFView;
import org.ascape.view.vis.GraphView;
+ import org.eclipse.amp.escape.runtime.extension.IAgentChild;
+ import org.eclipse.amp.escape.runtime.extension.IAgentChildProvider;
+
«targetDef.proceed()»
«ENDAROUND»
@@ -69,8 +72,8 @@
«AROUND metaabm::tmpl::Java::ExtendType FOR SContext-»«typeName()-»«ENDAROUND»
«AROUND metaabm::tmpl::Java::ExtendType FOR SAgent-»Scape«ENDAROUND»
-«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SContext-» extends Scape implements IGraphicsAdapted«ENDAROUND»
-«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SAgent-» extends «extendType()»«ENDAROUND»
+«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SContext-» extends Scape implements IGraphicsAdapted, IAgentChildProvider«ENDAROUND»
+«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SAgent-» extends «extendType()» implements IAgentChildProvider«ENDAROUND»
«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SStyle-» implements «(agent.isHost() ? "HostCell" : "Agent")»EditPart«ENDAROUND»
«AROUND metaabm::tmpl::Java::Files FOR SAgent-»
@@ -112,7 +115,13 @@
}
«EXPAND ExecIAgentChild»
-
+ public void createExtensions(Object object) {
+ if (object instanceof IAgentChildProvider) {
+ for (IAgentChild tmp : ((IAgentChildProvider) object).getChildren()) {
+ tmp.addDataCollectors(this);
+ }
+ }
+ }
«ENDAROUND»
«DEFINE ExecIAgentChild FOR SContext»
@@ -299,6 +308,32 @@
«EXPAND RecurseAgentProviders FOREACH agents»
«ENDDEFINE»
+«AROUND metaabm::tmpl::Java::Extension FOR SAgent-»
+ «EXPAND metaabm::tmpl::Java::GenerateComment»
+ private List<IAgentChild> children;
+ «EXPAND metaabm::tmpl::Java::GenerateComment»
+ public List<IAgentChild> getChildren(){
+ return children;
+ }
+«ENDAROUND»
+
+«DEFINE ConstructorAgentChildren FOR SAgent»
+ children = new ArrayList<IAgentChild>();
+ «FOREACH children AS child»
+ children.add(new «child.getName()»());
+ «ENDFOREACH»
+«ENDDEFINE»
+
+«AROUND metaabm::tmpl::Java::ConstructorBody FOR SAgent-»
+ «targetDef.proceed()-»
+ «EXPAND ConstructorAgentChildren»
+«ENDAROUND»
+
+«AROUND metaabm::tmpl::Java::ConstructorBody FOR SContext-»
+ «targetDef.proceed()-»
+ «EXPAND ConstructorAgentChildren»
+«ENDAROUND»
+
«AROUND metaabm::tmpl::Java::ExtendType FOR ASink-»
«IF function.color()-»Color
«ELSEIF function.shape()-»Shape
diff --git a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen/src/metaabm/tmpl/Java.xpt b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen/src/metaabm/tmpl/Java.xpt
index 3a3e324..b602158 100644
--- a/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen/src/metaabm/tmpl/Java.xpt
+++ b/org.eclipse.amp.amf/plugins/org.eclipse.amp.amf.gen/src/metaabm/tmpl/Java.xpt
@@ -96,10 +96,8 @@
«FOREACH children AS child»
import «child.getPackage()».«child.getName()»;
«ENDFOREACH»
- import org.eclipse.amp.escape.runtime.extension.IAgentChild;
«ENDDEFINE»
-
«DEFINE ClassImplementation FOR IID»
«EXPAND Fields-»
«EXPAND Extension»
@@ -113,12 +111,6 @@
«ENDDEFINE»
«DEFINE Extension FOR SAgent»
- «EXPAND GenerateComment»
- private List<IAgentChild> children;
- «EXPAND GenerateComment»
- public List<IAgentChild> getChildren(){
- return children;
- }
«ENDDEFINE»
«DEFINE ClassImplementation FOR SState-»
@@ -449,7 +441,6 @@
«DEFINE ConstructorBody FOR SContext-»
«EXPAND ConstructorBody FOREACH attributes-»
«EXPAND ConstructorBody FOREACH projections-»
- «EXPAND ConstrAgentChildren»
«ENDDEFINE»
«DEFINE ConstructorBody FOR SAttribute-»
«IF !fieldExists() && (defaultValue().length > 0)-»
@@ -459,18 +450,7 @@
«DEFINE ConstructorBody FOR SProjection-»
«EXPAND ConstructorBody FOREACH attributes-»
«ENDDEFINE»
-
-«DEFINE ConstructorBody FOR SAgent-»
- «EXPAND ConstrAgentChildren»
-«ENDDEFINE»
-
-«DEFINE ConstrAgentChildren FOR SAgent»
- children = new ArrayList<IAgentChild>();
- «FOREACH children AS child»
- children.add(new «child.getName()»());
- «ENDFOREACH»
-«ENDDEFINE»
-
+«DEFINE ConstructorBody FOR SAgent-»«ENDDEFINE»
«DEFINE ConstructorBody FOR IID-»«ENDDEFINE»
«DEFINE UtilBody FOR IID-»«ENDDEFINE»
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.runtime/src/org/eclipse/amp/escape/runtime/extension/IAgentChildProvider.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.runtime/src/org/eclipse/amp/escape/runtime/extension/IAgentChildProvider.java
new file mode 100644
index 0000000..9486b6f
--- /dev/null
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.runtime/src/org/eclipse/amp/escape/runtime/extension/IAgentChildProvider.java
@@ -0,0 +1,12 @@
+package org.eclipse.amp.escape.runtime.extension;
+
+import java.util.List;
+
+/**
+ * Interface for simple contexts that can have children that are not covered by Scape mechanism. Supports SD and model extensions.
+ * TODO Integrate with the ICompositionProvider construct
+ * @milesparker
+ */
+public interface IAgentChildProvider {
+ List<IAgentChild> getChildren();
+}