package com.xrosstools.xunit.editor.model;
public class BranchNode extends CompositeUnitNode {
private LocatorNode locator;
private UnitNodePanel unitsPanel = new UnitNodePanel(this);
private EndPointNode endPoint = new EndPointNode();
public BranchNode(boolean empty){
super("a branch", StructureType.branch);
if(empty)
return;
init();
}
public BranchNode(){
this(false);
}
public BranchNode(LocatorNode locator, UnitNode unit){
this(true);
setLocator(locator);
addUnit("key 1", unit);
}
private void init(){
setLocator(new LocatorNode());
for(int i = 0; i < 3; i++)
addUnit("key" + (i + 1), createSampleNode("node " + (i + 1)));
}
public String getDefaultImplName(){
return DEFAULT_BRANCH_IMPL;
}
protected String getCategory(String id) {
return id == PROP_CLASS || id == PROP_REFERENCE ?
CATEGORY_OPTIONAL : CATEGORY_COMMON;
}
public LocatorNode getLocator() {
return locator;
}
public void addUnit(String key, UnitNode unit){
unitsPanel.add(unit);
unit.setInputLabel(key);
}
public void setLocator(LocatorNode locator) {
LocatorNode oldLocator = this.locator;
this.locator = locator;
String key;
for(UnitNode node: unitsPanel.getAll()){
key = MSG_NOT_SPECIFIED;
if(oldLocator != null){
key = node.getInputLabel();
node.removeAllInputs();
}
UnitNodeConnection.linkStart(locator, node, key);
}
firePropertyChange(PROP_NODE);
}
public void checkLink(){
UnitNodeConnection.remove(locator, endPoint);
if(unitsPanel.size() == 0)
UnitNodeConnection.linkStart(locator, endPoint, MSG_EMPTY);
}
public UnitNode getStartNode(){
return getLocator();
}
public UnitNodeContainer getContainerNode(){
return unitsPanel;
}
public UnitNode getEndNode(){
return endPoint;
}
public void unitAdded(int index, UnitNode unit) {
unit.removeAllConnections();
UnitNodeConnection.linkEnd(unit, endPoint);
UnitNodeConnection.linkStart(locator, unit, MSG_NOT_SPECIFIED);
checkLink();
firePropertyChange(PROP_NODE);
}
public void unitRemoved(UnitNode unit) {
unit.removeAllConnections();
}
}