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();
+}