-<?xml version="1.0" encoding="UTF-8"?>\r<!--
- 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
- -->
-
-<adapters>
-
- <target interface="org.simantics.scenegraph.profile.ProfileEntry">\r <type\r uri="http://www.simantics.org/Diagram-0.0/GroupStyleProfileEntry"\r class="org.simantics.diagram.adapter.GroupStyleProfileEntry">\r <graph />\r <this />\r </type>\r </target>\r\r <target interface="org.simantics.scenegraph.profile.Style">\r <type\r uri="http://www.simantics.org/Diagram-0.0/ConstantStyle"\r class="org.simantics.diagram.adapter.ConstantStyle">\r <graph />\r <this />\r </type>\r <type\r uri="http://www.simantics.org/Diagram-0.0/ExpressionStyle"\r class="org.simantics.diagram.adapter.ExpressionStyle">\r <this />\r </type>\r </target>\r\r <target interface="org.simantics.scenegraph.profile.Group">\r <type\r uri="http://www.simantics.org/Diagram-0.0/TypeGroup"\r class="org.simantics.diagram.adapter.TypeGroup">\r <graph />\r <this />\r </type>\r <type\r uri="http://www.simantics.org/Diagram-0.0/MappedTypeGroup"\r class="org.simantics.diagram.adapter.MappedTypeGroup">\r <graph />\r <this />\r </type>\r </target>\r\r <target interface="org.simantics.g2d.diagram.DiagramClass">
- <baseType uri="http://www.simantics.org/Diagram-0.0/Composite" />
- <adapter uri="http://www.simantics.org/Diagram-0.0/Composite"
- adapterClass="org.simantics.diagram.adapter.DiagramClassAdapter" />
- </target>
-
- <target interface="org.simantics.diagram.adapter.ElementFactory">
- <resource uri="http://www.simantics.org/Diagram-0.0/Flag"
- class="org.simantics.diagram.adapter.FlagClassFactory" />
- <resource uri="http://www.simantics.org/Diagram-0.0/Composite"
- class="org.simantics.diagram.adapter.CompositeClassFactory" />
- <resource uri="http://www.simantics.org/Diagram-0.0/DefinedElement"
- class="org.simantics.diagram.adapter.DefinedElementFactory" />
- <resource uri="http://www.simantics.org/Diagram-0.0/SVGElement"
- class="org.simantics.diagram.adapter.SVGElementClassFactory" />
- <resource uri="http://www.simantics.org/Diagram-0.0/RasterElement"\r class="org.simantics.diagram.adapter.RasterElementClassFactory" />\r <resource uri="http://www.simantics.org/Diagram-0.0/AnimatedSVGElement"
- class="org.simantics.diagram.adapter.AnimatedSVGElementClassFactory" />
- <resource uri="http://www.simantics.org/Diagram-0.0/BranchPoint"
- class="org.simantics.diagram.adapter.BranchPointClassFactory" />
- <resource uri="http://www.simantics.org/Diagram-0.0/Connection"
- class="org.simantics.diagram.adapter.DefaultConnectionEdgeClassFactory" />
- <resource uri="http://www.simantics.org/Diagram-0.0/TextElement"
- class="org.simantics.diagram.adapter.TextElementClassFactory" />
-
- <type uri="http://www.simantics.org/Diagram-0.0/Connection"
- class="org.simantics.diagram.adapter.DefaultConnectionClassFactory" />\r\r <resource uri="http://www.simantics.org/Diagram-0.0/RouteGraphConnection"\r class="org.simantics.diagram.adapter.RouteGraphConnectionClassFactory">\r <graph />\r </resource>\r <type uri="http://www.simantics.org/Diagram-0.0/RouteGraphConnection"\r class="org.simantics.diagram.adapter.RouteGraphConnectionClassFactory">\r <graph/>\r </type>\r
- <type uri="http://www.simantics.org/Diagram-0.0/Flag"
- class="org.simantics.diagram.adapter.FlagClassFactory" />
- <type uri="http://www.simantics.org/Diagram-0.0/Composite"
- class="org.simantics.diagram.adapter.CompositeClassFactory" />
- <type uri="http://www.simantics.org/Diagram-0.0/RasterElement"\r class="org.simantics.diagram.adapter.RasterElementClassFactory" />\r <type uri="http://www.simantics.org/Diagram-0.0/SVGElement"
- class="org.simantics.diagram.adapter.SVGElementClassFactory" />
- <type uri="http://www.simantics.org/Diagram-0.0/AnimatedSVGElement"
- class="org.simantics.diagram.adapter.AnimatedSVGElementClassFactory" />
- <type uri="http://www.simantics.org/Diagram-0.0/DefinedElement"
- class="org.simantics.diagram.adapter.DefinedElementFactory" />
- <type uri="http://www.simantics.org/Diagram-0.0/BranchPoint"
- class="org.simantics.diagram.adapter.BranchPointClassFactory" />
- <type uri="http://www.simantics.org/Diagram-0.0/TextElement"
- class="org.simantics.diagram.adapter.TextElementClassFactory" />
- </target>
-
- <target interface="org.simantics.diagram.synchronization.graph.ElementWriter">
- <type uri="http://www.simantics.org/Layer0-0.0/Entity"
- class="org.simantics.diagram.adapter.DummyElementWriter" />
- <resource uri="http://www.simantics.org/Diagram-0.0/Flag"
- class="org.simantics.diagram.adapter.FlagWriter" />
- <resource uri="http://www.simantics.org/Diagram-0.0/TextElement"
- class="org.simantics.diagram.adapter.TextElementWriter" />
- </target>
-
- <target interface="org.simantics.diagram.symbolcontribution.SymbolContribution">
- <type uri="http://www.simantics.org/Diagram-0.0/BasicSymbolContribution"
- class="org.simantics.diagram.symbolcontribution.BasicSymbolContribution">
- <this />
- </type>
- <type uri="http://www.simantics.org/Diagram-0.0/IndexRootSymbolContribution"\r class="org.simantics.diagram.symbolcontribution.IndexRootSymbolContribution">\r </type>\r </target>\r\r <target interface="org.simantics.diagram.symbolcontribution.SymbolContributionFilter">\r <resource uri="http://www.simantics.org/Diagram-0.0/DenyFilter"\r class="org.simantics.diagram.symbolcontribution.DenyFilter"\r constructor="get">\r </resource>\r <type uri="http://www.simantics.org/Diagram-0.0/SCLFilter"\r class="org.simantics.diagram.symbolcontribution.SCLFilter">\r <this />\r </type>\r </target>\r\r\r <target interface="org.simantics.g2d.routing.IRouter2">\r <resource uri="http://www.simantics.org/Diagram-0.0/LinearRouting"\r class="org.simantics.g2d.routing.TrivialRouter2" />\r <resource uri="http://www.simantics.org/Diagram-0.0/RightAngledRouting"\r class="org.simantics.g2d.routing.algorithm2.Router4" />\r </target>\r\r <target interface="org.simantics.ui.icons.ImageDescriptorProvider">\r <type uri="http://www.simantics.org/Diagram-0.0/Diagram"\r class="org.simantics.ui.icons.BundleImageDescriptorProvider">\r <bundle />\r <string>icons/diagram.png</string>\r </type>\r <resource uri="http://www.simantics.org/Diagram-0.0/Diagram"\r class="org.simantics.ui.icons.BundleImageDescriptorProvider">\r <bundle />\r <string>icons/diagram.png</string>\r </resource>\r </target>\r\r <target interface="org.simantics.db.layer0.adapter.StringModifierFactory">\r <type uri="http://www.simantics.org/Diagram-0.0/Flag" class="org.simantics.diagram.flag.FlagStringModifierFactory">\r <graph />\r <this />\r </type>\r </target>\r\r <target interface="org.simantics.diagram.flag.FlagLabelingScheme">\r <baseType uri="http://www.simantics.org/Diagram-0.0/FlagLabelingScheme" />\r <resource\r uri="http://www.simantics.org/Diagram-0.0/FlagLabelingScheme/Alphabetical"\r class="org.simantics.diagram.flag.PermutativeFlagLabelingScheme">\r <string>A</string>\r <string>A</string>\r <string>Z</string>\r </resource>\r <resource\r uri="http://www.simantics.org/Diagram-0.0/FlagLabelingScheme/Numeric"\r class="org.simantics.diagram.flag.PermutativeFlagLabelingScheme">\r <string>1</string>\r <string>1</string>\r <string>9</string>\r </resource>\r </target>\r\r <target interface="org.simantics.scenegraph.loader.ScenegraphLoader">\r <type uri="http://www.simantics.org/Diagram-0.0/Scenegraph/AbstractText" class="org.simantics.scenegraph.loader.StandardScenegraphLoader">\r <this/>\r <bundle />\r <string>org.simantics.diagram.elements.TextNode</string>\r </type>\r <type uri="http://www.simantics.org/Diagram-0.0/Scenegraph/SVGImage" class="org.simantics.scenegraph.loader.StandardScenegraphLoader">\r <this/>\r <bundle />\r <string>org.simantics.scenegraph.g2d.nodes.SVGNode</string>\r </type>\r <type uri="http://www.simantics.org/Diagram-0.0/Scenegraph/Composite" class="org.simantics.scenegraph.loader.StandardScenegraphLoader">\r <this/>\r <bundle />\r <string>org.simantics.scenegraph.g2d.nodes.spatial.RTreeNode</string>\r </type>\r </target>\r <target\r interface="org.simantics.db.layer0.adapter.PasteHandler">\r <type\r uri="http://www.simantics.org/Diagram-0.0/Scenegraph/Composite"\r class="org.simantics.diagram.adapter.ScenegraphCompositePasteHandler">\r <this />\r </type>\r </target>\r
-</adapters>
+<?xml version="1.0" encoding="UTF-8"?>\r<!--\r Copyright (c) 2007, 2010 Association for Decentralized Information Management\r in Industry THTH ry.\r All rights reserved. This program and the accompanying materials\r are made available under the terms of the Eclipse Public License v1.0\r which accompanies this distribution, and is available at\r http://www.eclipse.org/legal/epl-v10.html\r \r Contributors:\r VTT Technical Research Centre of Finland - initial API and implementation\r -->\r\r<adapters>\r\r <target interface="org.simantics.scenegraph.profile.ProfileEntry">\r <type\r uri="http://www.simantics.org/Diagram-0.0/GroupStyleProfileEntry"\r class="org.simantics.diagram.adapter.GroupStyleProfileEntry">\r <graph />\r <this />\r </type>\r </target>\r\r <target interface="org.simantics.scenegraph.profile.Style">\r <type\r uri="http://www.simantics.org/Diagram-0.0/ConstantStyle"\r class="org.simantics.diagram.adapter.ConstantStyle">\r <graph />\r <this />\r </type>\r <type\r uri="http://www.simantics.org/Diagram-0.0/ExpressionStyle"\r class="org.simantics.diagram.adapter.ExpressionStyle">\r <this />\r </type>\r </target>\r\r <target interface="org.simantics.scenegraph.profile.Group">\r <type\r uri="http://www.simantics.org/Diagram-0.0/TypeGroup"\r class="org.simantics.diagram.adapter.TypeGroup">\r <graph />\r <this />\r </type>\r <type\r uri="http://www.simantics.org/Diagram-0.0/MappedTypeGroup"\r class="org.simantics.diagram.adapter.MappedTypeGroup">\r <graph />\r <this />\r </type>\r </target>\r\r <target interface="org.simantics.g2d.diagram.DiagramClass">\r <baseType uri="http://www.simantics.org/Diagram-0.0/Composite" />\r <adapter uri="http://www.simantics.org/Diagram-0.0/Composite"\r adapterClass="org.simantics.diagram.adapter.DiagramClassAdapter" />\r </target>\r\r <target interface="org.simantics.diagram.adapter.ElementFactory">\r <resource uri="http://www.simantics.org/Diagram-0.0/Flag"\r class="org.simantics.diagram.adapter.FlagClassFactory" />\r <resource uri="http://www.simantics.org/Diagram-0.0/Composite"\r class="org.simantics.diagram.adapter.CompositeClassFactory" />\r <resource uri="http://www.simantics.org/Diagram-0.0/DefinedElement"\r class="org.simantics.diagram.adapter.DefinedElementFactory" />\r <resource uri="http://www.simantics.org/Diagram-0.0/SVGElement"\r class="org.simantics.diagram.adapter.SVGElementClassFactory" />\r <resource uri="http://www.simantics.org/Diagram-0.0/RasterElement"\r class="org.simantics.diagram.adapter.RasterElementClassFactory" />\r <resource uri="http://www.simantics.org/Diagram-0.0/AnimatedSVGElement"\r class="org.simantics.diagram.adapter.AnimatedSVGElementClassFactory" />\r <resource uri="http://www.simantics.org/Diagram-0.0/BranchPoint"\r class="org.simantics.diagram.adapter.BranchPointClassFactory" />\r <resource uri="http://www.simantics.org/Diagram-0.0/Connection"\r class="org.simantics.diagram.adapter.DefaultConnectionEdgeClassFactory" />\r <resource uri="http://www.simantics.org/Diagram-0.0/TextElement"\r class="org.simantics.diagram.adapter.TextElementClassFactory" />\r\r <type uri="http://www.simantics.org/Diagram-0.0/Connection"\r class="org.simantics.diagram.adapter.DefaultConnectionClassFactory" />\r\r <resource uri="http://www.simantics.org/Diagram-0.0/RouteGraphConnection"\r class="org.simantics.diagram.adapter.RouteGraphConnectionClassFactory">\r <graph />\r </resource>\r <type uri="http://www.simantics.org/Diagram-0.0/RouteGraphConnection"\r class="org.simantics.diagram.adapter.RouteGraphConnectionClassFactory">\r <graph/>\r </type>\r <type uri="http://www.simantics.org/Diagram-0.0/Flag"\r class="org.simantics.diagram.adapter.FlagClassFactory" />\r <type uri="http://www.simantics.org/Diagram-0.0/Composite"\r class="org.simantics.diagram.adapter.CompositeClassFactory" />\r <type uri="http://www.simantics.org/Diagram-0.0/RasterElement"\r class="org.simantics.diagram.adapter.RasterElementClassFactory" />\r <type uri="http://www.simantics.org/Diagram-0.0/SVGElement"\r class="org.simantics.diagram.adapter.SVGElementClassFactory" />\r <type uri="http://www.simantics.org/Diagram-0.0/AnimatedSVGElement"\r class="org.simantics.diagram.adapter.AnimatedSVGElementClassFactory" />\r <type uri="http://www.simantics.org/Diagram-0.0/DefinedElement"\r class="org.simantics.diagram.adapter.DefinedElementFactory" />\r <type uri="http://www.simantics.org/Diagram-0.0/BranchPoint"\r class="org.simantics.diagram.adapter.BranchPointClassFactory" />\r <type uri="http://www.simantics.org/Diagram-0.0/TextElement"\r class="org.simantics.diagram.adapter.TextElementClassFactory" />\r </target>\r\r <target interface="org.simantics.diagram.synchronization.graph.ElementWriter">\r <type uri="http://www.simantics.org/Layer0-0.0/Entity"\r class="org.simantics.diagram.adapter.DummyElementWriter" />\r <resource uri="http://www.simantics.org/Diagram-0.0/Flag"\r class="org.simantics.diagram.adapter.FlagWriter" />\r <resource uri="http://www.simantics.org/Diagram-0.0/TextElement"\r class="org.simantics.diagram.adapter.TextElementWriter" />\r </target>\r\r <target interface="org.simantics.diagram.symbolcontribution.SymbolContribution">\r <type uri="http://www.simantics.org/Diagram-0.0/BasicSymbolContribution"\r class="org.simantics.diagram.symbolcontribution.BasicSymbolContribution">\r <this />\r </type>\r <type uri="http://www.simantics.org/Diagram-0.0/IndexRootSymbolContribution"\r class="org.simantics.diagram.symbolcontribution.IndexRootSymbolContribution">\r </type>\r </target>\r\r <target interface="org.simantics.diagram.symbolcontribution.SymbolContributionFilter">\r <resource uri="http://www.simantics.org/Diagram-0.0/DenyFilter"\r class="org.simantics.diagram.symbolcontribution.DenyFilter"\r constructor="get">\r </resource>\r <type uri="http://www.simantics.org/Diagram-0.0/SCLFilter"\r class="org.simantics.diagram.symbolcontribution.SCLFilter">\r <this />\r </type>\r </target>\r\r\r <target interface="org.simantics.g2d.routing.IRouter2">\r <resource uri="http://www.simantics.org/Diagram-0.0/LinearRouting"\r class="org.simantics.g2d.routing.TrivialRouter2" />\r <resource uri="http://www.simantics.org/Diagram-0.0/RightAngledRouting"\r class="org.simantics.g2d.routing.algorithm2.Router4" />\r </target>\r\r <target interface="org.simantics.ui.icons.ImageDescriptorProvider">\r <type uri="http://www.simantics.org/Diagram-0.0/Diagram"\r class="org.simantics.ui.icons.BundleImageDescriptorProvider">\r <bundle />\r <string>icons/diagram.png</string>\r </type>\r <resource uri="http://www.simantics.org/Diagram-0.0/Diagram"\r class="org.simantics.ui.icons.BundleImageDescriptorProvider">\r <bundle />\r <string>icons/diagram.png</string>\r </resource>\r </target>\r\r <target interface="org.simantics.db.layer0.adapter.StringModifierFactory">\r <type uri="http://www.simantics.org/Diagram-0.0/Flag" class="org.simantics.diagram.flag.FlagStringModifierFactory">\r <graph />\r <this />\r </type>\r </target>\r\r <target interface="org.simantics.diagram.flag.FlagLabelingScheme">\r <baseType uri="http://www.simantics.org/Diagram-0.0/FlagLabelingScheme" />\r <resource\r uri="http://www.simantics.org/Diagram-0.0/FlagLabelingScheme/Alphabetical"\r class="org.simantics.diagram.flag.PermutativeFlagLabelingScheme">\r <string>A</string>\r <string>A</string>\r <string>Z</string>\r </resource>\r <resource\r uri="http://www.simantics.org/Diagram-0.0/FlagLabelingScheme/Numeric"\r class="org.simantics.diagram.flag.PermutativeFlagLabelingScheme">\r <string>1</string>\r <string>1</string>\r <string>9</string>\r </resource>\r </target>\r\r <target interface="org.simantics.scenegraph.loader.ScenegraphLoader">\r <type uri="http://www.simantics.org/Diagram-0.0/Scenegraph/AbstractText" class="org.simantics.scenegraph.loader.StandardScenegraphLoader">\r <this/>\r <bundle />\r <string>org.simantics.diagram.elements.TextNode</string>\r </type>\r <type uri="http://www.simantics.org/Diagram-0.0/Scenegraph/SVGImage" class="org.simantics.scenegraph.loader.StandardScenegraphLoader">\r <this/>\r <bundle />\r <string>org.simantics.scenegraph.g2d.nodes.SVGNode</string>\r </type>\r <type uri="http://www.simantics.org/Diagram-0.0/Scenegraph/Composite" class="org.simantics.scenegraph.loader.StandardScenegraphLoader">\r <this/>\r <bundle />\r <string>org.simantics.scenegraph.g2d.nodes.spatial.RTreeNode</string>\r </type>\r </target>\r <target\r interface="org.simantics.db.layer0.adapter.PasteHandler">\r <type\r uri="http://www.simantics.org/Diagram-0.0/Scenegraph/Composite"\r class="org.simantics.diagram.adapter.ScenegraphCompositePasteHandler">\r <this />\r </type>\r </target>\r\r <target interface="org.simantics.diagram.synchronization.graph.layer.IGraphLayerUtil">\r <resource uri="http://www.simantics.org/Diagram-0.0/Layer"\r class="org.simantics.diagram.synchronization.graph.layer.GraphLayerUtil">\r <this />\r </resource>\r </target>\r</adapters>\r
\ No newline at end of file
*******************************************************************************/
package org.simantics.diagram.synchronization.graph.layer;
+import java.util.Collection;
+import java.util.Map;
+
import org.simantics.db.Resource;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.function.DbConsumer;
+import org.simantics.g2d.layers.ILayer;
+import org.simantics.g2d.layers.SimpleLayer;
/**
* @author Tuukka Lehtonen
*/
public class GraphLayer {
+ public static final String PROP_VISIBLE = "PROP_VISIBLE";
+ public static final String PROP_FOCUSABLE = "PROP_FOCUSABLE";
+
private final String name;
private final Resource layer;
+
+ private final Map<String, Resource> tags;
- private final Resource visible;
-
- private final Resource focusable;
-
- public GraphLayer(String name, Resource layer, Resource visible, Resource focusable) {
+ public GraphLayer(String name, Resource layer, Map<String, Resource> tags) {
this.name = name;
this.layer = layer;
- this.visible = visible;
- this.focusable = focusable;
+ this.tags = tags;
}
public GraphLayer withName(String name) {
- return new GraphLayer(name, layer, visible, focusable);
+ return new GraphLayer(name, layer, tags);
}
public String getName() {
}
public Resource getVisible() {
- return visible;
+ return tags.get(PROP_VISIBLE);
}
public Resource getFocusable() {
- return focusable;
+ return tags.get(PROP_FOCUSABLE);
+ }
+
+ public ILayer getILayer() {
+ return new SimpleLayer(name);
+ }
+
+ public Collection<Resource> getTags() {
+ return tags.values();
+ }
+
+ public void forEachTag(DbConsumer<Resource> consumer) throws DatabaseException {
+ for (Resource r : tags.values())
+ consumer.accept(r);
}
}
\ No newline at end of file
import org.simantics.g2d.layers.ILayers;
import org.simantics.g2d.layers.ILayersEditor;
import org.simantics.g2d.layers.ILayersEditor.ILayersEditorListener;
-import org.simantics.g2d.layers.SimpleLayer;
import org.simantics.g2d.layers.SimpleLayers;
import org.simantics.layer0.Layer0;
@Override
public void perform(WriteGraph g) throws Exception {
String newName = layer.getName();
- for (Resource l : g.getObjects(diagram, dia.HasLayer)) {
- String name = g.getRelatedValue(l, l0.HasName);
+ for (Resource layer : g.getObjects(diagram, dia.HasLayer)) {
+ String name = g.getRelatedValue(layer, l0.HasName);
if (newName.equals(name)) {
return;
}
}
- GraphLayer l = new GraphLayerUtil(g).createLayer(newName, false);
- g.claim(diagram, dia.HasLayer, l.getLayer());
- layers.put(newName, l);
+
+ IGraphLayerUtil util = g.adapt(DiagramResource.getInstance(g).Layer, IGraphLayerUtil.class);
+ GraphLayer layer = util.createLayer(g, newName, false);
+ g.claim(diagram, dia.HasLayer, layer.getLayer());
+ layers.put(newName, layer);
}
}
}
}
- GraphLayer loadLayer(ReadGraph g, Resource layer) throws DatabaseException {
- String name = g.getRelatedValue(layer, l0.HasName);
- Resource visible = g.getSingleObject(layer, dia.HasVisibleTag);
- Resource focusable = g.getSingleObject(layer, dia.HasFocusableTag);
- return new GraphLayer(name, layer, visible, focusable);
- }
-
public ILayersEditor loadLayers(IDiagram diagram, ReadGraph g, Resource diagramResource) throws DatabaseException {
+
SimpleLayers result = new SimpleLayers();
ConcurrentMap<String, GraphLayer> newLayers = new ConcurrentHashMap<String, GraphLayer>();
// We need to put GraphLayer to newLayers so...
for (Resource layer : g.getObjects(diagramResource, dia.HasLayer)) {
- GraphLayer gl = loadLayer(g, layer);
+ IGraphLayerUtil layerUtil = g.adapt(g.getSingleObject(layer, Layer0.getInstance(g).InstanceOf), IGraphLayerUtil.class);
+
+ GraphLayer gl = layerUtil.loadLayer(g, layer);
for (String name : fixed) {
if (name.equals(gl.getName())) {
- SimpleLayer l = new SimpleLayer(gl.getName());
+ ILayer l = gl.getILayer();
newLayers.put(gl.getName(), gl);
result.addLayer(l);
result.activate(l);
System.out.println("Loading layers");
for (Resource layer : g.getObjects(diagramResource, dia.HasLayer)) {
- GraphLayer gl = loadLayer(g, layer);
- SimpleLayer l = new SimpleLayer(gl.getName());
+ IGraphLayerUtil layerUtil = g.adapt(g.getSingleObject(layer, Layer0.getInstance(g).InstanceOf), IGraphLayerUtil.class);
+ GraphLayer gl = layerUtil.loadLayer(g, layer);
+ ILayer l = gl.getILayer();
newLayers.put(gl.getName(), gl);
result.addLayer(l);
if (DEBUG_LAYERS)
System.out.println(" Loaded " + (active ? "active" : "inactive") + " layer '" + gl.getName() + "'");
- l.addLayerListener(layerListener);
+ if (l instanceof IEditableLayer)
+ ((IEditableLayer) l).addLayerListener(layerListener);
if (active)
result.activate(l);
}
for (ILayer layer : visibleLayers) {
GraphLayer gl = layers.get(layer.getName());
if (gl != null) {
- DiagramGraphUtil.tag(g, element, gl.getVisible(), true);
- DiagramGraphUtil.tag(g, element, gl.getFocusable(), true);
+ gl.forEachTag(tag -> DiagramGraphUtil.tag(g, element, tag, true));
}
}
}
*******************************************************************************/
package org.simantics.diagram.synchronization.graph.layer;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
import org.simantics.db.WriteGraph;
import org.simantics.db.exception.DatabaseException;
*
* @author Tuukka Lehtonen
*/
-public final class GraphLayerUtil {
-
- WriteGraph graph;
- Layer0 l0;
- DiagramResource dia;
+public final class GraphLayerUtil implements IGraphLayerUtil {
- public GraphLayerUtil(WriteGraph graph) {
- this.graph = graph;
- this.l0 = Layer0.getInstance(graph);
- this.dia = DiagramResource.getInstance(graph);
+ public GraphLayerUtil(Resource layer) {
}
- public GraphLayer createLayer(String layerName, boolean active) throws DatabaseException {
+ @Override
+ public GraphLayer createLayer(WriteGraph graph, String layerName, boolean active) throws DatabaseException {
+ Layer0 L0 = Layer0.getInstance(graph);
+ DiagramResource DIA = DiagramResource.getInstance(graph);
+
Resource layer = graph.newResource();
- graph.claim(layer, l0.InstanceOf, null, dia.Layer);
+ graph.claim(layer, L0.InstanceOf, null, DIA.Layer);
// Assign tagging relations
- Resource visibleTag = newTag(dia.IsVisible);
- Resource focusableTag = newTag(dia.IsFocusable);
- graph.claim(layer, dia.HasVisibleTag, visibleTag);
- graph.claim(layer, dia.HasFocusableTag, focusableTag);
+ Resource visibleTag = newTag(graph, L0, DIA.IsVisible);
+ Resource focusableTag = newTag(graph, L0, DIA.IsFocusable);
+ graph.claim(layer, DIA.HasVisibleTag, visibleTag);
+ graph.claim(layer, DIA.HasFocusableTag, focusableTag);
// Assign shared name property for all, the layer and the tags
Resource name = graph.newResource();
- graph.claim(name, l0.InstanceOf, null, l0.String);
+ graph.claim(name, L0.InstanceOf, null, L0.String);
graph.claimValue(name, layerName);
- graph.claim(layer, l0.HasName, name);
- graph.claim(visibleTag, l0.HasName, name);
- graph.claim(focusableTag, l0.HasName, name);
+ graph.claim(layer, L0.HasName, name);
+ graph.claim(visibleTag, L0.HasName, name);
+ graph.claim(focusableTag, L0.HasName, name);
- setLayerActive(layer, active);
+ setLayerActive(graph, DIA, layer, active);
- return new GraphLayer(layerName, layer, visibleTag, focusableTag);
+ Map<String, Resource> properties = new HashMap<>();
+ properties.put(GraphLayer.PROP_FOCUSABLE, focusableTag);
+ properties.put(GraphLayer.PROP_VISIBLE, visibleTag);
+
+ return new GraphLayer(layerName, layer, properties);
}
- public Resource newTag(Resource baseTag) throws DatabaseException {
+ public static Resource newTag(WriteGraph graph, Layer0 L0, Resource baseTag) throws DatabaseException {
Resource tag = graph.newResource();
- graph.claim(tag, l0.SubrelationOf, baseTag);
- graph.claim(tag, l0.InverseOf, tag);
+ graph.claim(tag, L0.SubrelationOf, baseTag);
+ graph.claim(tag, L0.InverseOf, tag);
return tag;
}
- public void setLayerActive(Resource layer, boolean active) throws ManyObjectsForFunctionalRelationException, ServiceException {
- graph.claimLiteral(layer, dia.IsActive, Boolean.valueOf(active));
+ public static void setLayerActive(WriteGraph graph, DiagramResource DIA, Resource layer, boolean active) throws ManyObjectsForFunctionalRelationException, ServiceException {
+ graph.claimLiteral(layer, DIA.IsActive, Boolean.valueOf(active));
+ }
+
+ @Override
+ public GraphLayer loadLayer(ReadGraph graph, Resource layer) throws DatabaseException {
+ Layer0 L0 = Layer0.getInstance(graph);
+ DiagramResource DIA = DiagramResource.getInstance(graph);
+ String name = graph.getRelatedValue(layer, L0.HasName);
+ Resource visible = graph.getSingleObject(layer, DIA.HasVisibleTag);
+ Resource focusable = graph.getSingleObject(layer, DIA.HasFocusableTag);
+
+ Map<String, Resource> properties = new HashMap<>();
+ properties.put(GraphLayer.PROP_FOCUSABLE, focusable);
+ properties.put(GraphLayer.PROP_VISIBLE, visible);
+
+ return new GraphLayer(name, layer, properties);
}
}
--- /dev/null
+package org.simantics.diagram.synchronization.graph.layer;
+
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.exception.DatabaseException;
+
+public interface IGraphLayerUtil {
+
+ GraphLayer loadLayer(ReadGraph graph, Resource layer) throws DatabaseException;
+
+ GraphLayer createLayer(WriteGraph graph, String newName, boolean b) throws DatabaseException;
+
+}