package sushi.application.components.tree; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState; import org.apache.wicket.extensions.markup.html.repeater.tree.ISortableTreeProvider; import org.apache.wicket.extensions.markup.html.repeater.util.SingleSortState; import sushi.application.components.table.model.AbstractDataProvider; import sushi.event.attribute.SushiAttribute; /** * wraps the given tree nodes */ public class SushiAttributeTreeProvider extends AbstractDataProvider implements ISortableTreeProvider<SushiAttribute, String> { private static final long serialVersionUID = 1L; private List<SushiAttribute> treeNodes; private List<SushiAttribute> selectedTreeNodes; /** * constructor */ public SushiAttributeTreeProvider() { this.treeNodes = new ArrayList<SushiAttribute>(); this.selectedTreeNodes = new ArrayList<SushiAttribute>(); } /** * constructor * * @param list root nodes of the tree, child nodes are accessed by this component automatically */ public SushiAttributeTreeProvider(List<SushiAttribute> list) { this(); this.treeNodes = list; } @Override public void detach() { } @Override public Iterator<? extends SushiAttribute> getRoots() { return treeNodes.iterator(); } @Override public boolean hasChildren(SushiAttribute node) { return node.getParent() == null || !node.getChildren().isEmpty(); } @Override public Iterator<? extends SushiAttribute> getChildren(SushiAttribute node) { return node.getChildren().iterator(); } @Override public SushiAttributeTreeModel model(SushiAttribute node) { return new SushiAttributeTreeModel(treeNodes, node); } @Override public void selectEntry(int entryId) { for (SushiAttribute node : treeNodes) { if (node.getID() == entryId) { selectedTreeNodes.add(node); return; } } } @Override public void deselectEntry(int entryId) { for (SushiAttribute node : treeNodes) { if (node.getID() == entryId) { selectedTreeNodes.remove(node); return; } } } @Override public boolean isEntrySelected(int entryId) { for (SushiAttribute node : selectedTreeNodes) { if (node.getID() == entryId) { return true; } } return false; } public List<SushiAttribute> getSelectedAttributes() { return selectedTreeNodes; } @Override public ISortState<String> getSortState() { return new SingleSortState<String>(); } @Override public Object getEntry(int entryId) { for (SushiAttribute node : treeNodes) { if (node.getID() == entryId) { return node; } } return null; } }