package org.archstudio.bna.logics.coordinating; import org.archstudio.bna.IBNAModelListener; import org.archstudio.bna.IBNAWorld; import org.archstudio.bna.IThing; import org.archstudio.bna.facets.IHasBoundingBox; import org.archstudio.bna.keys.IThingKey; import org.archstudio.bna.keys.IThingRefKey; import org.archstudio.bna.keys.ThingRefKey; import org.archstudio.bna.logics.AbstractKeyCoordinatingThingLogic; import org.archstudio.bna.things.labels.DirectionalLabelThing; import org.archstudio.bna.utils.BNAUtils; public class ReorientDirectionalLabelToThingIDLogic extends AbstractKeyCoordinatingThingLogic implements IBNAModelListener { private static final IThingRefKey<IHasBoundingBox> REORIENT_TO_THING_ID_KEY = ThingRefKey .create(ReorientDirectionalLabelToThingIDLogic.class); protected final OrientDirectionalLabelLogic orientLogic; public ReorientDirectionalLabelToThingIDLogic(IBNAWorld world) { super(world, false); orientLogic = logics.addThingLogic(OrientDirectionalLabelLogic.class); track(REORIENT_TO_THING_ID_KEY); } public IThingRefKey<IHasBoundingBox> getReorientToThingKey() { BNAUtils.checkLock(); return REORIENT_TO_THING_ID_KEY; } @Override protected void update(IThing thing, IThingKey<?> key) { if (thing instanceof DirectionalLabelThing) { IHasBoundingBox rectangleThing = REORIENT_TO_THING_ID_KEY.get(thing, model); if (rectangleThing != null) { orientLogic.orient(rectangleThing, (DirectionalLabelThing) thing); } else { orientLogic.unorient(thing); } } } }