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%2FdiagramEditor%2FDiagramViewer.java;h=a0f504030675d1b9129a6548550ef524b8f762fe;hp=e773a7a639b181cd46c1cce60d2794eae9c9dc52;hb=55d1e6f63df516019032ebf0c1e9c8c0495a619d;hpb=ceff53434e48f94c5d84ce12f3b1e21cabda457b diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewer.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewer.java index e773a7a63..a0f504030 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewer.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2013 Association for Decentralized Information Management + * Copyright (c) 2007, 2019 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 @@ -8,7 +8,7 @@ * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation - * Semantum Oy - issue #4384 + * Semantum Oy - issue #4384, gitlab #399 *******************************************************************************/ package org.simantics.modeling.ui.diagramEditor; @@ -41,9 +41,11 @@ import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.WriteGraph; import org.simantics.db.common.primitiverequest.PossibleAdapter; +import org.simantics.db.common.primitiverequest.PossibleObject; import org.simantics.db.common.procedure.adapter.ListenerDelegate; import org.simantics.db.common.procedure.adapter.ListenerSupport; import org.simantics.db.common.request.ParametrizedRead; +import org.simantics.db.common.request.TypeURIs; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.common.utils.CommonDBUtils; import org.simantics.db.common.utils.TagUtil; @@ -104,6 +106,7 @@ 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.ElementUtils; import org.simantics.g2d.element.IElement; import org.simantics.g2d.element.IElementClassProvider; import org.simantics.g2d.element.handler.impl.StaticObjectAdapter; @@ -184,7 +187,7 @@ public class DiagramViewer void doSetTitleToolTip(String name); } - public static final String DIAGRAMMING_CONTEXT = "org.simantics.modeling.ui.diagramming"; //$NON-NLS-1$ + public static final String DIAGRAMMING_CONTEXT = "org.simantics.modeling.ui.diagramming"; //$NON-NLS-1$ private static final String PREFERENCE_VIRTUAL_GRAPH = "preferences"; //$NON-NLS-1$ private static final boolean PROFILE = false; @@ -233,6 +236,7 @@ public class DiagramViewer protected GridSnapAdvisor snapAdvisor; private RuntimeDiagramManager runtimeDiagramManager; + private HasDiagramSourceListener hasDiagramSourceListener; /** * Set externally in @@ -631,14 +635,35 @@ public class DiagramViewer * @throws DatabaseException */ protected IDiagram loadDiagram(IProgressMonitor monitor, Resource diagram, IHintContext initialHints) throws DatabaseException { - RuntimeDiagramManager rtdm = runtimeDiagramManager; - Resource runtimeDiagram = rtdm != null ? rtdm.getRuntimeDiagram() : null; - IDiagramLoader loader = synchronizer; - if (rtdm == null || runtimeDiagram == null || loader == null) - return null; - IDiagram d = sessionContext.getSession().syncRequest( - DiagramRequests.loadDiagram(monitor, getResourceInput2().getModel(null), diagram, - runtimeDiagram, null, loader, initialHints)); + RuntimeDiagramManager rtdm = runtimeDiagramManager; + Resource runtimeDiagram = rtdm != null ? rtdm.getRuntimeDiagram() : null; + IDiagramLoader loader = synchronizer; + if (rtdm == null || runtimeDiagram == null || loader == null) + return null; + IDiagram d = sessionContext.getSession().syncRequest((Read) graph -> { + IDiagram result = DiagramRequests.loadDiagram(monitor, getResourceInput2().getModel(null), diagram, + runtimeDiagram, null, loader, initialHints).perform(graph); + + // #399: Enable certain PropertyTester implementation without database transactions + ModelingResources MOD = ModelingResources.getInstance(graph); + Resource composite = graph.getPossibleObject(diagram, MOD.DiagramToComposite); + result.setHint( + DiagramModelHints.KEY_DIAGRAM_RESOURCE_TYPE_URIS, + graph.syncRequest(new TypeURIs(diagram))); + result.setHint( + DiagramModelHints.KEY_MAPPED_COMPOSITE_RESOURCE_TYPE_URIS, + composite != null ? graph.syncRequest(new TypeURIs(composite)) : Collections.emptySet()); + + Resource diagramSource = graph.syncRequest( + new PossibleObject(diagram, MOD.HasDiagramSource), + hasDiagramSourceListener = new HasDiagramSourceListener(sourceDiagramContainer)); + ElementUtils.setOrRemoveHint( + result, + DiagramModelHints.KEY_HAS_DIAGRAM_SOURCE, + diagramSource); + + return result; + }); return d; } @@ -923,6 +948,12 @@ public class DiagramViewer } disposed = true; + + if (hasDiagramSourceListener != null) { + hasDiagramSourceListener.dispose(); + hasDiagramSourceListener = null; + } + if (activation != null) { activation.deactivate(); activation = null;