X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2Fsg%2FDiagramSceneGraphProvider.java;h=61305ade0c58e8bc8162ff5308e34b3e1dbf3ffe;hp=21a8057aee6a403d7aec7b474dacf04c4cffddb4;hb=e353ca45b2ad3ce36ea48336feca56e86ad0b089;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/sg/DiagramSceneGraphProvider.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/sg/DiagramSceneGraphProvider.java index 21a8057ae..61305ade0 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/sg/DiagramSceneGraphProvider.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/sg/DiagramSceneGraphProvider.java @@ -1,103 +1,103 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ package org.simantics.modeling.ui.sg; -import java.awt.Color; -import java.awt.event.AWTEventListener; - -import org.eclipse.core.runtime.NullProgressMonitor; -import org.simantics.Simantics; -import org.simantics.databoard.Bindings; -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.common.ResourceArray; -import org.simantics.db.common.primitiverequest.PossibleAdapter; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.exception.ManyObjectsForFunctionalRelationException; -import org.simantics.db.exception.NoSingleResultException; -import org.simantics.db.exception.ServiceException; -import org.simantics.db.management.ISessionContext; -import org.simantics.db.request.Read; -import org.simantics.diagram.adapter.DefaultConnectionClassFactory; -import org.simantics.diagram.adapter.FlagClassFactory; -import org.simantics.diagram.adapter.GraphToDiagramSynchronizer; -import org.simantics.diagram.handler.CopyPasteHandler; -import org.simantics.diagram.handler.CopyPasteStrategy; -import org.simantics.diagram.handler.DefaultCopyPasteStrategy; -import org.simantics.diagram.handler.DeleteHandler; -import org.simantics.diagram.handler.SimpleElementTransformHandler; -import org.simantics.diagram.query.DiagramRequests; -import org.simantics.diagram.runtime.RuntimeDiagramManager; -import org.simantics.diagram.stubs.DiagramResource; -import org.simantics.diagram.synchronization.CopyAdvisor; -import org.simantics.diagram.synchronization.SynchronizationHints; -import org.simantics.diagram.ui.DiagramModelHints; -import org.simantics.g2d.canvas.Hints; -import org.simantics.g2d.canvas.ICanvasContext; -import org.simantics.g2d.canvas.impl.CanvasContext; -import org.simantics.g2d.diagram.DiagramHints; -import org.simantics.g2d.diagram.IDiagram; -import org.simantics.g2d.diagram.participant.DiagramParticipant; -import org.simantics.g2d.diagram.participant.ElementInteractor; -import org.simantics.g2d.diagram.participant.ElementPainter; -import org.simantics.g2d.diagram.participant.Selection; -import org.simantics.g2d.diagram.participant.ZOrderHandler; -import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor; -import org.simantics.g2d.element.ElementClassProviders; -import org.simantics.g2d.element.ElementClasses; -import org.simantics.g2d.element.handler.impl.StaticObjectAdapter; -import org.simantics.g2d.multileveldiagram.TransitionFunction; -import org.simantics.g2d.multileveldiagram.ZoomTransitionParticipant; -import org.simantics.g2d.page.DiagramDesc; -import org.simantics.g2d.participant.BackgroundPainter; -import org.simantics.g2d.participant.CanvasBoundsParticipant; -import org.simantics.g2d.participant.CanvasGrab; -import org.simantics.g2d.participant.GridPainter; -import org.simantics.g2d.participant.KeyToCommand; -import org.simantics.g2d.participant.KeyUtil; -import org.simantics.g2d.participant.MouseUtil; -import org.simantics.g2d.participant.MultitouchPanZoomRotateInteractor; -import org.simantics.g2d.participant.Notifications; -import org.simantics.g2d.participant.PageBorderParticipant; -import org.simantics.g2d.participant.PanZoomRotateHandler; -import org.simantics.g2d.participant.PointerPainter; -import org.simantics.g2d.participant.RulerPainter; -import org.simantics.g2d.participant.SymbolUtil; -import org.simantics.g2d.participant.TimeParticipant; -import org.simantics.g2d.participant.TransformUtil; -import org.simantics.g2d.participant.ZoomToAreaHandler; -import org.simantics.g2d.scenegraph.ICanvasSceneGraphProvider; -import org.simantics.modeling.ModelingResources; -import org.simantics.modeling.mapping.ComponentCopyAdvisor; -import org.simantics.modeling.mapping.ElementCopyAdvisor; -import org.simantics.modeling.mapping.MappedElementCopyAdvisor; -import org.simantics.modeling.mapping.ModelingSynchronizationHints; -import org.simantics.modeling.ui.diagramEditor.PopulateElementDropParticipant; -import org.simantics.modeling.ui.diagramEditor.PopulateElementMonitorDropParticipant; -import org.simantics.modeling.ui.diagramEditor.handlers.HeadlessStructuralBrowsingHandler; -import org.simantics.modeling.ui.diagramEditor.handlers.HeadlessStructuralBrowsingHandler.IDiagramUpdateSupport; -import org.simantics.scenegraph.g2d.G2DSceneGraph; -import org.simantics.scenegraph.g2d.events.adapter.AWTRemoteEventAdapter; -import org.simantics.scenegraph.g2d.events.command.CommandKeyBinding; -import org.simantics.structural.stubs.StructuralResource2; -import org.simantics.structural2.modelingRules.IModelingRules; -import org.simantics.ui.SimanticsUI; -import org.simantics.utils.datastructures.hints.HintContext; -import org.simantics.utils.datastructures.hints.IHintContext; -import org.simantics.utils.page.PageDesc; -import org.simantics.utils.page.PageOrientation; -import org.simantics.utils.threads.AWTThread; -import org.simantics.utils.threads.IThreadWorkQueue; -import org.simantics.utils.ui.ErrorLogger; +import java.awt.Color; +import java.awt.event.AWTEventListener; + +import org.eclipse.core.runtime.NullProgressMonitor; +import org.simantics.Simantics; +import org.simantics.databoard.Bindings; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.ResourceArray; +import org.simantics.db.common.primitiverequest.PossibleAdapter; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.exception.ManyObjectsForFunctionalRelationException; +import org.simantics.db.exception.NoSingleResultException; +import org.simantics.db.exception.ServiceException; +import org.simantics.db.management.ISessionContext; +import org.simantics.db.request.Read; +import org.simantics.diagram.adapter.DefaultConnectionClassFactory; +import org.simantics.diagram.adapter.FlagClassFactory; +import org.simantics.diagram.adapter.GraphToDiagramSynchronizer; +import org.simantics.diagram.handler.CopyPasteHandler; +import org.simantics.diagram.handler.CopyPasteStrategy; +import org.simantics.diagram.handler.DefaultCopyPasteStrategy; +import org.simantics.diagram.handler.DeleteHandler; +import org.simantics.diagram.handler.SimpleElementTransformHandler; +import org.simantics.diagram.query.DiagramRequests; +import org.simantics.diagram.runtime.RuntimeDiagramManager; +import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.diagram.synchronization.CopyAdvisor; +import org.simantics.diagram.synchronization.SynchronizationHints; +import org.simantics.diagram.ui.DiagramModelHints; +import org.simantics.g2d.canvas.Hints; +import org.simantics.g2d.canvas.ICanvasContext; +import org.simantics.g2d.canvas.impl.CanvasContext; +import org.simantics.g2d.diagram.DiagramHints; +import org.simantics.g2d.diagram.IDiagram; +import org.simantics.g2d.diagram.participant.DiagramParticipant; +import org.simantics.g2d.diagram.participant.ElementInteractor; +import org.simantics.g2d.diagram.participant.ElementPainter; +import org.simantics.g2d.diagram.participant.Selection; +import org.simantics.g2d.diagram.participant.ZOrderHandler; +import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor; +import org.simantics.g2d.element.ElementClassProviders; +import org.simantics.g2d.element.ElementClasses; +import org.simantics.g2d.element.handler.impl.StaticObjectAdapter; +import org.simantics.g2d.multileveldiagram.TransitionFunction; +import org.simantics.g2d.multileveldiagram.ZoomTransitionParticipant; +import org.simantics.g2d.page.DiagramDesc; +import org.simantics.g2d.participant.BackgroundPainter; +import org.simantics.g2d.participant.CanvasBoundsParticipant; +import org.simantics.g2d.participant.CanvasGrab; +import org.simantics.g2d.participant.GridPainter; +import org.simantics.g2d.participant.KeyToCommand; +import org.simantics.g2d.participant.KeyUtil; +import org.simantics.g2d.participant.MouseUtil; +import org.simantics.g2d.participant.MultitouchPanZoomRotateInteractor; +import org.simantics.g2d.participant.Notifications; +import org.simantics.g2d.participant.PageBorderParticipant; +import org.simantics.g2d.participant.PanZoomRotateHandler; +import org.simantics.g2d.participant.PointerPainter; +import org.simantics.g2d.participant.RulerPainter; +import org.simantics.g2d.participant.SymbolUtil; +import org.simantics.g2d.participant.TimeParticipant; +import org.simantics.g2d.participant.TransformUtil; +import org.simantics.g2d.participant.ZoomToAreaHandler; +import org.simantics.g2d.scenegraph.ICanvasSceneGraphProvider; +import org.simantics.modeling.ModelingResources; +import org.simantics.modeling.mapping.ComponentCopyAdvisor; +import org.simantics.modeling.mapping.ElementCopyAdvisor; +import org.simantics.modeling.mapping.MappedElementCopyAdvisor; +import org.simantics.modeling.mapping.ModelingSynchronizationHints; +import org.simantics.modeling.ui.diagramEditor.PopulateElementDropParticipant; +import org.simantics.modeling.ui.diagramEditor.PopulateElementMonitorDropParticipant; +import org.simantics.modeling.ui.diagramEditor.handlers.HeadlessStructuralBrowsingHandler; +import org.simantics.modeling.ui.diagramEditor.handlers.HeadlessStructuralBrowsingHandler.IDiagramUpdateSupport; +import org.simantics.scenegraph.g2d.G2DSceneGraph; +import org.simantics.scenegraph.g2d.events.adapter.AWTRemoteEventAdapter; +import org.simantics.scenegraph.g2d.events.command.CommandKeyBinding; +import org.simantics.structural.stubs.StructuralResource2; +import org.simantics.structural2.modelingRules.IModelingRules; +import org.simantics.ui.SimanticsUI; +import org.simantics.utils.datastructures.hints.HintContext; +import org.simantics.utils.datastructures.hints.IHintContext; +import org.simantics.utils.page.PageDesc; +import org.simantics.utils.page.PageOrientation; +import org.simantics.utils.threads.AWTThread; +import org.simantics.utils.threads.IThreadWorkQueue; +import org.simantics.utils.ui.ErrorLogger; /** @@ -108,57 +108,57 @@ import org.simantics.utils.ui.ErrorLogger; * */ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDiagramUpdateSupport { - + protected boolean isSymbol = false; protected Resource resource; protected ResourceArray structuralPath = null; protected IDiagram diagram = null; - protected CanvasContext ctx = null; + protected CanvasContext ctx = null; protected boolean ownsContext = false; protected GraphToDiagramSynchronizer synchronizer = null; protected String view = null; protected Boolean navigation = null; protected AWTRemoteEventAdapter listener = null; - - final IHintContext initialHints = new HintContext(); - public DiagramSceneGraphProvider(ReadGraph g, final Resource diagramOrComposite) { + final IHintContext initialHints = new HintContext(); + + public DiagramSceneGraphProvider(ReadGraph g, final Resource diagramOrComposite) { this.structuralPath = new ResourceArray(); - try { - - StructuralResource2 sr = StructuralResource2.getInstance(g); - DiagramResource DIA = DiagramResource.getInstance(g); - - Resource diagram = diagramOrComposite; - if(!g.isInstanceOf(diagram, DIA.Composite)) { - - ModelingResources mr = ModelingResources.getInstance(g); - diagram = g.getPossibleObject(diagramOrComposite, mr.CompositeToDiagram); - if(diagram == null) { - // looks like we have a component without direct relation to composite.. try to solve this - // FIXME: use adapter to get composite directly from resource - final Resource type = g.getSingleType(diagramOrComposite, sr.Component); - if (type == null) - return; - - final Resource definedBy = g.getPossibleObject(type, sr.IsDefinedBy); - if (definedBy == null) - return; - - this.structuralPath = new ResourceArray(diagramOrComposite); - diagram = g.getPossibleObject(definedBy, mr.CompositeToDiagram); - } - - } else { - - Resource possibleSymbol = g.getPossibleObject(diagram, sr.Defines); - if(possibleSymbol != null && g.isInstanceOf(possibleSymbol, DIA.ElementClass)) isSymbol = true; - - } - - this.resource = diagram; - + try { + + StructuralResource2 sr = StructuralResource2.getInstance(g); + DiagramResource DIA = DiagramResource.getInstance(g); + + Resource diagram = diagramOrComposite; + if(!g.isInstanceOf(diagram, DIA.Composite)) { + + ModelingResources mr = ModelingResources.getInstance(g); + diagram = g.getPossibleObject(diagramOrComposite, mr.CompositeToDiagram); + if(diagram == null) { + // looks like we have a component without direct relation to composite.. try to solve this + // FIXME: use adapter to get composite directly from resource + final Resource type = g.getSingleType(diagramOrComposite, sr.Component); + if (type == null) + return; + + final Resource definedBy = g.getPossibleObject(type, sr.IsDefinedBy); + if (definedBy == null) + return; + + this.structuralPath = new ResourceArray(diagramOrComposite); + diagram = g.getPossibleObject(definedBy, mr.CompositeToDiagram); + } + + } else { + + Resource possibleSymbol = g.getPossibleObject(diagram, sr.Defines); + if(possibleSymbol != null && g.isInstanceOf(possibleSymbol, DIA.ElementClass)) isSymbol = true; + + } + + this.resource = diagram; + } catch (ManyObjectsForFunctionalRelationException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -170,32 +170,36 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi e.printStackTrace(); } } - - protected CopyPasteStrategy getCopyPasteStrategy() { - try { - CopyPasteStrategy cpStrategy = Simantics.getSession().syncRequest(new PossibleAdapter(resource, CopyPasteStrategy.class)); - if(cpStrategy != null) return cpStrategy; - } catch (DatabaseException e) { - } - return new DefaultCopyPasteStrategy(); - } - - protected CopyAdvisor getCopyAdvisor() { - try { - CopyAdvisor advisor = Simantics.getSession().syncRequest(new PossibleAdapter(resource, CopyAdvisor.class)); - if(advisor != null) return advisor; - } catch (DatabaseException e) { - } - return new MappedElementCopyAdvisor(new ElementCopyAdvisor(), new ComponentCopyAdvisor()); - } + + public GraphToDiagramSynchronizer getGraphToDiagramSynchronizer() { + return synchronizer; + } + + protected CopyPasteStrategy getCopyPasteStrategy() { + try { + CopyPasteStrategy cpStrategy = Simantics.getSession().syncRequest(new PossibleAdapter(resource, CopyPasteStrategy.class)); + if(cpStrategy != null) return cpStrategy; + } catch (DatabaseException e) { + } + return new DefaultCopyPasteStrategy(); + } - private void initContext(CanvasContext ctx) { - boolean unlock = false; + protected CopyAdvisor getCopyAdvisor() { + try { + CopyAdvisor advisor = Simantics.getSession().syncRequest(new PossibleAdapter(resource, CopyAdvisor.class)); + if(advisor != null) return advisor; + } catch (DatabaseException e) { + } + return new MappedElementCopyAdvisor(new ElementCopyAdvisor(), new ComponentCopyAdvisor()); + } + + protected void initContext(CanvasContext ctx) { + boolean unlock = false; if (!ctx.isLocked()) { - ctx.setLocked(true); - unlock = true; - } - + ctx.setLocked(true); + unlock = true; + } + IHintContext h = ctx.getDefaultHintContext(); // Support & Util Participants @@ -212,12 +216,12 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi //ctx.add( new SGFocusParticipant() ); h.setHint(PointerPainter.KEY_PAINT_POINTER, true); - + ctx.add( new PanZoomRotateHandler(navigation == null || navigation == true) ); ctx.add( new MultitouchPanZoomRotateInteractor() ); ctx.add( new ZoomToAreaHandler() ); ctx.add( new SimpleElementTransformHandler() ); - + // Key bindings if(navigation == null || navigation == true) ctx.add( new KeyToCommand( CommandKeyBinding.DEFAULT_BINDINGS ) ); @@ -228,12 +232,12 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi ctx.add( new GridPainter() ); ctx.add( new RulerPainter() ); - ctx.add( new BackgroundPainter() ); + ctx.add( new BackgroundPainter() ); - h.setHint(Hints.KEY_DISPLAY_PAGE, Boolean.FALSE); - h.setHint(Hints.KEY_DISPLAY_MARGINS, Boolean.TRUE); + h.setHint(Hints.KEY_DISPLAY_PAGE, Boolean.FALSE); + h.setHint(Hints.KEY_DISPLAY_MARGINS, Boolean.TRUE); ctx.add( new PageBorderParticipant() ); - + h.setHint(Hints.KEY_GRID_COLOR, new Color(0.95f, 0.95f, 0.95f)); h.setHint(Hints.KEY_BACKGROUND_COLOR, Color.WHITE); h.setHint(RulerPainter.KEY_RULER_BACKGROUND_COLOR, new Color(0.9f, 0.9f, 0.9f, 0.75f)); @@ -244,7 +248,7 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi ctx.add( new ElementInteractor() ); ctx.add( new Selection() ); ctx.add( new DiagramParticipant() ); - ctx.add( new ElementPainter(false) ); + ctx.add( new ElementPainter(true) ); //ctx.add( new ElementHeartbeater() ); ctx.add( new ZOrderHandler() ); @@ -267,93 +271,93 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi PageDesc pageDesc = PageDesc.DEFAULT.withOrientation(PageOrientation.Landscape); // TODO: load page desc from graph h.setHint(Hints.KEY_PAGE_DESC, pageDesc); - - ctx.add(new CopyPasteHandler(getCopyPasteStrategy())); - ctx.add(new DeleteHandler(null)); - - if (resource != null) - loadPageSettings(ctx, resource); - - ctx.assertParticipantDependencies(); + + ctx.add(new CopyPasteHandler(getCopyPasteStrategy())); + ctx.add(new DeleteHandler(null)); + + if (resource != null) + loadPageSettings(ctx, resource); + + ctx.assertParticipantDependencies(); if (unlock) - ctx.setLocked(false); + ctx.setLocked(false); + } + + protected void loadPageSettings(ICanvasContext ctx, Resource diagramResource) { + try { + DiagramDesc diagramDesc = Simantics.getSession().syncRequest(DiagramRequests.getDiagramDesc(diagramResource)); + if (diagramDesc != null) + setDiagramDesc(ctx, diagramDesc); + } catch (DatabaseException e) { + ErrorLogger.defaultLogError(e); + } + } + + protected void setDiagramDesc(ICanvasContext ctx, DiagramDesc diagramDesc) { + IHintContext hints = ctx.getDefaultHintContext(); + hints.setHint(Hints.KEY_PAGE_DESC, diagramDesc.getPageDesc()); + //hints.setHint(Hints.KEY_DISPLAY_PAGE, diagramDesc.isPageBordersVisible()); + hints.setHint(Hints.KEY_DISPLAY_MARGINS, diagramDesc.isMarginsVisible()); } - - protected void loadPageSettings(ICanvasContext ctx, Resource diagramResource) { - try { - DiagramDesc diagramDesc = Simantics.getSession().syncRequest(DiagramRequests.getDiagramDesc(diagramResource)); - if (diagramDesc != null) - setDiagramDesc(ctx, diagramDesc); - } catch (DatabaseException e) { - ErrorLogger.defaultLogError(e); - } - } - - protected void setDiagramDesc(ICanvasContext ctx, DiagramDesc diagramDesc) { - IHintContext hints = ctx.getDefaultHintContext(); - hints.setHint(Hints.KEY_PAGE_DESC, diagramDesc.getPageDesc()); - //hints.setHint(Hints.KEY_DISPLAY_PAGE, diagramDesc.isPageBordersVisible()); - hints.setHint(Hints.KEY_DISPLAY_MARGINS, diagramDesc.isMarginsVisible()); - } @Override public G2DSceneGraph initializeSceneGraph(G2DSceneGraph sg) { return initializeSceneGraph(sg, null); } - @Override - public G2DSceneGraph initializeSceneGraph(G2DSceneGraph sg, String view) { - return initializeSceneGraph(sg, "", "", view); - } - - @Override - public G2DSceneGraph initializeSceneGraph(G2DSceneGraph sg, String modelURI, String RVI) { - return initializeSceneGraph(sg, modelURI, RVI, ""); - } - - @Override - public G2DSceneGraph initializeSceneGraph(ICanvasContext context, String modelURI, String RVI) { - G2DSceneGraph sg = context.getSceneGraph(); - return initializeSceneGraph(context, sg, modelURI, RVI, ""); - } - - /** - * @param sg - * @param view - * @param initialHints - * @return - */ - private G2DSceneGraph initializeSceneGraph(G2DSceneGraph sg, String modelURI, String RVI, String view) { - IThreadWorkQueue thread = AWTThread.getThreadAccess(); - ctx = new CanvasContext(thread, sg); // By giving the scene graph instance as parameter, we can use external serializer - return initializeSceneGraph(ctx, sg, modelURI, RVI, view); - } - + @Override + public G2DSceneGraph initializeSceneGraph(G2DSceneGraph sg, String view) { + return initializeSceneGraph(sg, "", "", view); + } + + @Override + public G2DSceneGraph initializeSceneGraph(G2DSceneGraph sg, String modelURI, String RVI) { + return initializeSceneGraph(sg, modelURI, RVI, ""); + } + + @Override + public G2DSceneGraph initializeSceneGraph(ICanvasContext context, String modelURI, String RVI) { + G2DSceneGraph sg = context.getSceneGraph(); + return initializeSceneGraph(context, sg, modelURI, RVI, ""); + } + + /** + * @param sg + * @param view + * @param initialHints + * @return + */ + private G2DSceneGraph initializeSceneGraph(G2DSceneGraph sg, String modelURI, String RVI, String view) { + IThreadWorkQueue thread = AWTThread.getThreadAccess(); + ctx = new CanvasContext(thread, sg); // By giving the scene graph instance as parameter, we can use external serializer + return initializeSceneGraph(ctx, sg, modelURI, RVI, view); + } + /** * @param sg * @param view * @param initialHints * @return */ - private G2DSceneGraph initializeSceneGraph(ICanvasContext context, G2DSceneGraph sg, String modelURI, String RVI, String view) { - this.ctx = (CanvasContext) context; + private G2DSceneGraph initializeSceneGraph(ICanvasContext context, G2DSceneGraph sg, String modelURI, String RVI, String view) { + this.ctx = (CanvasContext) context; this.view = view; if(view != null) { //System.out.println("using layer '"+view+"'"); initialHints.setHint(DiagramHints.KEY_FIXED_LAYERS, new String[] { view }); } - - try { - - IModelingRules modelingRules = Simantics.getSession().syncRequest(DiagramRequests.getModelingRules(resource, null)); - if (modelingRules != null) { - initialHints.setHint(DiagramModelHints.KEY_MODELING_RULES, modelingRules); - } - - initialHints.setHint(SynchronizationHints.COPY_ADVISOR, getCopyAdvisor()); + + try { + + IModelingRules modelingRules = Simantics.getSession().syncRequest(DiagramRequests.getModelingRules(resource, null)); + if (modelingRules != null) { + initialHints.setHint(DiagramModelHints.KEY_MODELING_RULES, modelingRules); + } + + initialHints.setHint(SynchronizationHints.COPY_ADVISOR, getCopyAdvisor()); + + final RuntimeDiagramManager runtimeDiagramManager = RuntimeDiagramManager.create(Simantics.getSession(), resource, modelURI, RVI); - final RuntimeDiagramManager runtimeDiagramManager = RuntimeDiagramManager.create(Simantics.getSession(), resource, modelURI, RVI); - synchronizer = Simantics.getSession().syncRequest(new Read() { @Override public GraphToDiagramSynchronizer perform(ReadGraph graph) throws DatabaseException { @@ -362,7 +366,7 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi if(val != null && navigation == null) { // Set only if navigation has not been set manually navigation = val; } - GraphToDiagramSynchronizer sync = new GraphToDiagramSynchronizer(graph, ctx, + GraphToDiagramSynchronizer sync = new GraphToDiagramSynchronizer(graph, ctx, ElementClassProviders.mappedProvider( ElementClasses.CONNECTION, DefaultConnectionClassFactory.CLASS.newClassWith(new StaticObjectAdapter(dr.Connection)), ElementClasses.FLAG, FlagClassFactory.createFlagClass(dr.Flag, dr.Flag_Terminal) @@ -372,31 +376,31 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi diagram = sync.loadDiagram(new NullProgressMonitor(), graph, null, resource, runtimeDiagramManager.getRuntimeDiagram(), structuralPath, initialHints); // FIXME return sync; } - }); + }); } catch (DatabaseException e) { // TODO Auto-generated catch block e.printStackTrace(); } - ctx.getDefaultHintContext().setHint(DiagramHints.KEY_DIAGRAM, diagram); - - initContext(ctx); - - return ctx.getSceneGraph(); - } - - @Override + ctx.getDefaultHintContext().setHint(DiagramHints.KEY_DIAGRAM, diagram); + + initContext(ctx); + + return ctx.getSceneGraph(); + } + + @Override public void dispose() { - if(ctx != null) { + if(ctx != null) { if (ownsContext) ctx.dispose(); ctx = null; } - if (synchronizer != null) { + if (synchronizer != null) { synchronizer.dispose(); synchronizer = null; } - if (diagram != null) { + if (diagram != null) { diagram.dispose(); diagram = null; } @@ -407,7 +411,7 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi * this method brakes the interface, but this is not intended to be used in production context * @return */ - @Override + @Override public ICanvasContext getCanvasContext() { return ctx; } @@ -431,7 +435,7 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi try { // FIXME: I have no idea if this works or not.. - diagram = SimanticsUI.getSession().syncRequest(new Read() { + diagram = Simantics.getSession().syncRequest(new Read() { @Override public IDiagram perform(ReadGraph graph) throws DatabaseException { IDiagram d = synchronizer.loadDiagram(new NullProgressMonitor(), graph, null, structuralPath.resources[0], null, structuralPath.removeFromBeginning(0), hints); @@ -444,20 +448,20 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi e.printStackTrace(); } } - - public void setExperiment(ReadGraph g, String identifier) { - if(diagram == null) return; - diagram.setHint(DiagramModelHints.KEY_ACTIVE_EXPERIMENT, identifier); - initialHints.setHint(DiagramModelHints.KEY_ACTIVE_EXPERIMENT, identifier); - -// try { -// DiagramExperiment.setActiveExperiment(g, diagram, (String)identifier); -// } catch (DatabaseException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - - } + + public void setExperiment(ReadGraph g, String identifier) { + if(diagram == null) return; + diagram.setHint(DiagramModelHints.KEY_ACTIVE_EXPERIMENT, identifier); + initialHints.setHint(DiagramModelHints.KEY_ACTIVE_EXPERIMENT, identifier); + +// try { +// DiagramExperiment.setActiveExperiment(g, diagram, (String)identifier); +// } catch (DatabaseException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } + + } /** * Supported keys: @@ -465,15 +469,15 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi * DiagramHints.KEY_NAVIGATION_ENABLED */ @Override - public void setHint(Object key, Object value) { - if(DiagramModelHints.KEY_SESSION_ID.equals(key)) { - if(diagram != null) - diagram.setHint(DiagramModelHints.KEY_SESSION_ID, value); - initialHints.setHint(DiagramModelHints.KEY_SESSION_ID, value); - } else if(DiagramModelHints.KEY_ACTIVE_EXPERIMENT.equals(key)) { + public void setHint(Object key, Object value) { + if(DiagramModelHints.KEY_SESSION_ID.equals(key)) { + if(diagram != null) + diagram.setHint(DiagramModelHints.KEY_SESSION_ID, value); + initialHints.setHint(DiagramModelHints.KEY_SESSION_ID, value); + } else if(DiagramModelHints.KEY_ACTIVE_EXPERIMENT.equals(key)) { if(diagram != null) diagram.setHint(DiagramModelHints.KEY_ACTIVE_EXPERIMENT, value); - initialHints.setHint(DiagramModelHints.KEY_ACTIVE_EXPERIMENT, value); + initialHints.setHint(DiagramModelHints.KEY_ACTIVE_EXPERIMENT, value); } else if(DiagramHints.KEY_NAVIGATION_ENABLED.equals(key)) { navigation = (Boolean)value; }