From: Mathieu Baudier Date: Tue, 28 Jun 2011 15:30:08 +0000 (+0000) Subject: Improve refreshing and module update X-Git-Tag: argeo-slc-2.1.7~920 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=c90dcc1a641efb51cccfc9496055e16bf0463d0a;hp=a04bdc0fac50a960370e068bf854a83e503b0ab7;p=gpl%2Fargeo-slc.git Improve refreshing and module update git-svn-id: https://svn.argeo.org/slc/trunk@4636 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- 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..2fe21da11 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; @@ -15,6 +17,10 @@ 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 +32,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) { + Error.show("Cannot update " + obj, e); + return Status.CANCEL_STATUS; } } - } catch (Exception e) { - Error.show("Cannot update " + obj, e); - } + }; + job.setUser(true); + job.schedule(); } return null; } diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java index db5490391..f373a1672 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java @@ -35,6 +35,10 @@ import org.argeo.slc.execution.ExecutionModulesManager; import org.argeo.slc.jcr.SlcJcrConstants; import org.argeo.slc.jcr.SlcNames; import org.argeo.slc.jcr.SlcTypes; +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.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; @@ -336,15 +340,33 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, String name = node.getProperty(SLC_NAME).getString(); String version = node.getProperty(SLC_VERSION) .getString(); - NameVersion nameVersion = new BasicNameVersion(name, - version); + final NameVersion nameVersion = new BasicNameVersion( + name, version); Boolean started = node.getProperty(SLC_STARTED) .getBoolean(); + + Job job; if (started) { - modulesManager.stop(nameVersion); + job = new Job("Stop " + nameVersion) { + protected IStatus run(IProgressMonitor monitor) { + monitor.beginTask("Stop " + nameVersion, 1); + modulesManager.stop(nameVersion); + monitor.worked(1); + return Status.OK_STATUS; + } + }; } else { - modulesManager.start(nameVersion); + job = new Job("Start " + nameVersion) { + protected IStatus run(IProgressMonitor monitor) { + monitor.beginTask("Start " + nameVersion, 1); + modulesManager.start(nameVersion); + monitor.worked(1); + return Status.OK_STATUS; + } + }; } + job.setUser(true); + job.schedule(); } else { String path = node.getPath(); // TODO factorize with editor