}
@RelatedGetObj(Plant3D.URIs.HasAlternativePipeRun)
- public PipeRun getAlternaitvePipeRun() {
+ public PipeRun getAlternativePipeRun() {
return alternativePipeRun;
}
public void setNext(PipelineComponent comp) {
if (next == comp)
return;
+ if (this.next != null)
+ this.next._removeRef(this);
this.next = comp;
+ this.syncnext = false;
syncNext();
firePropertyChanged(Plant3D.URIs.HasNext);
if (comp != null)
public void setPrevious(PipelineComponent comp) {
if (previous == comp)
return;
+ if (this.previous != null)
+ this.previous._removeRef(this);
this.previous = comp;
-
+ this.syncprev = false;
+ syncPrevious();
firePropertyChanged(Plant3D.URIs.HasPrevious);
if (comp != null)
comp.sync();
public void setBranch0(PipelineComponent comp) {
if (branch0 == comp)
return;
+ if (this.branch0 != null)
+ this.branch0._removeRef(this);
this.branch0 = comp;
+ this.syncbr0 = false;
syncBranch0();
firePropertyChanged(Plant3D.URIs.HasBranch0);
if (comp != null)
// System.out.println(this + " next " + comp);
}
+ @GetPropertyValue(name="Previous",tabId="Debug",value=Plant3D.URIs.HasPrevious)
+ public String getPreviousDebug() {
+ if (previous == null)
+ return null;
+ return previous.getName();
+ }
+
+ @GetPropertyValue(name="Next",tabId="Debug",value=Plant3D.URIs.HasNext)
+ public String getNextDebug() {
+ if (next == null)
+ return null;
+ return next.getName();
+ }
+
+ @GetPropertyValue(name="Branch0",tabId="Debug",value=Plant3D.URIs.HasBranch0)
+ public String getBR0Debug() {
+ if (branch0 == null)
+ return null;
+ return branch0.getName();
+ }
+
private PipeControlPoint getBranchPoint() {
PipeControlPoint branchPoint;
if (getControlPoint().getSubPoint().size() > 0) {
return true;
}
+ // When link to a component is removed, also link to the other direction must be removed at the same time, or
+ // Control point structure is left into illegal state.
+ private void _removeRef(PipelineComponent comp) {
+ if (next == comp) {
+ next = null;
+ syncnext = false;
+ syncNext();
+ } else if (previous == comp) {
+ previous = null;
+ syncprev = false;
+ syncPrevious();
+ } else if (branch0 == comp) {
+ branch0 = null;
+ syncbr0 = false;
+ syncBranch0();
+ }
+ }
+ boolean syncnext = false;
+ private void syncNext() {
+ if (syncnext)
+ return;
+ syncnext = _syncNext();
+ }
- private boolean syncNext() {
-
- if (getControlPoint() != null) {
+
+ private boolean _syncNext() {
+ PipeControlPoint pcp = getControlPoint();
+ if (pcp != null) {
+
if (next != null ) {
- if (next.getControlPoint() != null && next.getPipeRun() != null) {
+ if (next.getControlPoint() != null) {
// TODO, relying that the other direction is connected.
boolean nxt = next.getPrevious() == this;
boolean br0 = next.getBranch0() == this;
if (nxt){
- return _connectNext(getControlPoint(), next.getControlPoint());
+ return _connectNext(pcp, next.getControlPoint());
} else if (br0) {
- return _connectNext(getControlPoint(), next.getBranchPoint());
+ return _connectNext(pcp, next.getBranchPoint());
+ } else {
+ return false;
}
} else {
return false;
}
- } else if (getControlPoint().getPrevious() != null) {
- getControlPoint().setNext(null);
+ } else if (pcp.getNext() != null) {
+ pcp.setNext(null);
+ return true;
}
} else {
return false;
return true;
}
- private boolean syncPrevious() {
-
- if (getControlPoint() != null) {
+ boolean syncprev = false;
+ private void syncPrevious() {
+ if (syncprev)
+ return;
+ syncprev = _syncPrevious();
+ }
+
+ private boolean _syncPrevious() {
+ PipeControlPoint pcp = getControlPoint();
+ if (pcp != null) {
if (previous != null ) {
- if (previous.getControlPoint() != null && previous.getPipeRun() != null) {
+ if (previous.getControlPoint() != null) {
// TODO, relying that the other direction is connected.
boolean prev = previous.getNext() == this;
boolean br0 = previous.getBranch0() == this;
if (prev){
- return _connectPrev(getControlPoint(), previous.getControlPoint());
+ return _connectPrev(pcp, previous.getControlPoint());
} else if (br0) {
- return _connectPrev(getControlPoint(), previous.getBranchPoint());
+ return _connectPrev(pcp, previous.getBranchPoint());
+ } else {
+ return false;
}
} else {
return false;
}
- } else if (getControlPoint().getPrevious() != null) {
- getControlPoint().setPrevious(null);
+ } else if (pcp.getPrevious() != null) {
+ pcp.setPrevious(null);
+ return true;
}
} else {
return false;
return true;
}
- private boolean syncBranch0() {
+ boolean syncbr0 = false;
+ private void syncBranch0() {
+ if (syncbr0)
+ return;
+ syncbr0 = _syncBranch0();
+ }
+
+ private boolean _syncBranch0() {
if (getControlPoint() != null) {
if (getControlPoint().isDualInline()) {
branch0 = null;
return false;
}
if (branch0 != null) {
- if (branch0.getControlPoint() != null && branch0.getPipeRun() != null) {
+ if (branch0.getControlPoint() != null) {
PipeControlPoint branchPoint = getBranchPoint();
PipeControlPoint pcp = branch0.getControlPoint();
// TODO, relying that the other direction is connected.
_connectNext(branchPoint, pcp);
} else if (prev){
_connectPrev(branchPoint, pcp);
+ } else {
+ return false;
}
+
} else {
return false;
}
} else if (getControlPoint().getSubPoint().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;
}
} else {
return false;
@Override
public void remove() {
PipeControlPoint pcp = getControlPoint();
- if (pcp != null) {
+ // Second check is needed, when remove process is initiated from control point.
+ if (pcp != null && pcp.getPipelineComponent() != null) {
pcp.remove();
}
super.remove();
}
-
+
@Override
protected double[] getColor() {
if (getControlPoint() == null || !getControlPoint().isFixed())