X-Git-Url: http://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;h=cfcac1354b50dbb024b88e60bd0e8bd4f078b14d;hb=3a3d316af102ba410d1d9e6de349d0c8f7ac044f;hp=5dab8cf722ec75e67abcf767d476679ee7eec71a;hpb=c0b7b3f9d1781d074ab35d24017042fa9415e1e4;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..cfcac1354 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,13 +1,31 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ 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; 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.argeo.jcr.ui.explorer.model.SingleJcrNodeElem; +import org.argeo.jcr.ui.explorer.model.WorkspaceElem; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -21,10 +39,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 +51,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 SingleJcrNodeElem) { + node = ((SingleJcrNodeElem) obj).getNode(); + curPath = node.getSession().getWorkspace().getName(); + curPath += "/" + node.getPath(); + } else if (obj instanceof WorkspaceElem) { + node = ((WorkspaceElem) 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)