X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Fplugins%2Forg.argeo.slc.client.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fcommands%2FUpdateModule.java;h=225bd4177070b9c2e9670581862acb4478f1b34c;hb=8908d07cc1fd6ac0a274c460bbd40652816ca054;hp=2fe21da1111f16feb71e85d2407d7cffc99696c6;hpb=c90dcc1a641efb51cccfc9496055e16bf0463d0a;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 2fe21da11..225bd4177 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,3 +1,18 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * 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.slc.client.ui.commands; import java.util.HashMap; @@ -8,9 +23,9 @@ import javax.jcr.Node; import org.apache.commons.logging.Log; 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; @@ -35,61 +50,74 @@ public class UpdateModule extends AbstractHandler { final ISelection selection = HandlerUtil .getActiveWorkbenchWindow(event).getActivePage().getSelection(); if (selection != null && selection instanceof IStructuredSelection) { + UpdateJob job = new UpdateJob(selection); + job.setUser(true); + job.schedule(); + } + return null; + } - Job job = new Job("Update modules") { + private class UpdateJob extends Job { + private final IStructuredSelection selection; - @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; - } + public UpdateJob(ISelection selection) { + super("Update modules"); + this.selection = ((IStructuredSelection) selection); + } - if (!nodes.containsKey(executionModuleNode - .getPath())) - nodes.put(executionModuleNode.getPath(), - executionModuleNode); + @Override + protected IStatus run(IProgressMonitor monitor) { + Iterator it = 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; } - monitor.beginTask("Update modules", nodes.size()); - for (Node executionModuleNode : nodes.values()) { - monitor.subTask("Update " - + executionModuleNode.getName()); - NameVersion nameVersion = new BasicNameVersion( - 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; + if (!nodes.containsKey(executionModuleNode.getPath())) + nodes.put(executionModuleNode.getPath(), + executionModuleNode); } } - }; - job.setUser(true); - job.schedule(); + + monitor.beginTask("Update modules", nodes.size()); + for (Node executionModuleNode : nodes.values()) { + monitor.subTask("Update " + executionModuleNode.getName()); + NameVersion nameVersion = new BasicNameVersion( + executionModuleNode.getProperty(SlcNames.SLC_NAME) + .getString(), executionModuleNode + .getProperty(SlcNames.SLC_VERSION) + .getString()); + modulesManager.upgrade(nameVersion); + monitor.worked(1); + log.info("Module " + nameVersion + " updated"); + if (monitor.isCanceled()) + return Status.CANCEL_STATUS; + } + return Status.OK_STATUS; + } catch (Exception e) { + throw new SlcException("Cannot update module " + obj, e); + // return Status.CANCEL_STATUS; + } } - return null; + + @Override + protected void canceling() { + getThread().interrupt(); + super.canceling(); + } + } public void setModulesManager(ModulesManager modulesManager) {