package sushi.application.components.tree;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
import sushi.event.collection.SushiTreeElement;
/**
* wraps the given tree nodes
*
* @param <T>
*/
public class TreeProvider<T> implements ITreeProvider<SushiTreeElement<T>> {
private static final long serialVersionUID = 1L;
private ArrayList<SushiTreeElement<T>> treeNodes;
/**
* constructor
*
* @param treeNodes root nodes of the tree, child nodes are accessed by this component automatically
*/
public TreeProvider(ArrayList<SushiTreeElement<T>> treeNodes) {
this.treeNodes = treeNodes;
}
@Override
public void detach() {
}
@Override
public Iterator<? extends SushiTreeElement<T>> getRoots() {
return treeNodes.iterator();
}
public void setRoots(ArrayList<SushiTreeElement<T>> treeNodes) {
this.treeNodes = treeNodes;
}
@Override
public boolean hasChildren(SushiTreeElement<T> node) {
return node.getParent() == null || !node.getChildren().isEmpty();
}
@Override
public Iterator<? extends SushiTreeElement<T>> getChildren(SushiTreeElement<T> node) {
return node.getChildren().iterator();
}
@Override
public TreeElementModel<T> model(SushiTreeElement<T> node) {
return new TreeElementModel<T>(treeNodes, node);
}
/**
* Returns the next free ID for an new element.
* @return
*/
public int getNextID() {
int highestNumber = 0;
for(SushiTreeElement<T> element : treeNodes) {
highestNumber = element.getID() > highestNumber ? element.getID() : highestNumber;
}
return ++highestNumber;
}
}