| «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» |
| |
| |
| «AROUND metaabm::tmpl::Java::Imports FOR SStyle-» |
| import org.ascape.util.vis.ColorFeature; |
| import org.ascape.model.CellOccupant; |
| import org.ascape.model.HostCell; |
| import org.eclipse.swt.graphics.Color; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.draw2d.IFigure; |
| import org.eclipse.draw2d.Shape; |
| import org.eclipse.draw2d.ColorConstants; |
| |
| import org.eclipse.jface.viewers.IColorProvider; |
| import org.eclipse.amp.agf.gef.IFigureProvider; |
| import org.eclipse.amp.agf.gef.DefaultFigureProvider; |
| import org.eclipse.amp.agf.gef.Shapes; |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::Files FOR SAgent-» |
| «EXPAND metaabm::tmpl::Java::ClassFile FOREACH styles-» |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::ClassFile FOR IID-» |
| «IF generate()-» |
| «IF SStyle.isInstance(this)-» |
| «FILE javaFileLoc().replaceFirst(".java", "FigureProvider.java")-» |
| «EXPAND metaabm::tmpl::Java::ClassText» |
| «ENDFILE-» |
| «ENDIF-» |
| «ENDIF-» |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::ExtendType FOR ASink-» |
| «IF function.color()-»Color |
| «ELSE-»«typeName()»«ENDIF-» |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::ClassName FOR IID-»«typeName()»FigureProvider«ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::ClassInheiritance FOR SStyle-» extends DefaultFigureProvider«ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::ActivityPotentialMethod (AAct within) FOR SContext-»«ENDAROUND» |
| «AROUND metaabm::tmpl::Java::SetterSideEffect FOR SContext-»«ENDAROUND» |
| «AROUND metaabm::tmpl::Java::OtherAccessors FOR SContext-»«ENDAROUND» |
| «AROUND metaabm::tmpl::Java::OtherFields FOR SContext-»«ENDAROUND» |
| «AROUND metaabm::tmpl::Java::Constructor FOR SContext-»«ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::Body FOR SStyle-» |
| «EXPAND metaabm::tmpl::Java::GenerateComment» |
| private static IFigureProvider singleton; |
| |
| «REM»«IF !((AGroup) rootActivity).members.typeSelect(AEvaluate).exists(a | a.function.id().startsWith("shapeMarker"))»«ENDREM» |
| «EXPAND metaabm::tmpl::Java::GenerateComment» |
| public IFigure getFigure(Object object) { |
| IFigure figure = null; |
| Color color = null; |
| «EXPAND MethodSetup-» |
| return figure; |
| } |
| «REM»«ELSE» |
| public IFigure buildFigure(Object object, IFigure figure) { |
| Color color = null; |
| «EXPAND MethodSetup-» |
| return figure; |
| } |
| |
| public IFigure getFigure(Object object) { |
| return buildFigure(object, null); |
| } |
| |
| /** |
| * Does nothing. |
| * |
| * @param object |
| * @param figure |
| * @see org.eclipse.amp.agf.gef.IFigureProvider#updateFigure(java.lang.Object, org.eclipse.draw2d.IFigure) |
| */ |
| public void updateFigure(Object object, IFigure figure) { |
| buildFigure(object, figure); |
| } |
| |
| /** |
| * True: The figure needs to be able to update itself because we are changing shape markers. |
| */ |
| public boolean isFigureUpdateable(Object object) { |
| return true; |
| } |
| «ENDIF»«ENDREM» |
| «EXPAND metaabm::tmpl::Java::GenerateComment» |
| public static IFigureProvider getDefault() { |
| if (singleton == null) { |
| singleton = new «typeName()»FigureProvider(); |
| } |
| return singleton; |
| } |
| «ENDAROUND» |
| |
| «DEFINE MethodSetup FOR SStyle-» |
| «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-» |
| «ENDDEFINE» |
| |
| «DEFINE DrawStyle FOR AAct-» |
| «IF reference.isHost()-» |
| «reference.typeName()» «selector().id()» = («reference.typeName()») object; |
| «EXPAND metaabm::tmpl::Java::Block ({}, false, true)-» |
| «ELSE-» |
| HostCell «selector().id()»Cell = (HostCell) object; |
| if («selector().id()»Cell.getOccupant() instanceof «reference.typeName()») { |
| «reference.typeName()» «selector().id()» = («reference.typeName()») «selector().id()»Cell.getOccupant(); |
| «EXPAND metaabm::tmpl::Java::Block ({}, false, true)-»} |
| «ENDIF-» |
| «ENDDEFINE» |
| «DEFINE DrawStyle FOR IAct-»«ENDDEFINE» |
| «DEFINE DrawStyle FOR AGroup-» |
| «EXPAND DrawStyle FOREACH roots-» |
| «ENDDEFINE» |
| |
| «AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AEvaluate-» |
| «IF function.id() == "graphicFill" || function.id() == "graphicOutline"-» |
| «LET lastEval(path, "shape") AS shape-» |
| «LET lastEval(path, "color") AS color-» |
| «IF shape.function.id() == "shapeRectangle" && lastEval(path, "graphic") == null-» |
| if (figure == null) { |
| figure = Shapes.createRectangle(); |
| } |
| «ELSEIF shape.function.id() == "shapeOval" && lastEval(path, "graphic") == null-» |
| if (figure == null) { |
| figure = Shapes.createOval(); |
| } |
| «ELSEIF shape.function.id().startsWith("shapeMarker")-» |
| IFigure markerFigure = Shapes.getMarkerShape(figure, 0); |
| «ENDIF-» |
| color = «EXPAND metaabm::tmpl::Java::FunctionInnerBlock(path, inner) FOR color-»; |
| «LET lastEval(path, "shape").function.id().startsWith("shapeMarker") ? "markerFigure" : "figure" AS figureName» |
| «IF function.id().startsWith("graphicFill")-» |
| «figureName».setBackgroundColor(color); |
| ((Shape) «figureName»).setFill(true); |
| «ELSEIF function.id().startsWith("graphicOutline")-» |
| «figureName».setForegroundColor(color); |
| ((Shape) «figureName»).setOutline(true); |
| «ENDIF-» |
| «ENDLET-» |
| «ENDLET-» |
| «ENDLET-» |
| «ELSEIF !function.id().startsWith("color") && !function.id().startsWith("shape")-» |
| «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"-» |
| new Color(Display.getCurrent(), (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» |