package org.archstudio.archipelago2.ext.structures; import java.util.Map; import org.archstudio.archipelago2.Activator; import org.archstudio.archipelago2.MyxRegistryToProxyLogicDelegate; import org.archstudio.archipelago2.ext.statecharts.logics.UpdateStatechartSpecLogic; import org.archstudio.archipelago2.ext.structures.logics.AssignMyxGenLogic; import org.archstudio.archipelago2.ext.structures.logics.MapComponentLogic; import org.archstudio.archipelago2.ext.structures.logics.MapConnectorLogic; import org.archstudio.archipelago2.ext.structures.logics.MapInterfaceLogic; import org.archstudio.archipelago2.ext.structures.logics.MapLinkLogic; import org.archstudio.archipelago2.ext.structures.logics.MapMappingsLogic; import org.archstudio.archipelago2.ext.structures.logics.NewElementLogic; import org.archstudio.archipelago2.ext.structures.logics.UpdateSubStructureLogic; import org.archstudio.bna.IBNAWorld; import org.archstudio.bna.IThingLogicManager; import org.archstudio.bna.facets.IHasEndpoints; import org.archstudio.bna.logics.AbstractThingLogic; import org.archstudio.bna.logics.background.LifeSapperLogic; import org.archstudio.bna.logics.background.RotatingOffsetLogic; import org.archstudio.bna.logics.editing.AlignAndDistributeLogic; import org.archstudio.bna.logics.editing.ClickSelectionLogic; import org.archstudio.bna.logics.editing.DragMovableLogic; import org.archstudio.bna.logics.editing.EditColorLogic; import org.archstudio.bna.logics.editing.EditFlowLogic; import org.archstudio.bna.logics.editing.EditTextLogic; import org.archstudio.bna.logics.editing.ExportImageLogic; import org.archstudio.bna.logics.editing.KeyNudgerLogic; import org.archstudio.bna.logics.editing.MarqueeSelectionLogic; import org.archstudio.bna.logics.editing.RectifyToGridLogic; import org.archstudio.bna.logics.editing.ReshapeRectangleLogic; import org.archstudio.bna.logics.editing.ReshapeSplineLogic; import org.archstudio.bna.logics.editing.RestoreDefaultsLogic; import org.archstudio.bna.logics.editing.RotaterLogic; import org.archstudio.bna.logics.editing.ShowHideTagsLogic; import org.archstudio.bna.logics.editing.SnapToGridLogic; import org.archstudio.bna.logics.editing.StandardCursorLogic; import org.archstudio.bna.logics.events.ListenToSubWorldEventsLogic; import org.archstudio.bna.logics.events.ProxyLogic; import org.archstudio.bna.logics.hints.SynchronizeHintsLogic; import org.archstudio.bna.logics.information.HighlightLogic; import org.archstudio.bna.logics.information.ToolTipLogic; import org.archstudio.bna.logics.navigating.PanAndZoomLogic; import org.archstudio.bna.logics.navigating.ViewAllLogic; import org.archstudio.bna.things.utility.EnvironmentPropertiesThing; import org.archstudio.bna.things.utility.GridThing; import org.archstudio.bna.things.utility.ShadowThing; import org.archstudio.bna.utils.DefaultBNAModel; import org.archstudio.bna.utils.DefaultBNAWorld; import org.archstudio.utils.bna.dot.ExportImportDot; import org.archstudio.utils.bna.gexf.ExportImportGexf; import org.archstudio.xadl.bna.facets.IHasObjRef; import org.archstudio.xadl.bna.facets.IHasXArchID; import org.archstudio.xadl.bna.logics.editing.RemoveElementLogic; import org.archstudio.xadl.bna.logics.editing.XadlCopyPasteLogic; import org.archstudio.xadl.bna.logics.editing.XadlReshapeSplineGuide; import org.archstudio.xadl.bna.logics.hints.XadlHintRepository; import org.archstudio.xadl3.structure_3_0.Structure_3_0Package; import org.archstudio.xarchadt.IXArchADT; import org.archstudio.xarchadt.ObjRef; import com.google.common.collect.MapMaker; public class StructureUtils extends AbstractThingLogic { private static final Map<ObjRef, IBNAWorld> EDIT_REF_TO_WORLD = new MapMaker().softValues().makeMap(); public StructureUtils(IBNAWorld world) { super(world); } synchronized public static IBNAWorld createStructureWorld(IXArchADT xarch, ObjRef editRef) { // Retrieve existing world if it already exists. IBNAWorld world = EDIT_REF_TO_WORLD.get(editRef); if (world != null) { return world; } // It doesn't exist so create it. world = new DefaultBNAWorld(editRef.toString(), new DefaultBNAModel()); EDIT_REF_TO_WORLD.put(editRef, world); GridThing.createIn(world); ShadowThing.createIn(world); EnvironmentPropertiesThing ept = EnvironmentPropertiesThing.createIn(world); ept.set(IHasObjRef.OBJREF_KEY, editRef); ept.set(IHasXArchID.XARCH_ID_KEY, (String) xarch.get(editRef, "id")); // These logics need to be first in order to affect later logics. IThingLogicManager logics = world.getThingLogicManager(); ProxyLogic proxyLogic = logics.addThingLogic(new ProxyLogic(world, new MyxRegistryToProxyLogicDelegate(Activator.getDefault().getMyxBrick()))); logics.addThingLogic(SnapToGridLogic.class); logics.addThingLogic( new SynchronizeHintsLogic(world, proxyLogic.addObject(new XadlHintRepository(xarch)))); // Logics that map xADL elements to BNA things. logics.addThingLogic( new MapComponentLogic(world, xarch, editRef, "component", "Loading Components")); logics.addThingLogic(new MapInterfaceLogic(world, xarch, editRef, "component/interface", "Loading Component Interfaces")); logics.addThingLogic(new MapMappingsLogic(world, xarch, editRef, "component/subStructure/interfaceMapping", "Loading Component Interface Mappings")); logics.addThingLogic( new MapConnectorLogic(world, xarch, editRef, "connector", "Loading Connectors")); logics.addThingLogic(new MapInterfaceLogic(world, xarch, editRef, "connector/interface", "Loading Connector Interfaces")); logics.addThingLogic(new MapMappingsLogic(world, xarch, editRef, "connector/subStructure/interfaceMapping", "Loading Connector Interface Mappings")); logics.addThingLogic(new MapLinkLogic(world, xarch, editRef, "link", "Loading Links")); // Generic editor logics (organized alphabetically). logics.addThingLogic(ClickSelectionLogic.class); logics.addThingLogic(DragMovableLogic.class); logics.addThingLogic(ExportImageLogic.class); logics.addThingLogic(KeyNudgerLogic.class); logics.addThingLogic(LifeSapperLogic.class); logics.addThingLogic(ListenToSubWorldEventsLogic.class); logics.addThingLogic(MarqueeSelectionLogic.class); logics.addThingLogic(PanAndZoomLogic.class); logics.addThingLogic(ReshapeRectangleLogic.class); logics.addThingLogic(ReshapeSplineLogic.class) .addReshapeSplineGuides(new XadlReshapeSplineGuide(xarch, Structure_3_0Package.Literals.LINK, Structure_3_0Package.Literals.INTERFACE, IHasEndpoints.ENDPOINT_1_KEY, IHasEndpoints.ENDPOINT_2_KEY)); logics.addThingLogic(RotatingOffsetLogic.class); logics.addThingLogic(StandardCursorLogic.class); logics.addThingLogic(ToolTipLogic.class); // Menu logics, order determines menu order. logics.addThingLogic(new NewElementLogic(world, xarch, editRef)); logics.addThingLogic(new UpdateSubStructureLogic(world, xarch)); logics.addThingLogic(new UpdateStatechartSpecLogic(world, xarch)); logics.addThingLogic(new XadlCopyPasteLogic(world, xarch)); logics.addThingLogic(new RemoveElementLogic(world, xarch)); logics.addThingLogic(new AssignMyxGenLogic(world, xarch)); logics.addThingLogic(EditTextLogic.class); logics.addThingLogic(EditFlowLogic.class); logics.addThingLogic(EditColorLogic.class); logics.addThingLogic(HighlightLogic.class); logics.addThingLogic(RestoreDefaultsLogic.class); logics.addThingLogic(ShowHideTagsLogic.class); logics.addThingLogic(RotaterLogic.class); logics.addThingLogic(AlignAndDistributeLogic.class); logics.addThingLogic(RectifyToGridLogic.class); logics.addThingLogic(ExportImportDot.class); logics.addThingLogic(ExportImportGexf.class); logics.addThingLogic(ViewAllLogic.class); logics.addThingLogic(ExportImageLogic.class); return world; } }