X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=plugins%2Forg.argeo.slc.client.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fcommands%2FDeleteItems.java;h=68865282546426501c1a03c2f2a0afa5c06aad24;hb=018795e1c7fb82445c43dcb28fdc515e8cb624ac;hp=5858f67be18883789ac6cbf04eb8c1cf55ec45f7;hpb=2fd714f3b2c3bf3168e8a2a9b9d8e5e999e0af65;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/DeleteItems.java b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/DeleteItems.java index 5858f67be..688652825 100644 --- a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/DeleteItems.java +++ b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/DeleteItems.java @@ -15,9 +15,9 @@ */ package org.argeo.slc.client.ui.commands; -import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; -import java.util.List; +import java.util.Map; import javax.jcr.Node; import javax.jcr.RepositoryException; @@ -54,7 +54,7 @@ public class DeleteItems extends AbstractHandler { .getActiveWorkbenchWindow(event).getActivePage().getSelection(); // confirmation - StringBuffer buf = new StringBuffer(""); + StringBuilder buf = new StringBuilder(""); Iterator lst = ((IStructuredSelection) selection).iterator(); while (lst.hasNext()) { Object obj = lst.next(); @@ -67,7 +67,7 @@ public class DeleteItems extends AbstractHandler { String msg = "Nothing to delete"; // remove last separator if (buf.lastIndexOf(", ") > -1) { - msg = "Do you want to delete following objects: " + msg = "Do you want to delete following objects (and their children): " + buf.substring(0, buf.lastIndexOf(", ")) + "?"; } Boolean ok = MessageDialog.openConfirm( @@ -81,29 +81,37 @@ public class DeleteItems extends AbstractHandler { protected IStatus run(IProgressMonitor monitor) { if (selection != null && selection instanceof IStructuredSelection) { - List nodes = new ArrayList(); + Map nodes = new HashMap(); Iterator it = ((IStructuredSelection) selection) .iterator(); Object obj = null; - while (it.hasNext()) { - obj = it.next(); - if (obj instanceof ResultFolder) { - Node node = ((ResultFolder) obj).getNode(); - nodes.add(node); - } else if (obj instanceof SingleResultNode) { - Node node = ((SingleResultNode) obj).getNode(); - nodes.add(node); - } - } try { + + while (it.hasNext()) { + obj = it.next(); + if (obj instanceof ResultFolder) { + Node node = ((ResultFolder) obj).getNode(); + nodes.put(node.getPath(), node); + } else if (obj instanceof SingleResultNode) { + Node node = ((SingleResultNode) obj).getNode(); + nodes.put(node.getPath(), node); + } + } if (!nodes.isEmpty()) { - Session session = nodes.get(0).getSession(); + Session session = null; monitor.beginTask("Delete results", nodes.size()); - for (Node node : nodes) { - Node parent = node.getParent(); - node.remove(); - ResultParentUtils.updatePassedStatus(parent, - true); + for (String path : nodes.keySet()) { + if (session == null) + session = nodes.get(path).getSession(); + + // check if the item has not already been + // deleted while deleting one of its ancestor + if (session.itemExists(path)) { + Node parent = nodes.get(path).getParent(); + nodes.get(path).remove(); + ResultParentUtils.updatePassedStatus( + parent, true); + } monitor.worked(1); } session.save();