From: Tuukka Lehtonen Date: Wed, 17 Jun 2020 21:01:10 +0000 (+0000) Subject: Merge "NatTable based Graph Explorer styling fixes" X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=21bef5bfa30007c081028f4f40d52a20c43794ca;hp=ea1129b29fa21633cfc1df0d6a04b4bcb521b008 Merge "NatTable based Graph Explorer styling fixes" --- diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/MainProgram.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/MainProgram.java index 1e4b5cbac..52be328eb 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/MainProgram.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/MainProgram.java @@ -70,7 +70,7 @@ public class MainProgram implements Runnable, Closeable { this.updateSchedules = new ArrayList[CLUSTER_THREADS]; for(int i=0;i(); + updateSchedules[i] = new ArrayList<>(); } } @@ -93,11 +93,13 @@ public class MainProgram implements Runnable, Closeable { try { + TreeMap> updates = new TreeMap<>(clusterComparator); + main: while(alive) { - TreeMap> updates = new TreeMap>(clusterComparator); - + if (!updates.isEmpty()) + updates.clear(); operationQueue.pumpUpdates(updates); if(updates.isEmpty()) { @@ -165,6 +167,9 @@ public class MainProgram implements Runnable, Closeable { for(int i=0;i> entry : updates.entrySet()) { diff --git a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java index cc15c1eac..5d4852c0d 100644 --- a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java +++ b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java @@ -50,6 +50,7 @@ import org.simantics.db.DevelopmentKeys; import org.simantics.db.ExternalValueSupport; import org.simantics.db.ReadGraph; import org.simantics.db.RelationContext; +import org.simantics.db.RelationInfo; import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.Statement; @@ -1849,8 +1850,35 @@ public class ReadGraphImpl implements AsyncReadGraph { try { - Collection objects = getObjects(subject, relation); - return !objects.isEmpty(); + SyncReadProcedure procedure = new SyncReadProcedure(); + processor.forRelationInfo(this, relation, procedure); + Collection predicates = getPredicates(subject); + + if(procedure.result.isFinal) { + + return predicates.contains(relation); + + } else if (procedure.result.isFunctional) { + + try { + int result = processor.getSingleObject(this, subject, relation); + return result != 0; + } catch (ManyObjectsForFunctionalRelationException e) { + return true; + } catch (DatabaseException e) { + throw new ServiceException(e); + } + + } else { + + for(Resource predicate : getPredicates(subject)) { + if(isSubrelationOf(predicate, relation)) + return true; + } + + } + + return false; } catch (ServiceException e) { diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/SessionGarbageCollection.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/SessionGarbageCollection.java index c168e2286..c48ec3630 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/SessionGarbageCollection.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/SessionGarbageCollection.java @@ -76,7 +76,18 @@ public class SessionGarbageCollection { QueryControl qc = graph.getService(QueryControl.class); ClusterControl cc = graph.getService(ClusterControl.class); _monitor.beginTask("Collect clusters", IProgressMonitor.UNKNOWN); - cc.gc(graph, clusterTarget); + //cc.gc(graph, clusterTarget); + if(clusterTarget == -1) { + int used = cc.used(); + //System.err.println("session gc, cluster use = " + used); + int baseline = 32*(1<<20); + if(used > baseline) { + int dynamicTarget = (int)(0.95 * (used-baseline)) + baseline; + cc.gc(graph, dynamicTarget); + } + } else { + cc.gc(graph, clusterTarget); + } _monitor.beginTask("Collect queries", IProgressMonitor.UNKNOWN); qc.gc(graph, allowedTimeInMs); } diff --git a/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterTable.java b/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterTable.java index 200e9e3c1..efb644acd 100644 --- a/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterTable.java +++ b/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusterTable.java @@ -526,10 +526,11 @@ public final class ClusterTable implements IClusterTable { ArrayList toRelease = new ArrayList(); for (CollectorCluster cluster : support.getResidentClusters()) { - target -= support.getClusterSize(cluster); - if (target > 0) { - toRelease.add(cluster); - } else { + toRelease.add(cluster); + long clusterSize = support.getClusterSize(cluster); + //System.err.println("release cluster with " + (clusterSize/1024) + " kiB - " + cluster); + target -= clusterSize; + if (target <= 0) { break; } } diff --git a/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/AdapterRegistry2.java b/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/AdapterRegistry2.java index 0db80b1b4..e9b59023f 100644 --- a/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/AdapterRegistry2.java +++ b/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/AdapterRegistry2.java @@ -237,9 +237,9 @@ public class AdapterRegistry2 { NamedNodeMap attr = n.getAttributes(); IDynamicAdapter2 da = null; if(n.getNodeName().equals("this")) - da = new ThisResource2(); + da = ThisResource2.INSTANCE; else if(n.getNodeName().equals("graph")) - da = new GraphObject2(); + da = GraphObject2.INSTANCE; else if(n.getNodeName().equals("bundle")) { String bundleId = null; Node fc = n.getFirstChild(); diff --git a/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/reflection/GraphObject2.java b/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/reflection/GraphObject2.java index e8f171b8c..8a2db578f 100644 --- a/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/reflection/GraphObject2.java +++ b/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/reflection/GraphObject2.java @@ -15,6 +15,8 @@ import org.simantics.db.ReadGraph; public class GraphObject2 implements IDynamicAdapter2 { + public static final IDynamicAdapter2 INSTANCE = new GraphObject2(); + @Override public Class getType() { return ReadGraph.class; diff --git a/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/reflection/ThisResource2.java b/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/reflection/ThisResource2.java index 24001ee0a..bacf3adee 100644 --- a/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/reflection/ThisResource2.java +++ b/bundles/org.simantics.db.services/src/org/simantics/db/services/adaption/reflection/ThisResource2.java @@ -16,6 +16,8 @@ import org.simantics.db.ReadGraph; public class ThisResource2 implements IDynamicAdapter2 { + public static IDynamicAdapter2 INSTANCE = new ThisResource2(); + @Override public Class getType() { return Resource.class; diff --git a/bundles/org.simantics.diagram/plugin.xml b/bundles/org.simantics.diagram/plugin.xml index ef8a32516..b6a591201 100644 --- a/bundles/org.simantics.diagram/plugin.xml +++ b/bundles/org.simantics.diagram/plugin.xml @@ -360,6 +360,13 @@ + + + + + diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/ConnectionCrossingsParticipant.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/ConnectionCrossingsParticipant.java index 10949ca65..c02f68de6 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/ConnectionCrossingsParticipant.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/ConnectionCrossingsParticipant.java @@ -30,7 +30,7 @@ import org.simantics.utils.datastructures.Pair; import org.simantics.utils.ui.ErrorLogger; public class ConnectionCrossingsParticipant extends AbstractDiagramParticipant { - private static final String CONNECTION_CROSSINGS_NODE_KEY = "connection-crossings"; + public static final String CONNECTION_CROSSINGS_NODE_KEY = "connection-crossings"; private ConnectionCrossingsNode ccNode; private final ConnectionCrossings crossings = new ConnectionCrossings(); diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/CopyAsSVGParticipant.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/CopyAsSVGParticipant.java new file mode 100644 index 000000000..b91c2bb7a --- /dev/null +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/CopyAsSVGParticipant.java @@ -0,0 +1,175 @@ +/******************************************************************************* + * Copyright (c) 2007 VTT Technical Research Centre of Finland and others. + * 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.diagram.participant; + +import java.awt.Font; +import java.awt.RenderingHints; +import java.awt.geom.Rectangle2D; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.batik.dom.GenericDOMImplementation; +import org.apache.batik.svggen.SVGGeneratorContext; +import org.apache.batik.svggen.SVGGeneratorContext.GraphicContextDefaults; +import org.apache.batik.svggen.SVGGraphics2D; +import org.apache.batik.svggen.SVGGraphics2DIOException; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.widgets.Display; +import org.simantics.diagram.elements.TextNode; +import org.simantics.g2d.canvas.ICanvasContext; +import org.simantics.g2d.canvas.impl.DependencyReflection.Dependency; +import org.simantics.g2d.diagram.participant.AbstractDiagramParticipant; +import org.simantics.g2d.diagram.participant.Selection; +import org.simantics.g2d.element.ElementHints; +import org.simantics.g2d.element.ElementUtils; +import org.simantics.g2d.element.IElement; +import org.simantics.scenegraph.INode; +import org.simantics.scenegraph.g2d.G2DNode; +import org.simantics.scenegraph.g2d.G2DSceneGraph; +import org.simantics.scenegraph.g2d.events.EventHandlerReflection.EventHandler; +import org.simantics.scenegraph.g2d.events.command.CommandEvent; +import org.simantics.scenegraph.g2d.events.command.Commands; +import org.simantics.scenegraph.g2d.nodes.LinkNode; +import org.simantics.scenegraph.g2d.nodes.SelectionNode; +import org.simantics.scenegraph.g2d.nodes.SingleElementNode; +import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphNode; +import org.simantics.scenegraph.utils.NodeMapper; +import org.simantics.scenegraph.utils.NodeUtil; +import org.simantics.utils.ui.ErrorLogger; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class CopyAsSVGParticipant extends AbstractDiagramParticipant { + + @Dependency + protected Selection sel; + + @EventHandler(priority = 0) + public boolean handleCommand(CommandEvent e) { + if (e.command.equals(Commands.COPY_AS_SVG)) { + Set ss = sel.getSelection(0); + copyAsSVG(getContext(), ss); + return true; + } + return false; + } + + private static void copyAsSVG(ICanvasContext canvasContext, Set elements) { + G2DSceneGraph sg = canvasContext.getSceneGraph(); + NodeMapper clipboardNodeMapper = new NodeMapper(); + List selectionRenderingDisabledNodes = new ArrayList(); + SingleElementNode clipboardNode = sg.addNode("svg-clipboard-temp", SingleElementNode.class); + + try { + for (IElement e : elements) { + INode node = e.getHint(ElementHints.KEY_SG_NODE); + if (node != null) { + // Don't render selection. Selection rendering could be a global rendering hint that is adhered by nodes! + for(RouteGraphNode n : NodeUtil.collectNodes(node, RouteGraphNode.class)) { + n.setIgnoreSelection(true); + selectionRenderingDisabledNodes.add(n); + } + for(SelectionNode n : NodeUtil.collectNodes(node, SelectionNode.class)) { + n.setIgnore(true); + selectionRenderingDisabledNodes.add(n); + } + for(TextNode n : NodeUtil.collectNodes(node, TextNode.class)) { + n.setShowSelection(false); + selectionRenderingDisabledNodes.add(n); + } + + String nodeId = clipboardNodeMapper.add(node); + LinkNode delegate = clipboardNode.addNode(ElementUtils.generateNodeId(e), LinkNode.class); + delegate.setDelegateId( nodeId ); + } + } + + DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); + + String svgNS = "http://www.w3.org/2000/svg"; + Document document = domImpl.createDocument(svgNS, "svg", null); + + GraphicContextDefaults gcDefaults = new GraphicContextDefaults(); + SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(document); + Map hintMap = new HashMap(); + + hintMap.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + hintMap.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + hintMap.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + hintMap.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); + hintMap.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + + gcDefaults.setRenderingHints(new RenderingHints(hintMap)); + gcDefaults.setFont(Font.decode(null)); + ctx.setGraphicContextDefaults(gcDefaults); + + SVGGraphics2D svgG2D = new SVGGraphics2D(ctx, false); + + StringWriter writer = new StringWriter(); + + // Track connection crossings manually since we will render only the clipboard node. + sg.getNode(ConnectionCrossingsParticipant.CONNECTION_CROSSINGS_NODE_KEY).render(svgG2D); + clipboardNode.render(svgG2D); + + Element root = svgG2D.getRoot(); + + Rectangle2D bounds = clipboardNode.getBoundsInLocal(true); + if (bounds != null) { + root.setAttributeNS(null, "viewBox", bounds.getMinX() + " " + bounds.getMinY() + " " + bounds.getWidth() + " " + bounds.getHeight()); + root.setAttributeNS(null, "height", Double.toString(bounds.getHeight())); + root.setAttributeNS(null, "width", Double.toString(bounds.getWidth())); + } + + try { + svgG2D.stream(root, writer, false, false); + } catch (SVGGraphics2DIOException e1) { + ErrorLogger.defaultLogError("Failed to copy the diagram selection as SVG." , e1); + } + + byte[] svgContent = writer.toString().getBytes(StandardCharsets.UTF_8); + + Display.getDefault().asyncExec(new Runnable() { + @Override + public void run() { + Clipboard cb = new Clipboard(Display.getCurrent()); + cb.setContents(new byte[][] {svgContent}, + new Transfer[] { + SVGTransfer.getInstance() + } + ); + } + }); + + } finally { + clipboardNode.removeNodes(); + clipboardNodeMapper.clear(); + clipboardNode.remove(); + + // Restore the selection rendering state for changed nodes. + for (G2DNode n : selectionRenderingDisabledNodes) { + if (n instanceof RouteGraphNode) { + ((RouteGraphNode) n).setIgnoreSelection(false); + } else if (n instanceof SelectionNode) { + ((SelectionNode)n).setIgnore(false); + } else if (n instanceof TextNode) { + ((TextNode)n).setShowSelection(true); + } + } + } + } +} diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/SVGTransfer.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/SVGTransfer.java new file mode 100644 index 000000000..539e22e3d --- /dev/null +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/participant/SVGTransfer.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2020 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: + * Semantum Oy - initial API and implementation + *******************************************************************************/ +package org.simantics.diagram.participant; + +import java.nio.charset.StandardCharsets; + +import org.eclipse.swt.dnd.ByteArrayTransfer; + +public class SVGTransfer extends ByteArrayTransfer { + private static SVGTransfer instance = new SVGTransfer(); + private static final String TYPE_NAME = "image/svg+xml"; + private static final int TYPE_ID = registerType(TYPE_NAME); + + public static byte[] formatContent(String svg) { + return svg.getBytes(StandardCharsets.UTF_8); + } + + public static SVGTransfer getInstance () { + return instance; + } + + @Override + protected int[] getTypeIds(){ + return new int[] {TYPE_ID}; + } + + @Override + protected String[] getTypeNames(){ + return new String[] {TYPE_NAME}; + } +} \ No newline at end of file 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 489ebd6c7..88d85cfbf 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 @@ -69,6 +69,7 @@ import org.simantics.diagram.handler.SimpleElementTransformHandler; import org.simantics.diagram.layer.ILayersViewPage; import org.simantics.diagram.participant.ConnectionCrossingsParticipant; import org.simantics.diagram.participant.ContextUtil; +import org.simantics.diagram.participant.CopyAsSVGParticipant; import org.simantics.diagram.participant.PointerInteractor2; import org.simantics.diagram.participant.SGFocusParticipant; import org.simantics.diagram.query.DiagramRequests; @@ -332,6 +333,7 @@ public class DiagramViewer //ctx.add(new TooltipParticipant()); ctx.add(new TerminalTooltipParticipant()); ctx.add(new ConnectionCrossingsParticipant(getInputResource())); + ctx.add(new CopyAsSVGParticipant()); } protected void addPainterParticipants(ICanvasContext ctx) { diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewerLoadJob.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewerLoadJob.java index decf3356c..dc9d9d1be 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewerLoadJob.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewerLoadJob.java @@ -111,8 +111,8 @@ public class DiagramViewerLoadJob extends DatabaseJob { }); END(task); } catch (Throwable t) { - viewer = null; LOGGER.error("Failed to complete loading of diagram {} in the canvas thread", viewer.diagramResource, t); + viewer = null; } } }); diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/G2DParentNode.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/G2DParentNode.java index af8c5630d..a752e9253 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/G2DParentNode.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/G2DParentNode.java @@ -349,11 +349,12 @@ public class G2DParentNode extends ParentNode implements IG2DNode, Ini Rectangle2D bounds = null; while(it.hasNext()) { IG2DNode node = it.next(); - Rectangle2D b = node.getBounds(); + Rectangle2D b = node.getBoundsInLocal(ignoreNulls); if(b == null && !ignoreNulls) return null; if(b != null) { if(!GeometryUtils.isUndefinedRectangle(b)) { + b = node.localToParent(b); if(bounds == null) { bounds = b.getFrame(); } else { diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/command/Commands.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/command/Commands.java index ce52912a5..89de18835 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/command/Commands.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/command/Commands.java @@ -107,6 +107,7 @@ public class Commands { public static final Command FOCUS_TOOLTIP = new Command("focusTooltip"); + public static final Command COPY_AS_SVG = new Command("copyAsSVG"); public static Command showPopup(Point2D atControlPosition) { return new ShowPopup(atControlPosition); diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/LinkNode.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/LinkNode.java index 50d50ecd2..aa570d6aa 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/LinkNode.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/LinkNode.java @@ -131,6 +131,11 @@ public class LinkNode extends StateMaskNode { @Override public Rectangle2D getBoundsInLocal() { + return getBoundsInLocal(false); + } + + @Override + public Rectangle2D getBoundsInLocal(boolean ignoreNulls) { // Safety against cyclic cases. if (hasFlags(IN_GET_BOUNDS)) return new Rectangle2D.Double(); @@ -141,7 +146,7 @@ public class LinkNode extends StateMaskNode { setFlags(IN_GET_BOUNDS); try { - Rectangle2D bounds = n.getBoundsInLocal(); + Rectangle2D bounds = n.getBoundsInLocal(ignoreNulls); if (transform != null && !transform.isIdentity()) bounds = transform.createTransformedShape(bounds).getBounds2D(); return bounds; diff --git a/bundles/org.simantics.simulation/src/org/simantics/simulation/history/HistoryUtil.java b/bundles/org.simantics.simulation/src/org/simantics/simulation/history/HistoryUtil.java index 343adefc8..6719cf63b 100644 --- a/bundles/org.simantics.simulation/src/org/simantics/simulation/history/HistoryUtil.java +++ b/bundles/org.simantics.simulation/src/org/simantics/simulation/history/HistoryUtil.java @@ -664,7 +664,7 @@ public class HistoryUtil { */ public static HistoryImportResult importHistoryArchive(HistoryManager history, Path path) throws IOException, HistoryException { HistoryImportResult result = new HistoryImportResult(); - try (RandomAccessBinary rab = new BinaryFile(path.toFile())) { + try (RandomAccessBinary rab = new BinaryFile(path.toFile(), "r")) { importHistoryArchive(history, rab, result); return result; } catch (IOException e) { diff --git a/bundles/org.simantics.structural2/src/org/simantics/structural2/Functions.java b/bundles/org.simantics.structural2/src/org/simantics/structural2/Functions.java index e43007637..e9bb272d3 100644 --- a/bundles/org.simantics.structural2/src/org/simantics/structural2/Functions.java +++ b/bundles/org.simantics.structural2/src/org/simantics/structural2/Functions.java @@ -635,8 +635,8 @@ public class Functions { @Override public Map getVariables(ReadGraph graph, Variable context, Map map) throws DatabaseException { - - Resource type = context.getPossibleType(graph); + StructuralResource2 STR = StructuralResource2.getInstance(graph); + Resource type = context.getPossibleType(graph, STR.Component); if(type == null) return null; StructuralComponentClass clazz = StructuralComponentClass.get(graph, type); @@ -653,7 +653,6 @@ public class Functions { } return map; } else if (StructuralComponentClass.DEFINED.equals(clazz)) { - StructuralResource2 STR = StructuralResource2.getInstance(graph); Resource def = graph.getSingleObject(type, STR.IsDefinedBy); Map children = graph.syncRequest(new UnescapedChildMapOfResource(def), TransientCacheListener.instance()); return StandardChildDomainChildren.getStandardChildDomainChildVariables(graph, context, children, map); diff --git a/bundles/org.simantics.tests.modelled.ui/scl/Simantics/TestsUI.scl b/bundles/org.simantics.tests.modelled.ui/scl/Simantics/TestsUI.scl index 0b99fe784..169f37e2a 100644 --- a/bundles/org.simantics.tests.modelled.ui/scl/Simantics/TestsUI.scl +++ b/bundles/org.simantics.tests.modelled.ui/scl/Simantics/TestsUI.scl @@ -7,7 +7,7 @@ createSTSTestAction res = do importJava "org.simantics.tests.modelled.ui.TestsUIUtils" where runSTSTestAction :: Resource -> () - ignoreSTSTestAction :: [Resource] -> () + ignoreSTSTestAction :: Resource -> () createSTSSuiteAction :: Resource -> () createSTSSuiteAction res = do diff --git a/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/TestsUIUtils.java b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/TestsUIUtils.java index b24f445e2..648d48969 100644 --- a/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/TestsUIUtils.java +++ b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/TestsUIUtils.java @@ -1,7 +1,6 @@ package org.simantics.tests.modelled.ui; import java.io.IOException; -import java.util.List; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.simantics.Simantics; @@ -27,15 +26,13 @@ public class TestsUIUtils { view.execute(); } - public static void ignoreSTSTestAction(List tests) throws DatabaseException { + public static void ignoreSTSTestAction(Resource test) throws DatabaseException { Simantics.getSession().syncRequest(new Write() { @Override public void perform(WriteGraph graph) throws DatabaseException { TestsResource TESTS = TestsResource.getInstance(graph); - for (Resource test : tests) { - graph.claimLiteral(test, TESTS.ignore, true, Bindings.BOOLEAN); - } + graph.claimLiteral(test, TESTS.ignore, true, Bindings.BOOLEAN); } }); }