package org.apache.wicket.examples.tree.content;
import java.util.Optional;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.examples.tree.Foo;
import org.apache.wicket.extensions.markup.html.repeater.tree.AbstractTree;
import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
import org.apache.wicket.extensions.markup.html.repeater.util.ProviderSubset;
import org.apache.wicket.model.IModel;
@author
public class MultiSelectableFolderContent extends Content
{
private static final long serialVersionUID = 1L;
private ProviderSubset<Foo> selected;
public MultiSelectableFolderContent(ITreeProvider<Foo> provider)
{
selected = new ProviderSubset<>(provider, false);
}
@Override
public void detach()
{
selected.detach();
}
protected boolean isSelected(Foo foo)
{
return selected.contains(foo);
}
protected void toggle(Foo foo, AbstractTree<Foo> tree, final Optional<AjaxRequestTarget> targetOptional)
{
if (isSelected(foo))
{
selected.remove(foo);
}
else
{
selected.add(foo);
}
targetOptional.ifPresent(target -> tree.updateNode(foo, target));
}
@Override
public Component newContentComponent(String id, final AbstractTree<Foo> tree, IModel<Foo> model)
{
return new Folder<Foo>(id, tree, model)
{
private static final long serialVersionUID = 1L;
@Override
protected boolean isClickable()
{
return true;
}
@Override
protected void onClick(Optional<AjaxRequestTarget> targetOptional)
{
MultiSelectableFolderContent.this.toggle(getModelObject(), tree, targetOptional);
}
@Override
protected boolean isSelected()
{
return MultiSelectableFolderContent.this.isSelected(getModelObject());
}
};
}
}