package org.archstudio.archipelago2.ext.statecharts; import static com.google.common.base.Preconditions.checkNotNull; import org.archstudio.bna.IBNAModel; import org.archstudio.bna.IBNAWorld; import org.archstudio.bna.IThing; import org.archstudio.bna.IThingLogicManager; import org.archstudio.bna.facets.IHasAnchorPoint; import org.archstudio.bna.facets.IHasArrowheads; import org.archstudio.bna.facets.IHasEdgeColor; import org.archstudio.bna.logics.coordinating.MirrorValueLogic; import org.archstudio.bna.logics.coordinating.OrientTextLogic; import org.archstudio.bna.things.labels.AnchoredLabelThing; import org.archstudio.bna.things.shapes.CurvedSplineThing; import org.archstudio.bna.utils.Assemblies; import org.eclipse.jdt.annotation.Nullable; public class StatechartAssemblies { public static CurvedSplineThing createTransition(IBNAWorld world, @Nullable Object id, @Nullable IThing parent) { checkNotNull(world); IBNAModel model = world.getBNAModel(); CurvedSplineThing bkg = model.addThing(new CurvedSplineThing(id), parent != null ? parent : Assemblies.getLayer(model, Assemblies.Layer.SPLINE)); AnchoredLabelThing labelThing = model.addThing(new AnchoredLabelThing(null), bkg); Assemblies.markPart(bkg, Assemblies.ANCHORED_TEXT_KEY, labelThing); IThingLogicManager tlm = world.getThingLogicManager(); MirrorValueLogic mvl = tlm.addThingLogic(MirrorValueLogic.class); OrientTextLogic otl = tlm.addThingLogic(OrientTextLogic.class); mvl.mirrorValue(bkg, IHasEdgeColor.EDGE_COLOR_KEY, labelThing, IHasArrowheads.ARROWHEAD_2_EDGE_COLOR_KEY); mvl.mirrorValue(bkg, IHasAnchorPoint.ANCHOR_POINT_KEY, labelThing); otl.orientText(bkg, labelThing, true); return bkg; } }