/**
* Removes an Item specified by the itemId from the underlying container and
- * from the hierarcy.
+ * from the hierarchy.
*
* @param itemId
* the ID of the Item to be removed.
return success;
}
+ /**
+ * Removes the Item identified by given itemId and all its children.
+ *
+ * @see #removeItem(Object)
+ * @param itemId
+ * the identifier of the Item to be removed
+ * @return true if the operation succeeded
+ */
+ public boolean removeItemRecursively(Object itemId) {
+ return HierarchicalContainer.removeItemRecursively(this, itemId);
+ }
+
/**
* Adds a new Property to all Items in the Container.
*
}
/**
- * Removes the Item identified by ItemId from the Container and all its
- * children.
+ * Removes the Item identified by given itemId and all its children.
*
* @see #removeItem(Object)
* @param itemId
- * the identifier of the Item to remove
+ * the identifier of the Item to be removed
* @return true if the operation succeeded
*/
public boolean removeItemRecursively(Object itemId) {
+ return removeItemRecursively(this, itemId);
+ }
+
+ /**
+ * Removes the Item identified by given itemId and all its children from the
+ * given Container.
+ *
+ * @param container
+ * the container where the item is to be removed
+ * @param itemId
+ * the identifier of the Item to be removed
+ * @return true if the operation succeeded
+ */
+ public static boolean removeItemRecursively(
+ Container.Hierarchical container, Object itemId) {
boolean success = true;
- Collection<Object> children2 = getChildren(itemId);
+ Collection<?> children2 = container.getChildren(itemId);
if (children2 != null) {
Object[] array = children2.toArray();
for (int i = 0; i < array.length; i++) {
- boolean removeItemRecursively = removeItemRecursively(array[i]);
+ boolean removeItemRecursively = removeItemRecursively(
+ container, array[i]);
if (!removeItemRecursively) {
success = false;
}
}
}
- boolean removeItem = removeItem(itemId);
- if (!removeItem) {
- success = false;
+ // remove the root of subtree if children where succesfully removed
+ if (success) {
+ success = container.removeItem(itemId);
}
return success;
package com.vaadin.tests.dd;
import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.data.util.ContainerHierarchicalWrapper;
+import com.vaadin.event.Action;
import com.vaadin.event.DataBoundTransferable;
+import com.vaadin.event.Action.Handler;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.acceptCriteria.AcceptAll;
tree1.setDropHandler(dropHandler);
+ Handler actionHandler = new Handler() {
+
+ private Action[] actions = new Action[] { new Action("Remove") };
+
+ public void handleAction(Action action, Object sender, Object target) {
+ ContainerHierarchicalWrapper containerDataSource = (ContainerHierarchicalWrapper) tree1
+ .getContainerDataSource();
+ containerDataSource.removeItemRecursively(target);
+ }
+
+ public Action[] getActions(Object target, Object sender) {
+ return actions;
+ }
+ };
+ tree1.addActionHandler(actionHandler);
+
l.addComponent(tree1);
getLayout().setSizeFull();