1 package org
.argeo
.slc
.client
.ui
.views
;
3 import java
.io
.ByteArrayOutputStream
;
4 import java
.io
.IOException
;
5 import java
.util
.ArrayList
;
7 import java
.util
.Properties
;
10 import org
.apache
.commons
.io
.IOUtils
;
11 import org
.apache
.commons
.logging
.Log
;
12 import org
.apache
.commons
.logging
.LogFactory
;
13 import org
.argeo
.slc
.SlcException
;
14 import org
.argeo
.slc
.client
.oxm
.OxmInterface
;
15 import org
.argeo
.slc
.client
.ui
.ClientUiPlugin
;
16 import org
.argeo
.slc
.client
.ui
.controllers
.ProcessController
;
17 import org
.argeo
.slc
.client
.ui
.providers
.ExecutionModulesContentProvider
;
18 import org
.argeo
.slc
.client
.ui
.providers
.ExecutionModulesContentProvider
.FlowNode
;
19 import org
.argeo
.slc
.execution
.ExecutionModuleDescriptor
;
20 import org
.argeo
.slc
.process
.RealizedFlow
;
21 import org
.argeo
.slc
.process
.SlcExecution
;
22 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
23 import org
.eclipse
.jface
.viewers
.IContentProvider
;
24 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
25 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
26 import org
.eclipse
.jface
.viewers
.ITableLabelProvider
;
27 import org
.eclipse
.jface
.viewers
.LabelProvider
;
28 import org
.eclipse
.jface
.viewers
.TreeViewer
;
29 import org
.eclipse
.swt
.SWT
;
30 import org
.eclipse
.swt
.dnd
.DND
;
31 import org
.eclipse
.swt
.dnd
.DragSourceEvent
;
32 import org
.eclipse
.swt
.dnd
.DragSourceListener
;
33 import org
.eclipse
.swt
.dnd
.TextTransfer
;
34 import org
.eclipse
.swt
.dnd
.Transfer
;
35 import org
.eclipse
.swt
.graphics
.Image
;
36 import org
.eclipse
.swt
.widgets
.Composite
;
37 import org
.eclipse
.ui
.ISharedImages
;
38 import org
.eclipse
.ui
.PlatformUI
;
39 import org
.eclipse
.ui
.part
.ViewPart
;
41 public class ExecutionModulesView
extends ViewPart
{
42 private final static Log log
= LogFactory
43 .getLog(ExecutionModulesView
.class);
45 public static final String ID
= "org.argeo.slc.client.ui.executionModulesView";
47 private TreeViewer viewer
;
50 private IContentProvider contentProvider
;
51 private OxmInterface oxmBean
;
52 private ProcessController processController
;
54 public void createPartControl(Composite parent
) {
55 viewer
= new TreeViewer(parent
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
);
56 viewer
.setContentProvider(contentProvider
);
57 viewer
.setLabelProvider(new ViewLabelProvider());
58 viewer
.setInput(getViewSite());
59 viewer
.addDoubleClickListener(new ViewDoubleClickListener());
60 int operations
= DND
.DROP_COPY
| DND
.DROP_MOVE
;
61 Transfer
[] tt
= new Transfer
[] { TextTransfer
.getInstance() };
62 viewer
.addDragSupport(operations
, tt
, new ViewDragListener());
65 public void setFocus() {
66 viewer
.getControl().setFocus();
69 public TreeViewer
getViewer() {
73 public void refreshView() {
74 viewer
.setInput(getViewSite());
77 class ViewLabelProvider
extends LabelProvider
implements
79 public String
getColumnText(Object obj
, int index
) {
80 if (obj
instanceof ExecutionModulesContentProvider
.ExecutionModuleNode
) {
81 ExecutionModuleDescriptor emd
= ((ExecutionModulesContentProvider
.ExecutionModuleNode
) obj
)
84 .println("obj instanceof ExecutionModulesContentProvider.ExecutionModuleNode");
85 log
.debug("obj instanceof ExecutionModulesContentProvider.ExecutionModuleNode");
86 if (emd
.getLabel() != null) {
87 log
.debug("and label is : " + emd
.getLabel());
88 return emd
.getLabel();
90 log
.debug("label is null and text is : " + getText(emd
));
97 public Image
getColumnImage(Object obj
, int index
) {
101 public Image
getImage(Object obj
) {
102 if (obj
instanceof ExecutionModulesContentProvider
.AgentNode
)
103 return ClientUiPlugin
.getDefault().getImageRegistry()
105 else if (obj
instanceof ExecutionModulesContentProvider
.ExecutionModuleNode
)
106 return ClientUiPlugin
.getDefault().getImageRegistry()
107 .get("executionModule");
108 else if (obj
instanceof ExecutionModulesContentProvider
.FolderNode
)
109 return ClientUiPlugin
.getDefault().getImageRegistry()
111 else if (obj
instanceof ExecutionModulesContentProvider
.FlowNode
)
112 return ClientUiPlugin
.getDefault().getImageRegistry()
115 return PlatformUI
.getWorkbench().getSharedImages()
116 .getImage(ISharedImages
.IMG_OBJ_ELEMENT
);
120 class ViewDoubleClickListener
implements IDoubleClickListener
{
121 public void doubleClick(DoubleClickEvent evt
) {
122 Object obj
= ((IStructuredSelection
) evt
.getSelection())
124 if (obj
instanceof ExecutionModulesContentProvider
.FlowNode
) {
125 ExecutionModulesContentProvider
.FlowNode fn
= (ExecutionModulesContentProvider
.FlowNode
) obj
;
127 List
<RealizedFlow
> realizedFlows
= new ArrayList
<RealizedFlow
>();
128 RealizedFlow realizedFlow
= new RealizedFlow();
129 realizedFlow
.setModuleName(fn
.getExecutionModuleNode()
130 .getDescriptor().getName());
131 realizedFlow
.setModuleVersion(fn
.getExecutionModuleNode()
132 .getDescriptor().getVersion());
133 realizedFlow
.setFlowDescriptor(fn
.getExecutionModuleNode()
134 .getFlowDescriptors().get(fn
.getFlowName()));
135 realizedFlows
.add(realizedFlow
);
137 SlcExecution slcExecution
= new SlcExecution();
138 slcExecution
.setUuid(UUID
.randomUUID().toString());
139 slcExecution
.setRealizedFlows(realizedFlows
);
140 slcExecution
.setHost(fn
.getExecutionModuleNode().getAgentNode()
141 .getAgent().toString());
142 processController
.execute(fn
.getExecutionModuleNode()
143 .getAgentNode().getAgent(), slcExecution
);
149 class ViewDragListener
implements DragSourceListener
{
151 public void dragStart(DragSourceEvent event
) {
152 System
.out
.println("Start Drag");
155 public void dragSetData(DragSourceEvent event
) {
157 // System.out.println("dragSetData: " + event);
159 IStructuredSelection selection
= (IStructuredSelection
) viewer
161 if (selection
.getFirstElement() instanceof ExecutionModulesContentProvider
.FlowNode
) {
163 if (TextTransfer
.getInstance().isSupportedType(event
.dataType
)) {
164 ExecutionModulesContentProvider
.FlowNode flowNode
= (ExecutionModulesContentProvider
.FlowNode
) selection
167 Properties props
= new Properties();
168 flowNodeAsProperties(props
, flowNode
);
169 props
.setProperty("agentId", flowNode
170 .getExecutionModuleNode().getAgentNode().getAgent()
172 props
.setProperty("host", flowNode
.getExecutionModuleNode()
173 .getAgentNode().getAgent().toString());
175 ByteArrayOutputStream out
= new ByteArrayOutputStream();
177 props
.store(out
, "");
178 event
.data
= new String(out
.toByteArray());
179 } catch (IOException e
) {
180 throw new SlcException(
181 "Cannot transform realized flow", e
);
183 IOUtils
.closeQuietly(out
);
189 public void dragFinished(DragSourceEvent event
) {
190 System
.out
.println("Finished Drag");
193 protected void flowNodeAsProperties(Properties props
, FlowNode fn
) {
195 RealizedFlow realizedFlow
= new RealizedFlow();
196 realizedFlow
.setModuleName(fn
.getExecutionModuleNode()
197 .getDescriptor().getName());
198 realizedFlow
.setModuleVersion(fn
.getExecutionModuleNode()
199 .getDescriptor().getVersion());
200 realizedFlow
.setFlowDescriptor(fn
.getExecutionFlowDescriptor());
202 // As we want to have the effective ExecutionSpec and not a
203 // reference; we store it at the RealizeFlow level : thus the
204 // marshaller will store the object and not only a reference.
205 realizedFlow
.setExecutionSpec(fn
.getExecutionFlowDescriptor()
206 .getExecutionSpec());
208 props
.setProperty("RealizedFlowAsXml",
209 oxmBean
.marshal(realizedFlow
));
211 .println(oxmBean
.marshal(fn
.getExecutionFlowDescriptor()));
218 public void setContentProvider(IContentProvider contentProvider
) {
219 this.contentProvider
= contentProvider
;
222 public void setProcessController(ProcessController processController
) {
223 this.processController
= processController
;
226 public void setOxmBean(OxmInterface oxmBean
) {
227 this.oxmBean
= oxmBean
;