| «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 SProjection-»Scape«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-» |
| |
| «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.add(«agent.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()».addDrawFeature(«id()»); |
| «ENDIF-» |
| «ENDDEFINE» |
| «DEFINE StyleSelector (SProjection projection) FOR SStyle-» |
| «IF appropriate(projection, this)-» |
| «projection.id()»View.getDrawSelection().setSelected(«id()», true); |
| «ENDIF-» |
| «ENDDEFINE» |
| «DEFINE StyleSelector (SProjection projection) FOR SProjection-»«ENDDEFINE» |
| «DEFINE StyleSelector (SProjection projection) FOR SGrid-» |
| «id()»View.getDrawSelection().setSelected(«id()»View.agents_oval_cells_draw_feature, false); |
| «id()»View.getDrawSelection().setSelected(«id()»View.cells_fill_draw_feature, true); |
| «id()»View.getDrawSelection().moveToFront(«id()»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()».addView(«projection.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.setColor(«id()»); |
| «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"-» |
| randomInRange(«inputs.expression(path, inner).toString(", ")»); |
| «ELSEIF function.id() == "timeNow"-» |
| «path.last().accessPath(this, inner)»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» |
| |