]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/PipelineComponent.java
Handle PipeRun removals with detaching Components.
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / scenegraph / PipelineComponent.java
index 37dd50124b220c8a9848bf008eafd2df97782288..ad1c2b7a7d210e7c9fd83ae15aab4fa7f4555fb0 100644 (file)
@@ -78,9 +78,16 @@ public abstract class PipelineComponent extends GeometryNode {
                        return;
                this.alternativePipeRun = pipeRun;
                if (getControlPoint().isDualInline()) {
-                       PipeControlPoint sub = getControlPoint().getSubPoint().get(0);
-                       if (sub.getParent() != this.alternativePipeRun)
-                               this.alternativePipeRun.addChild(sub);
+                       PipeControlPoint sub = getControlPoint().getDualSub();
+                       if (sub.getParent() != this.alternativePipeRun) {
+                           if (this.alternativePipeRun != null) {
+                              this.alternativePipeRun.addChild(sub);
+                           } else if (sub.getPipeRun() != null) {
+                               // FIXME : how to handle child point without proper run?
+                               sub.getPipeRun().remChild(sub);
+                           }
+                       }
+                               
                }
                firePropertyChanged(Plant3D.URIs.HasAlternativePipeRun);
        }
@@ -122,6 +129,12 @@ public abstract class PipelineComponent extends GeometryNode {
         }
         setParameterMap(parameters);
     }
+    
+    public void setParameter(String name, Object value) {
+        Map<String, Object> parameters = new HashMap<>(getParameterMap());
+        parameters.put(name, value);
+        setParameterMap(parameters);
+    }
        
        public abstract void setType(String typeURI) throws Exception;
        
@@ -221,8 +234,8 @@ public abstract class PipelineComponent extends GeometryNode {
        
        private PipeControlPoint getBranchPoint() {
                PipeControlPoint branchPoint;
-               if (getControlPoint().getSubPoint().size() > 0) {
-                       branchPoint = getControlPoint().getSubPoint().get(0);
+               if (getControlPoint().getChildPoints().size() > 0) {
+                       branchPoint = getControlPoint().getChildPoints().get(0);
                } else {
                        if (branch0.getPipeRun() == null)
                                return null;
@@ -243,27 +256,27 @@ public abstract class PipelineComponent extends GeometryNode {
                if (pcp.getNext() != nextPCP) {
                        pcp.setNext(nextPCP);
                }
-               if (pcp.isDualInline()) {
-                       PipeControlPoint sub = pcp.getSubPoint().get(0);
-                       if (sub.getNext() != nextPCP)
-                               sub.setNext(nextPCP);
-               }
+//             if (pcp.isDualInline()) {
+//                     PipeControlPoint sub = pcp.getChildPoints().get(0);
+//                     if (sub.getNext() != nextPCP)
+//                             sub.setNext(nextPCP);
+//             }
                return true;
        }
        
        private boolean  _connectPrev(PipeControlPoint pcp, PipeControlPoint prevPCP) {
                if (prevPCP == null)
                        return false;
-               if (prevPCP.isDualInline())
-                       prevPCP = prevPCP.getSubPoint().get(0);
+//             if (prevPCP.isDualInline())
+//                     prevPCP = prevPCP.getChildPoints().get(0);
                if (pcp.getPrevious() != prevPCP) {
                        pcp.setPrevious(prevPCP);
                }
-               if (pcp.isDualInline()) {
-                       PipeControlPoint sub = pcp.getSubPoint().get(0);
-                       if (sub.getPrevious() != prevPCP)
-                               sub.setPrevious(prevPCP);
-               }
+//             if (pcp.isDualInline()) {
+//                     PipeControlPoint sub = pcp.getChildPoints().get(0);
+//                     if (sub.getPrevious() != prevPCP)
+//                             sub.setPrevious(prevPCP);
+//             }
                return true;
        }
        
@@ -401,7 +414,7 @@ public abstract class PipelineComponent extends GeometryNode {
                                        return false;
                                }
                                
-                       } else if (getControlPoint().getSubPoint().size() > 0) { // TODO : this may cause problems? (Removes branch point, before branch has been set?)
+                       } else if (getControlPoint().getChildPoints().size() > 0) { // TODO : this may cause problems? (Removes branch point, before branch has been set?)
                                //getControlPoint().getSubPoint().get(0).remove();
                                //getControlPoint().children.clear();
                                return true;
@@ -442,6 +455,7 @@ public abstract class PipelineComponent extends GeometryNode {
                if (pcp != null && pcp.getPipelineComponent() != null) {
                        pcp.remove();
                }
+               setPipeRun(null);
                super.remove();
        }
        
@@ -451,6 +465,7 @@ public abstract class PipelineComponent extends GeometryNode {
         if (pcp != null && pcp.getPipelineComponent() != null) {
             pcp.removeAndSplit();
         }
+        setPipeRun(null);
         super.remove();
        }