blob: 982d3d5fc0a1e8218f700d6e8189f615ace9074e [file] [log] [blame]
«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 SProjectionScape«ENDAROUND»
«AROUND metaabm::tmpl::Java::ExtendType FOR SContext-»«typeName()-»«ENDAROUND»
«AROUND metaabm::tmpl::Java::ExtendType FOR SAgentScape«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.addid()»);
«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()»", getInferredChartColorid()», «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"
randomInRangeinputs.expression(path, inner).toString(", ")»);
«ELSEIF function.id() == "timeNow"
«path.last().accessPath(this, innergetScape().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")-»
ColorConstantsfunction.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»