]> git.argeo.org Git - gpl/argeo-slc.git/blob - cms/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/commands/UpdateModule.java
7cf8509b797724adff575f7c7f6bb3dd6c2bed4b
[gpl/argeo-slc.git] / cms / org.argeo.slc.client.ui / src / 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.SlcNames;
15 import org.argeo.slc.SlcTypes;
16 import org.argeo.slc.deploy.ModulesManager;
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 UpdateJob job = new UpdateJob(selection);
39 job.setUser(true);
40 job.schedule();
41 }
42 return null;
43 }
44
45 private class UpdateJob extends Job {
46 private final IStructuredSelection selection;
47
48 public UpdateJob(ISelection selection) {
49 super("Update modules");
50 this.selection = ((IStructuredSelection) selection);
51 }
52
53 @Override
54 protected IStatus run(IProgressMonitor monitor) {
55 Iterator<?> it = selection.iterator();
56 Object obj = null;
57 try {
58 Map<String, Node> nodes = new HashMap<String, Node>();
59 nodes: while (it.hasNext()) {
60 obj = it.next();
61 if (obj instanceof Node) {
62 Node node = (Node) obj;
63 Node executionModuleNode = null;
64 while (executionModuleNode == null) {
65 if (node.isNodeType(SlcTypes.SLC_EXECUTION_MODULE)) {
66 executionModuleNode = node;
67 }
68 node = node.getParent();
69 if (node.getPath().equals("/"))// root
70 continue nodes;
71 }
72
73 if (!nodes.containsKey(executionModuleNode.getPath()))
74 nodes.put(executionModuleNode.getPath(),
75 executionModuleNode);
76 }
77 }
78
79 monitor.beginTask("Update modules", nodes.size());
80 for (Node executionModuleNode : nodes.values()) {
81 monitor.subTask("Update " + executionModuleNode.getName());
82 NameVersion nameVersion = new BasicNameVersion(
83 executionModuleNode.getProperty(SlcNames.SLC_NAME)
84 .getString(), executionModuleNode
85 .getProperty(SlcNames.SLC_VERSION)
86 .getString());
87 modulesManager.upgrade(nameVersion);
88 monitor.worked(1);
89 log.info("Module " + nameVersion + " updated");
90 if (monitor.isCanceled())
91 return Status.CANCEL_STATUS;
92 }
93 return Status.OK_STATUS;
94 } catch (Exception e) {
95 throw new SlcException("Cannot update module " + obj, e);
96 // return Status.CANCEL_STATUS;
97 }
98 }
99
100 @Override
101 protected void canceling() {
102 getThread().interrupt();
103 super.canceling();
104 }
105
106 }
107
108 public void setModulesManager(ModulesManager modulesManager) {
109 this.modulesManager = modulesManager;
110 }
111
112 }