X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fplugins%2Forg.argeo.jcr.ui.explorer%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fui%2Fexplorer%2Fcommands%2FGetNodeSize.java;fp=server%2Fplugins%2Forg.argeo.jcr.ui.explorer%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fui%2Fexplorer%2Fcommands%2FGetNodeSize.java;h=96f173b5ec4b8adbd175bad7f580160b2cfaabf7;hb=f8040c479e5c098c9ef1809baefd05c00dccdc63;hp=5dab8cf722ec75e67abcf767d476679ee7eec71a;hpb=3533f8ce0a5bca9e14044ce8ee6c6ff2b8040061;p=lgpl%2Fargeo-commons.git diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/GetNodeSize.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/GetNodeSize.java index 5dab8cf72..96f173b5e 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/GetNodeSize.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/GetNodeSize.java @@ -1,5 +1,9 @@ package org.argeo.jcr.ui.explorer.commands; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + import javax.jcr.Node; import org.argeo.eclipse.ui.ErrorFeedback; @@ -7,7 +11,6 @@ import org.argeo.jcr.JcrUtils; import org.argeo.jcr.ui.explorer.JcrExplorerPlugin; import org.argeo.jcr.ui.explorer.model.SingleJcrNode; import org.argeo.jcr.ui.explorer.model.WorkspaceNode; -import org.argeo.jcr.ui.explorer.views.GenericJcrBrowser; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -21,10 +24,11 @@ import org.eclipse.ui.handlers.HandlerUtil; public class GetNodeSize extends AbstractHandler { // private final static Log log = LogFactory.getLog(GetNodeSize.class); - public final static String ID = "org.argeo.jcr.ui.explorer.getNodeSize"; - public final static String DEFAULT_ICON_REL_PATH = "icons/getSize.gif"; - public final static String DEFAULT_LABEL = JcrExplorerPlugin - .getMessage("getNodeSizeCmdLbl"); + public final static String ID = JcrExplorerPlugin.ID + ".getNodeSize"; + + // public final static String DEFAULT_ICON_REL_PATH = "icons/getSize.gif"; + // public final static String DEFAULT_LABEL = JcrExplorerPlugin + // .getMessage("getNodeSizeCmdLbl"); public Object execute(ExecutionEvent event) throws ExecutionException { // JcrUtils.getRepositoryByAlias(repositoryRegister, @@ -32,30 +36,54 @@ public class GetNodeSize extends AbstractHandler { ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event) .getActivePage().getSelection(); - GenericJcrBrowser view = (GenericJcrBrowser) HandlerUtil - .getActiveWorkbenchWindow(event).getActivePage() - .findView(HandlerUtil.getActivePartId(event)); if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection) { - // We only get - IStructuredSelection iss = (IStructuredSelection) selection; - if (iss.size() > 1) - ErrorFeedback.show(JcrExplorerPlugin - .getMessage("warningInvalidMultipleSelection"), null); + // IStructuredSelection iss = (IStructuredSelection) selection; + // if (iss.size() > 1) + // ErrorFeedback.show(JcrExplorerPlugin + // .getMessage("warningInvalidMultipleSelection"), null); long size = 0; - Node node; - if (iss.getFirstElement() instanceof SingleJcrNode) - node = ((SingleJcrNode) iss.getFirstElement()).getNode(); - else if (iss.getFirstElement() instanceof WorkspaceNode) - node = ((WorkspaceNode) iss.getFirstElement()).getRootNode(); - else - // unvalid object type - return null; - size = JcrUtils.getNodeApproxSize(node); + Iterator it = ((IStructuredSelection) selection).iterator(); + + // as the size method is recursive, we keep track of nodes for which + // we already have computed size so that we don't count them twice. + // In a first approximation, we assume that the structure selection + // keep the nodes ordered. + // TODO : enhance that. + List importedPathes = new ArrayList(); + try { + nodesIt: while (it.hasNext()) { + Object obj = it.next(); + String curPath; + Node node; + if (obj instanceof SingleJcrNode) { + node = ((SingleJcrNode) obj).getNode(); + curPath = node.getSession().getWorkspace().getName(); + curPath += "/" + node.getPath(); + } else if (obj instanceof WorkspaceNode) { + node = ((WorkspaceNode) obj).getRootNode(); + curPath = node.getSession().getWorkspace().getName(); + } else + // unvalid object type + continue nodesIt; + + Iterator itPath = importedPathes.iterator(); + while (itPath.hasNext()) { + String refPath = itPath.next(); + if (curPath.startsWith(refPath)) + // Already done : skip node + continue nodesIt; + } + size += JcrUtils.getNodeApproxSize(node); + importedPathes.add(curPath); + } + } catch (Exception e) { + ErrorFeedback.show("Cannot Get size of selected node ", e); + } String[] labels = { "OK" }; Shell shell = HandlerUtil.getActiveWorkbenchWindow(event)