]> 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 0cbdddd13bf572df86d32951dab2458356d3a643..332d3cdf1e346ec02ec52511186a2b6803bd0c9f 100644 (file)
@@ -1,9 +1,21 @@
+/*******************************************************************************\r
+ * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
+ * 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
 package org.simantics.g3d.scenegraph.structural;\r
 \r
 import java.util.ArrayList;\r
 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
@@ -15,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
@@ -30,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
@@ -85,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
@@ -112,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
@@ -212,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