]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/P3DParentNode.java
Use unique names at the model scope instead of pipe run
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / scenegraph / P3DParentNode.java
index d7f6749e53fcb4dacbdd1dc50da03a0f47b40125..c37d4627d4107f9a29ebadb11dfa3ea90820d072 100644 (file)
@@ -180,20 +180,39 @@ public abstract class P3DParentNode<T extends IP3DNode> extends ParentNode<T> im
                return null;
        }
        
-       public String getUniqueName(String prefix) {
-               Set<String> names = new HashSet<String>();
+       /**
+        * Get a set of all of the names contained by this node and all its descendants
+        * @param names  A set to which the names are added
+        */
+       public void getComponentNames(Set<String> names) {
                for (IP3DNode node : getNodes()) {
                        if (!(node instanceof IP3DVisualNode))
                                continue;
                        IP3DVisualNode n = (IP3DVisualNode)node;
                        names.add(n.getName());
+                       if (node instanceof P3DParentNode)
+                               ((P3DParentNode<?>) node).getComponentNames(names);
                }
-               int i = 1;
-               while (true) {
-                       String genName = prefix + "_" + i;
-                       if (!names.contains(genName))
-                               return genName;
-                       i++;
+       }
+       
+       /**
+        * Get a unique name in the Plant3D model with a given prefix followed by
+        * an underscore and number.
+        */
+       public String getUniqueName(String prefix) {
+               ParentNode<?> root = getRootNode();
+               if (root instanceof P3DRootNode) {
+                       return ((P3DRootNode) root).getUniqueName(prefix);
+               } else {
+                       Set<String> names = new HashSet<String>();
+                       getComponentNames(names);
+                       int i = 1;
+                       while (true) {
+                               String genName = prefix + "_" + i;
+                               if (!names.contains(genName))
+                                       return genName;
+                               i++;
+                       }
                }
        }