]> git.argeo.org Git - gpl/argeo-slc.git/blob - eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/commands/UpdateModule.java
Fix using UI component in JOb
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.client.ui / src / main / java / org / argeo / slc / client / ui / commands / UpdateModule.java
1 package org.argeo.slc.client.ui.commands;
2
3 import java.util.HashMap;
4 import java.util.Iterator;
5 import java.util.Map;
6
7 import javax.jcr.Node;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11 import org.argeo.slc.BasicNameVersion;
12 import org.argeo.slc.NameVersion;
13 import org.argeo.slc.SlcException;
14 import org.argeo.slc.deploy.ModulesManager;
15 import org.argeo.slc.jcr.SlcNames;
16 import org.argeo.slc.jcr.SlcTypes;
17 import org.eclipse.core.commands.AbstractHandler;
18 import org.eclipse.core.commands.ExecutionEvent;
19 import org.eclipse.core.commands.ExecutionException;
20 import org.eclipse.core.runtime.IProgressMonitor;
21 import org.eclipse.core.runtime.IStatus;
22 import org.eclipse.core.runtime.Status;
23 import org.eclipse.core.runtime.jobs.Job;
24 import org.eclipse.jface.viewers.ISelection;
25 import org.eclipse.jface.viewers.IStructuredSelection;
26 import org.eclipse.ui.handlers.HandlerUtil;
27
28 /** Deletes one or many results */
29 public class UpdateModule extends AbstractHandler {
30 private final static Log log = LogFactory.getLog(UpdateModule.class);
31
32 private ModulesManager modulesManager;
33
34 public Object execute(ExecutionEvent event) throws ExecutionException {
35 final ISelection selection = HandlerUtil
36 .getActiveWorkbenchWindow(event).getActivePage().getSelection();
37 if (selection != null && selection instanceof IStructuredSelection) {
38
39 Job job = new Job("Update modules") {
40
41 @Override
42 protected IStatus run(IProgressMonitor monitor) {
43 Iterator<?> it = ((IStructuredSelection) selection)
44 .iterator();
45 Object obj = null;
46 try {
47 Map<String, Node> nodes = new HashMap<String, Node>();
48 nodes: while (it.hasNext()) {
49 obj = it.next();
50 if (obj instanceof Node) {
51 Node node = (Node) obj;
52 Node executionModuleNode = null;
53 while (executionModuleNode == null) {
54 if (node.isNodeType(SlcTypes.SLC_EXECUTION_MODULE)) {
55 executionModuleNode = node;
56 }
57 node = node.getParent();
58 if (node.getPath().equals("/"))// root
59 continue nodes;
60 }
61
62 if (!nodes.containsKey(executionModuleNode
63 .getPath()))
64 nodes.put(executionModuleNode.getPath(),
65 executionModuleNode);
66 }
67 }
68
69 monitor.beginTask("Update modules", nodes.size());
70 for (Node executionModuleNode : nodes.values()) {
71 monitor.subTask("Update "
72 + executionModuleNode.getName());
73 NameVersion nameVersion = new BasicNameVersion(
74 executionModuleNode.getProperty(
75 SlcNames.SLC_NAME).getString(),
76 executionModuleNode.getProperty(
77 SlcNames.SLC_VERSION).getString());
78 modulesManager.upgrade(nameVersion);
79 monitor.worked(1);
80 log.info("Module " + nameVersion + " updated");
81 }
82 return Status.OK_STATUS;
83 } catch (Exception e) {
84 throw new SlcException("Cannot update module " + obj, e);
85 // return Status.CANCEL_STATUS;
86 }
87 }
88 };
89 job.setUser(true);
90 job.schedule();
91 }
92 return null;
93 }
94
95 public void setModulesManager(ModulesManager modulesManager) {
96 this.modulesManager = modulesManager;
97 }
98
99 }