«IMPORT emf» | |
«IMPORT metaabm» | |
«IMPORT metaabm::act» | |
«IMPORT metaabm::function» | |
«EXTENSION metaabm::tmpl::types» | |
«EXTENSION metaabm::tmpl::names» | |
«EXTENSION metaabm::tmpl::infer» | |
«EXTENSION metaabm::tmpl::util» | |
«EXTENSION metaabm::tmpl::projections» | |
«EXTENSION metaabm::ascape::tmpl::namesascape» | |
«EXTENSION metaabm::ascape::tmpl::inferascape» | |
«EXTENSION metaabm::escape::tmpl::inferescape» | |
«AROUND metaabm::tmpl::Java::Imports FOR SStyle-» | |
import org.ascape.model.CellOccupant; | |
import org.ascape.model.HostCell; | |
import org.ascape.util.vis.ColorFeatureConcrete; | |
import org.eclipse.draw2d.ColorConstants; | |
import org.eclipse.draw2d.IFigure; | |
import org.eclipse.draw2d.Shape; | |
import org.eclipse.draw2d.geometry.Dimension; | |
import org.eclipse.swt.graphics.Color; | |
import org.eclipse.amp.agf.gef.AgentEditPart; | |
import org.eclipse.amp.escape.ascape.gef.HostCellEditPart; | |
«ENDAROUND» | |
«AROUND metaabm::tmpl::Java::Imports FOR SAgent-» | |
import java.util.List; | |
import org.eclipse.swt.graphics.Color; | |
import org.eclipse.jface.viewers.IColorProvider; | |
import org.ascape.model.Agent; | |
import org.ascape.model.CellOccupant; | |
import org.ascape.model.HostCell; | |
import org.ascape.model.Scape; | |
import org.ascape.model.event.ScapeEvent; | |
import org.ascape.model.rule.Rule; | |
import org.ascape.model.space.CollectionSpace; | |
import org.ascape.model.space.Coordinate2DDiscrete; | |
import org.ascape.model.space.Graph; | |
import org.ascape.model.space.Location; | |
import org.ascape.runtime.NonGraphicRunner; | |
import org.ascape.util.Conditional; | |
import org.ascape.util.vis.ColorFeature; | |
import org.ascape.util.vis.ColorFeatureConcrete; | |
import org.ascape.view.vis.ChartView; | |
import org.ascape.view.vis.GEFView; | |
import org.eclipse.gef.EditPartFactory; | |
import org.eclipse.amp.agf.gef.ModelFactoryProvider; | |
import org.eclipse.amp.escape.ascape.adapt.AscapePartFactory; | |
import org.eclipse.amp.escape.ascape.adapt.AscapePartTreeFactory; | |
«ENDAROUND» | |
«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-»Scape«ENDAROUND» | |
«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SContext-» extends Scape implements ModelFactoryProvider«ENDAROUND» | |
«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SAgent-» extends «IF isHost()-»HostCell«ELSE»CellOccupant«ENDIF-»«ENDAROUND» | |
«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SStyle-» extends «(agent.isHost() ? "HostCell" : "Agent")»EditPart«ENDAROUND» | |
«AROUND metaabm::tmpl::Java::Body FOR SAgent-» | |
«targetDef.proceed()» | |
«EXPAND metaabm::ascape::tmpl::ScapeAspect::AgentBody-» | |
«ENDAROUND» | |
«AROUND metaabm::tmpl::Java::Body FOR SContext-» | |
EditPartFactory factory; | |
EditPartFactory treeFactory; | |
«EXPAND metaabm::ascape::tmpl::ScapeAspect::ScapeBody-» | |
public EditPartFactory getEditPartFactory() { | |
if (factory == null) { | |
factory = new «implementation.className»PartFactory(); | |
} | |
return factory; | |
} | |
public EditPartFactory getEditPartTreeFactory() { | |
if (treeFactory == null) { | |
treeFactory = new AscapePartTreeFactory(); | |
} | |
return treeFactory; | |
} | |
private Color getInferredChartColor(Object agent, | |
IColorProvider colorProvider) { | |
Color color = colorProvider.getForeground(agent); | |
if (color == ColorFeature.BLACK) { | |
color = ColorFeatureConcrete | |
.createHSB((float) java.lang.Math.random() * 360f, 1.0f, | |
0.8f); | |
} | |
return color; | |
} | |
public static void main(String[] args) { | |
(new NonGraphicRunner()).openInstance("«implementation.qualifiedName»"); | |
} | |
«ENDAROUND» | |
«AROUND metaabm::tmpl::Java::Body FOR SStyle-» | |
«targetDef.proceed()» | |
Dimension notShown = new Dimension(0, 0); | |
protected IFigure buildFigure(IFigure figure) { | |
Color color = null; | |
boolean createFigure = figure == null; | |
Shape markerFigure = null; | |
if (!createFigure) { | |
((Shape) figure).setFill(false); | |
((Shape) figure).setOutline(false); | |
} | |
«FOREACH ((AGroup) rootActivity).roots AS act»«agent.typeName()» «act.id()» = («agent.typeName()») getModel();«ENDFOREACH» | |
«EXPAND metaabm::tmpl::Java::ActionBody-» | |
return figure; | |
} | |
«ENDAROUND» | |
«AROUND metaabm::ascape::tmpl::ScapeAspect::ViewBuilder FOR AGroup-» | |
«IF reference.parent == null» | |
ChartView chart = new ChartView(); | |
«EXPAND BuildChartSelection FOREACH ((SContext) reference).agents-» | |
addView(chart); | |
«ENDIF» | |
«IF !((SContext) reference).projections.isEmpty» | |
addView(new GEFView()); | |
«ENDIF» | |
«targetDef.proceed()-» | |
«ENDAROUND» | |
«DEFINE BuildChartSelection FOR SAgent» | |
«IF !styles.isEmpty-» | |
final «owner.typeName()» «id()»Scape = new «owner.typeName()»(); | |
«id()»Scape.setRunner(new NonGraphicRunner()); | |
«typeName()» «id()» = new «typeName()»() { | |
public void requestUpdate() { | |
} | |
public «owner.typeName()» get«owner.typeName()»() { | |
return «id()»Scape; | |
} | |
}; | |
«id()»Scape.add(«id()»); | |
«IF !isHost()-» | |
HostCell «id()»Host = new HostCell() { | |
public void requestUpdate() { | |
} | |
}; | |
«id()»Host.setOccupant((CellOccupant) «id()»); | |
«ENDIF-» | |
«FOREACH styles AS style» | |
IColorProvider «style.id()»ColorProvider = new «styles.get(0).typeName()»ColorProvider(); | |
«FOREACH style.setterSpace() AS setter» | |
«((List) setter).last()»; | |
chart.addSeries("Count «typeName()» «((List) setter).first()»", getInferredChartColor(«id()», «style.id()»ColorProvider)); | |
«ENDFOREACH-» | |
«ENDFOREACH-» | |
«ENDIF-» | |
«ENDDEFINE» | |
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AEvaluate-» | |
«IF function.id().startsWith("shapeMarker")» | |
figure = «function.id()»(); | |
«ELSEIF function.id().startsWith("shape")-» | |
if (createFigure) { | |
figure = «function.id()»(); | |
} | |
«ELSEIF function.id().startsWith("color") || function.id().startsWith("graphic")» | |
if (!createFigure) { | |
«IF function.id().startsWith("color")-» | |
color = «EXPAND metaabm::tmpl::Java::FunctionInnerBlock(path, inner)»; | |
«ELSEIF function.id().startsWith("graphicFill")-» | |
figure.setBackgroundColor(color); | |
((Shape) figure).setFill(true); | |
«ELSEIF function.id().startsWith("graphicOutline")-» | |
figure.setForegroundColor(color); | |
((Shape) figure).setOutline(true); | |
«ENDIF» | |
«IF function.id().startsWith("graphic") && !path.typeSelect(ASink).select(e | ((ASink) e).function.id().startsWith("shapeMarker")).isEmpty» | |
figure = getFigure(); | |
«ENDIF» | |
} | |
«ELSE-» | |
«targetDef.proceed()» | |
«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)» | |
«ELSEIF function.id() == "colorRGB"-» | |
ColorFeatureConcrete.create((int) («inputs.expression(path, inner).toString(" * 255), (int) (")» * 255)) | |
«ELSEIF function.id().startsWith("color")-» | |
ColorConstants.«function.id().replaceFirst("color","").toFirstLower()» | |
«ELSE-» | |
«targetDef.proceed()» | |
«ENDIF-» | |
«ENDAROUND» | |
«DEFINE StyleProvider FOR SAgent» | |
«IF styles.size > 0» | |
if (model instanceof «implementation.className») { | |
return new «styles.get(0).implementation.qualifiedName»(); | |
} | |
«ENDIF-» | |
«ENDDEFINE» | |
«DEFINE RecurseAgentProviders FOR SAgent» | |
«EXPAND StyleProvider» | |
«ENDDEFINE» | |
«DEFINE RecurseAgentProviders FOR SContext» | |
«EXPAND StyleProvider» | |
«EXPAND RecurseAgentProviders FOREACH agents» | |
«ENDDEFINE» | |
«AROUND metaabm::tmpl::Java::Model FOR SContext-» | |
«targetDef.proceed()» | |
«IF generate()-» | |
«FILE javaFileLoc().replaceFirst(".java", "PartFactory.java")» | |
package «package()»; | |
import org.eclipse.amp.escape.ascape.adapt.AscapePartFactory; | |
import org.eclipse.gef.EditPart; | |
public class «typeName()»PartFactory extends AscapePartFactory { | |
protected EditPart getPartForElement(Object model) { | |
«EXPAND RecurseAgentProviders FOREACH agents» | |
return super.getPartForElement(model); | |
} | |
} | |
«ENDFILE» | |
«ENDIF» | |
«ENDAROUND» | |
«AROUND metaabm::tmpl::Java::ExtendType FOR ASink-» | |
«IF function.color()-»Color | |
«ELSEIF function.shape()-»Shape | |
«ELSEIF function.id().startsWith("graphic")-»Shape | |
«ELSEIF function.id() == "randomState"-»«inputs.get(0).value.typeName()» | |
«ELSE-»«typeName()»«ENDIF-» | |
«ENDAROUND» | |
«DEFINE StyleSelector (SProjection projection) FOR SProjection-» | |
«ENDDEFINE» | |
«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::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» | |
«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::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» | |