package com.xrosstools.xunit.editor.model;
public class BiBranchNode extends CompositeUnitNode {
private ValidatorNode validator;
private UnitNodePanel unitsPanel = new UnitNodePanel(this, 2);
private EndPointNode endPoint = new EndPointNode();
public BiBranchNode(boolean empty){
super("a bibranch", StructureType.bi_branch);
if(empty)
return;
setValidator(new ValidatorNode());
unitsPanel.add(createSampleNode("valid node"));
unitsPanel.add(createSampleNode("invalide node"));
}
public BiBranchNode(){
this(false);
}
public BiBranchNode(ValidatorNode validatorNode, UnitNode validNode){
this(true);
setValidator(validatorNode);
unitsPanel.add(validNode);
}
public String getDefaultImplName(){
return DEFAULT_BI_BRANCH_IMPL;
}
protected String getCategory(String id) {
return id == PROP_CLASS || id == PROP_REFERENCE ?
CATEGORY_OPTIONAL : CATEGORY_COMMON;
}
public ValidatorNode getValidator() {
return validator;
}
public UnitNode getValidUnit() {
return unitsPanel.get(INDEX_VALID);
}
public UnitNode getInvalidUnit() {
return unitsPanel.get(INDEX_INVALID);
}
public void setValidUnit(UnitNode unit) {
unitsPanel.set(INDEX_VALID, unit);
}
public void setInvalidUnit(UnitNode unit) {
unitsPanel.set(INDEX_INVALID, unit);
}
public void setValidator(ValidatorNode validator) {
this.validator = validator;
reconnect();
}
public void reconnect(){
UnitNode validUnit = getValidUnit();
UnitNode invalidUnit = getInvalidUnit();
removeAllOutputs(validator);
removeAllInputs(endPoint);
removeAllConnections(validUnit);
removeAllConnections(invalidUnit);
if(validUnit == null && invalidUnit == null){
UnitNodeConnection.linkStart(validator, endPoint, MSG_EMPTY);
firePropertyChange(PROP_NODE);
return;
}
UnitNodeConnection.linkStart(validator, validUnit).setPropName(PROP_VALID_LABEL);
UnitNodeConnection.linkEnd(validUnit, endPoint);
UnitNodeConnection.linkStart(validator, invalidUnit).setPropName(PROP_INVALID_LABEL);
UnitNodeConnection.linkEnd(invalidUnit, endPoint);
if(validUnit != null && invalidUnit != null){
firePropertyChange(PROP_NODE);
return;
}
// Using loop router to make sure the link not pass the unit area
UnitNodeConnection.linkStart(validator, endPoint, unitsPanel).setFirstHalf(invalidUnit == null);
firePropertyChange(PROP_NODE);
}
public UnitNode getStartNode(){
return getValidator();
}
public UnitNodeContainer getContainerNode(){
return unitsPanel;
}
public UnitNode getEndNode(){
return endPoint;
}
}