blob: 14609bafcdcaf3cbaef2a88222a7fccbe1fb22fd [file] [log] [blame]
«IMPORT emf»
«IMPORT metaabm»
«IMPORT metaabm::act»
«IMPORT metaabm::function»
«EXTENSION metaabm::tmpl::names»
«EXTENSION metaabm::tmpl::types»
«EXTENSION metaabm::tmpl::infer»
«EXTENSION metaabm::tmpl::util»
«EXTENSION metaabm::tmpl::projections»
«EXTENSION metaabm::ascape::tmpl::inferascape»
«EXTENSION metaabm::ascape::tmpl::namesascape»
«AROUND metaabm::tmpl::Java::ExtendType FOR SProjectionScape«ENDAROUND»
«AROUND metaabm::tmpl::Java::ExtendType FOR SContext-»«typeName()-»«ENDAROUND»
«AROUND metaabm::tmpl::Java::ExtendType FOR SAgent-»«pkgm()-»Scape«ENDAROUND»
«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SContext extends Scape«ENDAROUND»
«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SAgent extends «extendType()»«ENDAROUND»
«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SStyle extends DrawFeature«ENDAROUND»
«AROUND metaabm::tmpl::Java::Imports FOR SStyle
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import org.ascape.util.vis.DrawFeature;
import org.ascape.model.CellOccupant;
import org.ascape.model.HostCell;
«ENDAROUND»
«AROUND metaabm::tmpl::Java::Imports FOR SAgent
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import org.ascape.model.Agent;
import org.ascape.model.Cell;
import org.ascape.model.CellOccupant;
import org.ascape.model.HostCell;
import org.ascape.model.LocatedAgent;
import org.ascape.model.Scape;
import org.ascape.model.event.ScapeEvent;
import org.ascape.model.rule.Rule;
import org.ascape.model.rule.ExecuteThenUpdate;
import org.ascape.model.space.CollectionSpace;
import org.ascape.model.space.Coordinate;
import org.ascape.model.space.Coordinate2DDiscrete;
import org.ascape.model.space.Graph;
import org.ascape.model.space.Singleton;
import org.ascape.model.space.Location;
import org.ascape.util.Conditional;
«targetDef.proceed()»
«ENDAROUND»
«AROUND metaabm::tmpl::Java::Body FOR SAgent
«targetDef.proceed()»
«EXPAND metaabm::ascape::tmpl::ScapeAspect::AgentBody
«EXPAND metaabm::tmpl::Java::GenerateComment»
public Color getColor() {
return Color.LIGHT_GRAY;
}
«ENDAROUND»
«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) {
(new org.ascape.runtime.swing.SwingRunner()).open("«implementation.qualifiedName»", args);
}
«ENDAROUND»
«AROUND metaabm::tmpl::Java::Body FOR SStyle
«targetDef.proceed()»
«EXPAND metaabm::tmpl::Java::GenerateComment»
public void draw(Graphics g, Object object, int width, int height) {
Shape shape = null;
«IF agent.isHost()-»
«agent.typeName()» «rootActivity.id()» = agent.typeName()») object;
«FOREACH ((AGroup) rootActivity).roots AS act»«agent.typeName()» «act.id()» = «rootActivity.id()»;«ENDFOREACH»
«EXPAND metaabm::tmpl::Java::ActionBody
«ELSE
HostCell «rootActivity.id()»Cell = (HostCell) object;
if rootActivity.id()»Cell.getOccupant() instanceof «agent.typeName()») {
«agent.typeName()» «rootActivity.id()» = agent.typeName()») «rootActivity.id()»Cell.getOccupant();
«FOREACH ((AGroup) rootActivity).roots AS act»«agent.typeName()» «act.id()» = «rootActivity.id()»;«ENDFOREACH»
«EXPAND metaabm::tmpl::Java::ActionBody
}
«ENDIF
}
«ENDAROUND»
«AROUND metaabm::ascape::tmpl::ScapeAspect::ViewBuilder FOR AGroup
{
«targetDef.proceed()-»
}
{
org.ascape.view.vis.ChartView chart = new org.ascape.view.vis.ChartView();
addView(chart);
//if (getRunner().getEnvironment() instanceof org.ascape.runtime.applet.AppletEnvironment) {
// chart.getChart().getLegend().setAnchor(com.jrefinery.chart.Legend.SOUTH);
//}
Graphics dummyGraphics = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB).getGraphics();
«FOREACH ((SContext) reference).agents AS agent»
«IF !agent.styles.isEmpty
final «agent.owner.typeName()» «agent.id()»Scape = new «agent.owner.typeName()»();
«agent.id()»Scape.setRunner(new org.ascape.runtime.NonGraphicRunner());
«agent.typeName()» «agent.id()» = new «agent.typeName()»() {
«EXPAND metaabm::tmpl::Java::GenerateComment»
public void requestUpdate() {
}
«EXPAND metaabm::tmpl::Java::GenerateComment»
public «agent.owner.typeName()» get«agent.owner.typeName()»() {
return «agent.id()»Scape;
}
};
«agent.id()»Scape.addagent.id()»);
«IF !agent.isHost()-»
org.ascape.model.HostCell «agent.id()»Host = new org.ascape.model.HostCell() {
«EXPAND metaabm::tmpl::Java::GenerateComment»
public void requestUpdate() {
}
};
«agent.id()»Host.setOccupant((org.ascape.model.CellOccupant) «agent.id()»);
«ENDIF
«ENDIF
«FOREACH agent.styles AS style»
«style.typeName()» «style.id()» = new «style.typeName()»();
«FOREACH style.setterSpace() AS setter»
«((List) setter).last()»;
«IF agent.isHost()-»
«style.id()».draw(dummyGraphics, «agent.id()», 4, 4);
«ELSE»
«style.id()».draw(dummyGraphics, «agent.id()»Host, 4, 4);
«ENDIF
{
Color agentColor = dummyGraphics.getColor();
chart.addSeries("Count «agent.typeName()» «((List) setter).first()»", agentColor);
}
«ENDFOREACH
«ENDFOREACH
«ENDFOREACH
}
«ENDAROUND»
«DEFINE StyleBuilder (SProjection projection) FOR SStyle
«IF appropriate(projection, this)-»
org.ascape.util.vis.DrawFeature «id()» = new «implementation.qualifiedName»();
«id()».setName("«label»");
«projection.fieldName()».addDrawFeatureid()»);
«ENDIF
«ENDDEFINE»
«DEFINE StyleSelector (SProjection projection) FOR SStyle
«IF appropriate(projection, this)-»
«projection.id()»View.getDrawSelection().setSelectedid()», true);
«ENDIF
«ENDDEFINE»
«DEFINE StyleSelector (SProjection projection) FOR SProjection-»«ENDDEFINE»
«DEFINE StyleSelector (SProjection projection) FOR SGrid
«id()»View.getDrawSelection().setSelectedid()»View.agents_oval_cells_draw_feature, false);
«id()»View.getDrawSelection().setSelectedid()»View.cells_fill_draw_feature, true);
«id()»View.getDrawSelection().moveToFrontid()»View.cells_fill_draw_feature);
«ENDDEFINE»
«AROUND metaabm::ascape::tmpl::ScapeAspect::ViewBuilder FOR ABuildGrid
«IF (projection.defaultView() != null)-»
«projection.defaultView()» «projection.id()»View = new «projection.defaultView()»();
«projection.id()»View.setAgentSize(«((SGrid) projection).agentPixelSize()»);
«projection.fieldName()».addViewprojection.id()»View);
«IF !((SContext) reference).projections.typeSelect(SNetwork).isEmpty
«projection.id()»View.setDrawNetwork(true);
«ENDIF
«IF fillAgent != null
«EXPAND StyleBuilder (projection) FOREACH fillAgent.styles
«ENDIF
«FOREACH agents AS buildAgent
«EXPAND StyleBuilder (projection) FOREACH buildAgent.styles
«ENDFOREACH
«FOREACH agents AS buildAgent
«EXPAND StyleSelector (projection) FOREACH buildAgent.styles
«ENDFOREACH
«IF fillAgent != null
«EXPAND StyleSelector (projection) FOREACH fillAgent.styles
«ENDIF
«EXPAND StyleSelector (projection) FOR projection
«ENDIF
«ENDAROUND»
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AEvaluate
«IF function.id().startsWith("color")-»
«targetDef.proceed()»
g.setColorid()»);
«ELSEIF function.id() == "shapeOval"
shape = new Ellipse2D.Double(0, 0, width - 2, height - 2);
«ELSEIF function.id() == "shapeRectangle"
«IF !reference.isHost()-»
shape = new Rectangle2D.Double(0, 0, width - 1, height - 1);
«ELSE
shape = new Rectangle2D.Double(0, 0, width, height);
«ENDIF
«ELSEIF function.id() == "shapeMarker"
shape = new Ellipse2D.Double(width * .25 - 1, width * .25 - 1, width * .5 - 1, width * .5 - 1);
«ELSEIF function.id().startsWith("graphicFill")-»
((Graphics2D) g).fill(shape);
«ELSEIF function.id().startsWith("graphicOutline")-»
((Graphics2D) g).draw(shape);
«ELSE
«IF selected == rootSelected || allTargets.typeSelect(ASet).collect(e | e.parameter).size > 0
«targetDef.proceed()»
«ENDIF
«ENDIF
«ENDAROUND»
«AROUND metaabm::tmpl::Java::FunctionInnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR ASink
«IF function.id() == "randomUnit"
getRandom().nextDouble()
«ELSEIF function.id() == "randomIs"
getRandom().nextBoolean()
«ELSEIF function.id() == "uniformDistribution"
randomInRangeinputs.expression(path, inner).toString(", ")»);
«ELSEIF function.id() == "timeNow"
«path.last().accessPath(this, inner)»«reference.owner != null ? "getScape()." : ""»getPeriod()
«ELSEIF function.id() == "available"
isAvailable()
«ELSEIF function.id() == "withinBoundaries"
«expressionSink(path, function, inner
«ELSE
«targetDef.proceed()»
«ENDIF
«ENDAROUND»
«AROUND metaabm::tmpl::Java::OtherAccessors FOR SAgent
«targetDef.proceed()-»
«EXPAND metaabm::ascape::tmpl::ScapeAspect::NameAccessor
«ENDAROUND»
«AROUND metaabm::tmpl::Java::Builder FOR SAgent
«IF (rootActivity != null)-»
«EXPAND metaabm::ascape::tmpl::ScapeAspect::ChildBuilder FOR rootActivity
«ENDIF
«ENDAROUND»
«AROUND metaabm::tmpl::Java::MethodPotential (metaabm::act::AAct within) FOR FFunction
«IF (id() == "withinBoundaries") || (id() == "distance")-»
«EXPAND metaabm::tmpl::Java::Method
«ELSE
«targetDef.proceed()-»
«ENDIF
«ENDAROUND»
«AROUND metaabm::tmpl::Java::MethodPotential (metaabm::act::AAct within) FOR AQuery
«IF (function.id() == "minimize") || (function.id() == "maximize")-»
/**
* <!-- begin-user-doc -->
* A data point used within a search to find the «selected.agent.label» with the «function.id()»d «inputs.value.get(0).label» value.
* <!-- end-user-doc -->
* @generated
*/
public final static DataPoint «dataPoint()» = new DataPointConcrete("«function.id().toFirstUpper()» «inputs.value.get(0).id()»") {
«EXPAND metaabm::tmpl::Java::GenerateComment»
private static final long serialVersionUID = 3755810443335739012L;
«EXPAND metaabm::tmpl::Java::GenerateComment»
public double getValue(Object o) {
«EXPAND metaabm::tmpl::Java::InnerEvaluation(allSources.select(e|e.selected == this.selected), false)-»
return ((«selected.agent.typeName()») o).«inputs.value.get(0).getterName()»();
}
};
«ELSE
«targetDef.proceed()-»
«ENDIF
«ENDAROUND»
«AROUND metaabm::tmpl::Java::ActionBody FOR FFunction
«IF id() == "withinBoundaries"
Coordinate2DDiscrete coor = (Coordinate2DDiscrete) getCoordinate();
return (coor.getYValue() >= bounds[0]
&& coor.getXValue() >= bounds[1]
&& coor.getYValue() <= bounds[2]
&& coor.getXValue() <= bounds[3]);
«ELSE-»«targetDef.proceed()»«ENDIF
«ENDAROUND»
«AROUND metaabm::tmpl::Java::ConditionBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AAct
«EXPAND metaabm::ascape::tmpl::ScapeAspect::Conditional(path, inner)-»
«ENDAROUND»
«AROUND metaabm::tmpl::Java::BeginQueryBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AAct
«EXPAND metaabm::ascape::tmpl::ScapeAspect::BeginQuery(path, inner)-»
«ENDAROUND»
«AROUND metaabm::tmpl::Java::EndQueryBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AAct
«EXPAND metaabm::ascape::tmpl::ScapeAspect::EndQuery(path, inner)-»
«ENDAROUND»
«AROUND metaabm::tmpl::Java::BeginSerialBlock(List[AAct] path, Boolean inner) FOR AControl
«EXPAND metaabm::ascape::tmpl::ScapeAspect::BeginSerial(path, inner)-»
«targetDef.proceed()-»
«ENDAROUND»
«AROUND metaabm::tmpl::Java::EndSerialBlock(List[AAct] path, Boolean inner) FOR AControl
«EXPAND metaabm::ascape::tmpl::ScapeAspect::EndSerial(path, inner)-»
«targetDef.proceed()-»
«ENDAROUND»
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AMove
«EXPAND metaabm::ascape::tmpl::ScapeAspect::InnerBlockCall(path, inner)-»«ENDAROUND»
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR ACreateAgents
«call(path, inner)»«ENDAROUND»
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR ADie
«call(path, inner)»«ENDAROUND»
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR ALeave
«call(path, inner)»«ENDAROUND»
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AReplace
«call(path, inner)»«ENDAROUND»
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AConnect
«call(path, inner)»«ENDAROUND»
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR ADisconnect»
«call(path, inner)»«ENDAROUND»