]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java
Allow user to specify component name in ComponentSelectionDialog
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / utils / ComponentUtils.java
index 5a84a5244839cd2b94f1660312005b68273bc2f9..c20cf92102a2262a7429c8b41fc7fffda3484af2 100644 (file)
@@ -1,9 +1,11 @@
 package org.simantics.plant3d.utils;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.vecmath.Vector3d;
 
@@ -265,6 +267,9 @@ public class ComponentUtils {
                
                public PositionType position = PositionType.NEXT;
                public PositionType insertPosition = PositionType.NEXT;
+
+               // Component name
+               public String name;
                
                // Reducer requires pipe specs
                public Double diameter;
@@ -303,6 +308,14 @@ public class ComponentUtils {
                        this.insertPosition = insertPosition;
                }
 
+               public String getName() {
+                       return name;
+               }
+
+               public void setName(String name) {
+                       this.name = name;
+               }
+
                public Double getDiameter() {
                        return diameter;
                }
@@ -348,6 +361,9 @@ public class ComponentUtils {
        public static PipelineComponent addComponent(P3DRootNode root, PipelineComponent component,  InsertInstruction inst) throws Exception {
                
                PipelineComponent newComponent = ComponentUtils.createComponent(root, inst.typeUri);
+               if (inst.name != null)
+                       newComponent.setName(inst.name);
+               
                PipeControlPoint newPcp = newComponent.getControlPoint();
                
                PipeControlPoint toPcp = component.getControlPoint();
@@ -692,4 +708,14 @@ public class ComponentUtils {
                PipingRules.splitVariableLengthComponent(branchSplit, component, false);
                return branchSplit;
        }
+
+       public static Collection<String> getPipelineComponentNames(P3DRootNode root) {
+               Collection<String> usedNames = root.getChild().stream()
+                               .filter(n -> n instanceof PipeRun)
+                               .flatMap(n -> ((PipeRun)n).getChild().stream())
+                               .filter(n -> n instanceof PipelineComponent)
+                               .map(n -> ((PipelineComponent)n).getName())
+                               .collect(Collectors.toSet());
+               return usedNames;
+       }
 }