package com.xrosstools.xunit.editor.model;
import java.util.List;
public class ChainNode extends CompositeUnitNode {
private StartPointNode startPoint = new StartPointNode();
private UnitNodePanel unitsPanel = new UnitNodePanel(this, false);
private EndPointNode endPoint = new EndPointNode();
public UnitNode getStartNode(){
return startPoint;
}
public UnitNodeContainer getContainerNode(){
return unitsPanel;
}
public UnitNode getEndNode(){
return endPoint;
}
public ChainNode(boolean empty){
super("a chain", StructureType.chain);
if(empty){
reconnect();
return;
}
addUnit(createSampleNode("unit 1"));
addUnit(createSampleNode("unit 2"));
addUnit(createSampleNode("unit 3"));
}
public ChainNode(UnitNode first, UnitNode second){
this(true);
addUnit(first);
addUnit(second);
}
public ChainNode(){
this(false);
}
public String getDefaultImplName(){
return DEFAULT_CHAIN_IMPL;
}
protected String getCategory(String id) {
return id == PROP_CLASS || id == PROP_REFERENCE ?
CATEGORY_OPTIONAL : CATEGORY_COMMON;
}
public List<UnitNode> getUnits() {
return unitsPanel.getAll();
}
public void addUnit(UnitNode unit) {
unitsPanel.add(unit);
}
public void reconnect(){
List<UnitNode> all = unitsPanel.getAll();
all.add(endPoint);
removeAllOutputs(startPoint);
UnitNode prev = startPoint;
for(UnitNode next: all){
removeAllConnections(next);
UnitNodeConnection.linkStart(prev, next);
prev = next;
}
if(unitsPanel.size() == 0)
endPoint.setInputLabel(MSG_EMPTY);
firePropertyChange(PROP_NODE);
}
}