X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=eclipse%2Fplugins%2Forg.argeo.slc.client.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fcommands%2FUpdateModule.java;h=bcae4a71dfa279774fb06941337d493585c22678;hb=a8a48e55e668909147b8ebef6b5d52f0fa1eab84;hp=341ac6d24536387eb623f55eb56ac0b21261cb17;hpb=0b7eb0b64c545d0362d126581816138b609a2026;p=gpl%2Fargeo-slc.git diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/UpdateModule.java b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/UpdateModule.java index 341ac6d24..bcae4a71d 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/UpdateModule.java +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/UpdateModule.java @@ -1,6 +1,8 @@ package org.argeo.slc.client.ui.commands; +import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import javax.jcr.Node; @@ -9,12 +11,17 @@ import org.apache.commons.logging.LogFactory; import org.argeo.eclipse.ui.Error; import org.argeo.slc.BasicNameVersion; import org.argeo.slc.NameVersion; +import org.argeo.slc.SlcException; import org.argeo.slc.deploy.ModulesManager; import org.argeo.slc.jcr.SlcNames; import org.argeo.slc.jcr.SlcTypes; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; @@ -26,29 +33,62 @@ public class UpdateModule extends AbstractHandler { private ModulesManager modulesManager; public Object execute(ExecutionEvent event) throws ExecutionException { - ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event) - .getActivePage().getSelection(); + final ISelection selection = HandlerUtil + .getActiveWorkbenchWindow(event).getActivePage().getSelection(); if (selection != null && selection instanceof IStructuredSelection) { - Iterator it = ((IStructuredSelection) selection).iterator(); - Object obj = null; - try { - while (it.hasNext()) { - obj = it.next(); - if (obj instanceof Node) { - Node node = (Node) obj; - if (node.isNodeType(SlcTypes.SLC_EXECUTION_MODULE)) { + + Job job = new Job("Update modules") { + + @Override + protected IStatus run(IProgressMonitor monitor) { + Iterator it = ((IStructuredSelection) selection) + .iterator(); + Object obj = null; + try { + Map nodes = new HashMap(); + nodes: while (it.hasNext()) { + obj = it.next(); + if (obj instanceof Node) { + Node node = (Node) obj; + Node executionModuleNode = null; + while (executionModuleNode == null) { + if (node.isNodeType(SlcTypes.SLC_EXECUTION_MODULE)) { + executionModuleNode = node; + } + node = node.getParent(); + if (node.getPath().equals("/"))// root + continue nodes; + } + + if (!nodes.containsKey(executionModuleNode + .getPath())) + nodes.put(executionModuleNode.getPath(), + executionModuleNode); + } + } + + monitor.beginTask("Update modules", nodes.size()); + for (Node executionModuleNode : nodes.values()) { + monitor.subTask("Update " + + executionModuleNode.getName()); NameVersion nameVersion = new BasicNameVersion( - node.getProperty(SlcNames.SLC_NAME) - .getString(), node.getProperty( + executionModuleNode.getProperty( + SlcNames.SLC_NAME).getString(), + executionModuleNode.getProperty( SlcNames.SLC_VERSION).getString()); modulesManager.upgrade(nameVersion); + monitor.worked(1); log.info("Module " + nameVersion + " updated"); } + return Status.OK_STATUS; + } catch (Exception e) { + throw new SlcException("Cannot update module " + obj, e); + // return Status.CANCEL_STATUS; } } - } catch (Exception e) { - Error.show("Cannot update " + obj, e); - } + }; + job.setUser(true); + job.schedule(); } return null; }