]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d/src/org/simantics/g3d/scenegraph/structural/ComponentNode.java
Remove listener calls when property values not updated.
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / scenegraph / structural / ComponentNode.java
index b701aca5af9c75ec67ed6cbf0dd1d5fe48165fbc..332d3cdf1e346ec02ec52511186a2b6803bd0c9f 100644 (file)
@@ -15,6 +15,7 @@ import java.util.ArrayList;
 import java.util.Collection;\r
 import java.util.Collections;\r
 import java.util.List;\r
+import java.util.Objects;\r
 \r
 import org.simantics.g3d.ontology.G3D;\r
 import org.simantics.g3d.property.annotations.GetPropertyValue;\r
@@ -26,7 +27,7 @@ import org.simantics.objmap.graph.annotations.RelatedSetValue;
 import org.simantics.objmap.structural.IStructuralObject;\r
 import org.simantics.utils.datastructures.MapList;\r
 \r
-public abstract class ComponentNode<T extends Connection, T2 extends IComponentNode> extends Node implements IComponentNode<T, T2>{\r
+public abstract class ComponentNode<T extends Connection<T,T2>, T2 extends IComponentNode<T,T2>> extends Node implements IComponentNode<T, T2>{\r
 \r
        \r
        private String name;\r
@@ -41,7 +42,7 @@ public abstract class ComponentNode<T extends Connection, T2 extends IComponentN
        @RelatedSetValue(Layer0.URIs.HasName)\r
        @SetPropertyValue(Layer0.URIs.HasName)\r
        public void setName(String name) {\r
-               if (name == null)\r
+               if (name == null || Objects.equals(this.name, name))\r
                        return;\r
                this.name = name;\r
                firePropertyChanged(Layer0.URIs.HasName);\r
@@ -96,8 +97,8 @@ public abstract class ComponentNode<T extends Connection, T2 extends IComponentN
        \r
        @Override\r
        public void addPublishedBy(IStructuralNode node) {\r
-               publisher.add(node);\r
-               firePropertyChanged(G3D.URIs.publishes);\r
+               if (publisher.add(node))\r
+                       firePropertyChanged(G3D.URIs.publishes);\r
        }\r
        \r
        @Override\r
@@ -123,47 +124,48 @@ public abstract class ComponentNode<T extends Connection, T2 extends IComponentN
        public List<T2> getAllConnectedNodes() {\r
                List<T2> list = new ArrayList<T2>();\r
                for (T c : getAllConnections()) {\r
-                       T2 node = (T2)c.getOther(this);\r
+                       T2 node = c.getOther(this);\r
                        if (node != null)\r
                                list.add(node);\r
                }\r
                return list;\r
        }\r
        \r
-    \r
-    @Override\r
-    public void addConnection(String id, T c) {\r
-       assert(isValidConnectionId(id));\r
-       if (!isPartOfInstantiatedModel())\r
-               _addConnection(id, c);\r
-       else\r
-               _addConnection(id+"/str", c);\r
-    }\r
-    \r
-    @Override\r
-    public void removeConnection(String id, T c) {\r
-       assert(isValidConnectionId(id));\r
-       if (!isPartOfInstantiatedModel())\r
-               _removeConnection(id, c);\r
-       else\r
-               _removeConnection(id+"/str", c);\r
-    }\r
-    \r
-    @Override\r
-    public void removeConnection(String id) {\r
-       assert(isValidConnectionId(id));\r
-       if (!isPartOfInstantiatedModel())\r
-               _removeConnection(id);\r
-       else\r
-               _removeConnection(id+"/str");\r
-    }\r
+       \r
+       @Override\r
+       public void addConnection(String id, T c) {\r
+               assert(isValidConnectionId(id));\r
+               if (!isPartOfInstantiatedModel())\r
+                       _addConnection(id, c);\r
+               else\r
+                       _addConnection(id+"/str", c);\r
+       }\r
+       \r
+       @Override\r
+       public void removeConnection(String id, T c) {\r
+               assert(isValidConnectionId(id));\r
+               if (!isPartOfInstantiatedModel())\r
+                       _removeConnection(id, c);\r
+               else\r
+                       _removeConnection(id+"/str", c);\r
+       }\r
+       \r
+       @Override\r
+       public void removeConnection(String id) {\r
+               assert(isValidConnectionId(id));\r
+               if (!isPartOfInstantiatedModel())\r
+                       _removeConnection(id);\r
+               else\r
+                       _removeConnection(id+"/str");\r
+       }\r
        \r
        private MapList<String, T> connections = new MapList<String, T>();\r
        \r
        \r
+       @SuppressWarnings("unchecked")\r
        protected void _addConnection(String id, T c) {\r
                connections.add(id, c);\r
-               c.addConnect(this);\r
+               c.addConnect((T2) this);\r
                firePropertyChanged(id);\r
        }\r
        \r
@@ -223,7 +225,7 @@ public abstract class ComponentNode<T extends Connection, T2 extends IComponentN
        public List<T2> getConnectedNodes(String id) {\r
                List<T2> list = new ArrayList<T2>();\r
                for (T c : getConnections(id)) {\r
-                       T2 node = (T2)c.getOther(this);\r
+                       T2 node = c.getOther(this);\r
                        if (node != null)\r
                                list.add(node);\r
                }\r