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=0dcc341dafa9c72011b01491bfa8631b4e71ede2;hp=08d4798d82d415fe27a6d035ad110406658b11fa;hpb=78a1f1f21b5785919ffe25ddb9baf12aadff5f37;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 08d4798d8..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(); @@ -123,4 +131,4 @@ public class DeleteItems extends AbstractHandler { job.schedule(); return null; } -} +} \ No newline at end of file