// $HeadURL$
// $Id$
//
// Copyright © 2006, 2010, 2011, 2012 by the President and Fellows of Harvard College.
//
// Screensaver is an open-source project developed by the ICCB-L and NSRB labs
// at Harvard Medical School. This software is distributed under the terms of
// the GNU General Public License.
package edu.harvard.med.screensaver.ui.arch.datatable.column;
import java.util.AbstractList;
import java.util.Collection;
import java.util.List;
import com.google.common.collect.Lists;
import org.apache.myfaces.custom.tree2.TreeNodeBase;
/**
* A TreeNode for a JSF Tree2 component that selects/deselects all of its selectable children nodes, but will not render
* its children.
*
* @author <a mailto="andrew_tolopko@hms.harvard.edu">Andrew Tolopko</a>
*/
public class SelectableColumnGroupTreeNode<R> extends TreeNodeBase
{
private static final long serialVersionUID = 1L;
class Children extends AbstractList<TreeNodeBase>
{
private List<TreeNodeBase> _columns = Lists.newArrayList();
@Override
public boolean add(TreeNodeBase e)
{
return _columns.add(e);
}
@Override
public void add(int index, TreeNodeBase element)
{
_columns.add(index, element);
}
@Override
public boolean addAll(Collection<? extends TreeNodeBase> c)
{
return _columns.addAll(c);
}
@Override
public boolean addAll(int index, Collection<? extends TreeNodeBase> c)
{
return _columns.addAll(index, c);
}
@Override
public TreeNodeBase get(int index)
{
return null;
}
@Override
public int size()
{
return 0;
}
List<TreeNodeBase> getTableColumns()
{
return _columns;
}
}
private Children _children = new Children();
private boolean _selected;
public SelectableColumnGroupTreeNode(String name)
{
super("selectableGroup", name, true);
}
public boolean isChecked()
{
return _selected;
}
public void setChecked(boolean checked)
{
_selected = checked;
for (Object child : _children.getTableColumns()) {
// TODO: eliminate these dual if checks by creating a SelectableTreeNode abstract base class
if (child instanceof SelectableColumnTreeNode) {
((SelectableColumnTreeNode) child).setChecked(checked);
}
if (child instanceof SelectableColumnGroupTreeNode) {
((SelectableColumnGroupTreeNode) child).setChecked(checked);
}
}
}
@Override
public List getChildren()
{
return _children;
}
}