1 package org
.argeo
.slc
.client
.ui
.commands
;
3 import java
.util
.HashMap
;
4 import java
.util
.Iterator
;
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
;
28 /** Deletes one or many results */
29 public class UpdateModule
extends AbstractHandler
{
30 private final static Log log
= LogFactory
.getLog(UpdateModule
.class);
32 private ModulesManager modulesManager
;
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
);
45 private class UpdateJob
extends Job
{
46 private final IStructuredSelection selection
;
48 public UpdateJob(ISelection selection
) {
49 super("Update modules");
50 this.selection
= ((IStructuredSelection
) selection
);
54 protected IStatus
run(IProgressMonitor monitor
) {
55 Iterator
<?
> it
= selection
.iterator();
58 Map
<String
, Node
> nodes
= new HashMap
<String
, Node
>();
59 nodes
: while (it
.hasNext()) {
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
;
68 node
= node
.getParent();
69 if (node
.getPath().equals("/"))// root
73 if (!nodes
.containsKey(executionModuleNode
.getPath()))
74 nodes
.put(executionModuleNode
.getPath(),
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
)
87 modulesManager
.upgrade(nameVersion
);
89 log
.info("Module " + nameVersion
+ " updated");
90 if (monitor
.isCanceled())
91 return Status
.CANCEL_STATUS
;
93 return Status
.OK_STATUS
;
94 } catch (Exception e
) {
95 throw new SlcException("Cannot update module " + obj
, e
);
96 // return Status.CANCEL_STATUS;
101 protected void canceling() {
102 getThread().interrupt();
108 public void setModulesManager(ModulesManager modulesManager
) {
109 this.modulesManager
= modulesManager
;