/*******************************************************************************
- * 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
*
* 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;
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;
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;
void doSetTitleToolTip(String name);
}
- public static final String DIAGRAMMING_CONTEXT = "org.simantics.modeling.ui.diagramming";
+ public static final String DIAGRAMMING_CONTEXT = "org.simantics.modeling.ui.diagramming";
private static final String PREFERENCE_VIRTUAL_GRAPH = "preferences";
private static final boolean PROFILE = false;
protected GridSnapAdvisor snapAdvisor;
private RuntimeDiagramManager runtimeDiagramManager;
+ private Resource runtimeDiagramResourceCache;
+ private HasDiagramSourceListener hasDiagramSourceListener;
/**
* Set externally in
*/
protected WorkbenchSelectionProvider selectionProvider;
- public Resource getRuntime() {
+ protected Resource getRuntimeFromManager() {
RuntimeDiagramManager rtdm = runtimeDiagramManager;
return (rtdm == null) ? null : rtdm.getRuntimeDiagram();
}
+ public Resource getRuntime() {
+ if (runtimeDiagramResourceCache != null)
+ return runtimeDiagramResourceCache;
+ runtimeDiagramResourceCache = getRuntimeFromManager();
+ return runtimeDiagramResourceCache;
+ }
+
public ParametrizedRead<IResourceEditorInput, Boolean> getInputValidator() {
return INPUT_VALIDATOR;
}
* @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<IDiagram>) 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;
}
}
disposed = true;
+
+ if (hasDiagramSourceListener != null) {
+ hasDiagramSourceListener.dispose();
+ hasDiagramSourceListener = null;
+ }
+
if (activation != null) {
activation.deactivate();
activation = null;