]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/layer/GraphLayerManager.java
Some enhancements to GraphLayer-related utilities for Diagram layers
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / synchronization / graph / layer / GraphLayerManager.java
index 5b6e0f63a3d2b12925ca2e1b2d0e590b3883c5ab..41947ef993c49bc937b39eedddb0a0cbf3d25460 100644 (file)
@@ -45,7 +45,6 @@ import org.simantics.g2d.layers.ILayer;
 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;
 
@@ -175,15 +174,17 @@ public class GraphLayerManager {
         @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);
         }
     }
 
@@ -292,14 +293,8 @@ public class GraphLayerManager {
         }
     }
 
-    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>();
 
@@ -314,10 +309,12 @@ public class GraphLayerManager {
 
             // 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);
@@ -331,8 +328,9 @@ public class GraphLayerManager {
                 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);
@@ -344,7 +342,8 @@ public class GraphLayerManager {
                 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);
             }
@@ -517,8 +516,7 @@ public class GraphLayerManager {
             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));
                 }
             }
         }