]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/layer/GraphLayer.java
Bringing layers back to life
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / synchronization / graph / layer / GraphLayer.java
index 87746246d87b86632beaf48d55f5a7e38d7c28e9..2f25b84a93dadd73b91a537e0e29b0832deb9d87 100644 (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 boolean active;
+    
+    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, boolean active) {
         this.name = name;
         this.layer = layer;
-        this.visible = visible;
-        this.focusable = focusable;
+        this.tags = tags;
+        this.active = active;
     }
 
     public GraphLayer withName(String name) {
-        return new GraphLayer(name, layer, visible, focusable);
+        return new GraphLayer(name, layer, tags, active);
     }
 
     public String getName() {
@@ -46,11 +56,68 @@ public class GraphLayer {
     }
 
     public Resource getVisible() {
-        return visible;
+        return tags.get(PROP_VISIBLE);
     }
 
     public Resource getFocusable() {
-        return focusable;
+        return tags.get(PROP_FOCUSABLE);
+    }
+    
+    public boolean isActive() {
+        return active;
+    }
+
+    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);
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (active ? 1231 : 1237);
+        result = prime * result + ((layer == null) ? 0 : layer.hashCode());
+        result = prime * result + ((name == null) ? 0 : name.hashCode());
+        result = prime * result + ((tags == null) ? 0 : tags.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        GraphLayer other = (GraphLayer) obj;
+        if (active != other.active)
+            return false;
+        if (layer == null) {
+            if (other.layer != null)
+                return false;
+        } else if (!layer.equals(other.layer))
+            return false;
+        if (name == null) {
+            if (other.name != null)
+                return false;
+        } else if (!name.equals(other.name))
+            return false;
+        if (tags == null) {
+            if (other.tags != null)
+                return false;
+        } else if (!tags.equals(other.tags))
+            return false;
+        return true;
     }
 
 }
\ No newline at end of file