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
.argeo
.slc
.SlcException
;
12 import org
.argeo
.slc
.client
.ui
.ClientUiPlugin
;
13 import org
.argeo
.slc
.client
.ui
.controllers
.ProcessController
;
14 import org
.argeo
.slc
.execution
.ExecutionFlowDescriptor
;
15 import org
.argeo
.slc
.execution
.ExecutionModuleDescriptor
;
16 import org
.argeo
.slc
.process
.RealizedFlow
;
17 import org
.argeo
.slc
.process
.SlcExecution
;
18 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
19 import org
.eclipse
.jface
.viewers
.IContentProvider
;
20 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
21 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
22 import org
.eclipse
.jface
.viewers
.ITableLabelProvider
;
23 import org
.eclipse
.jface
.viewers
.LabelProvider
;
24 import org
.eclipse
.jface
.viewers
.TreeViewer
;
25 import org
.eclipse
.swt
.SWT
;
26 import org
.eclipse
.swt
.dnd
.DND
;
27 import org
.eclipse
.swt
.dnd
.DragSourceEvent
;
28 import org
.eclipse
.swt
.dnd
.DragSourceListener
;
29 import org
.eclipse
.swt
.dnd
.TextTransfer
;
30 import org
.eclipse
.swt
.dnd
.Transfer
;
31 import org
.eclipse
.swt
.graphics
.Image
;
32 import org
.eclipse
.swt
.widgets
.Composite
;
33 import org
.eclipse
.ui
.ISharedImages
;
34 import org
.eclipse
.ui
.PlatformUI
;
35 import org
.eclipse
.ui
.part
.ViewPart
;
37 public class ExecutionModulesView
extends ViewPart
{
38 public static final String ID
= "org.argeo.slc.client.ui.executionModulesView";
40 private TreeViewer viewer
;
42 private IContentProvider contentProvider
;
44 private ProcessController processController
;
46 public void createPartControl(Composite parent
) {
47 viewer
= new TreeViewer(parent
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
);
48 viewer
.setContentProvider(contentProvider
);
49 viewer
.setLabelProvider(new ViewLabelProvider());
50 viewer
.setInput(getViewSite());
51 viewer
.addDoubleClickListener(new ViewDoubleClickListener());
52 int operations
= DND
.DROP_COPY
| DND
.DROP_MOVE
;
53 Transfer
[] tt
= new Transfer
[] { TextTransfer
.getInstance() };
54 viewer
.addDragSupport(operations
, tt
, new ViewDragListener());
57 public void setFocus() {
58 viewer
.getControl().setFocus();
61 public TreeViewer
getViewer() {
65 public void setContentProvider(IContentProvider contentProvider
) {
66 this.contentProvider
= contentProvider
;
69 public void setProcessController(ProcessController processController
) {
70 this.processController
= processController
;
73 class ViewLabelProvider
extends LabelProvider
implements
75 public String
getColumnText(Object obj
, int index
) {
76 if (obj
instanceof ExecutionModulesContentProvider
.ExecutionModuleNode
) {
77 ExecutionModuleDescriptor emd
= ((ExecutionModulesContentProvider
.ExecutionModuleNode
) obj
)
79 if (emd
.getLabel() != null)
80 return emd
.getLabel();
87 public Image
getColumnImage(Object obj
, int index
) {
91 public Image
getImage(Object obj
) {
92 if (obj
instanceof ExecutionModulesContentProvider
.AgentNode
)
93 return ClientUiPlugin
.getDefault().getImageRegistry().get(
95 else if (obj
instanceof ExecutionModulesContentProvider
.ExecutionModuleNode
)
96 return ClientUiPlugin
.getDefault().getImageRegistry().get(
98 else if (obj
instanceof ExecutionModulesContentProvider
.FolderNode
)
99 return ClientUiPlugin
.getDefault().getImageRegistry().get(
101 else if (obj
instanceof ExecutionModulesContentProvider
.FlowNode
)
102 return ClientUiPlugin
.getDefault().getImageRegistry().get(
105 return PlatformUI
.getWorkbench().getSharedImages().getImage(
106 ISharedImages
.IMG_OBJ_ELEMENT
);
110 class ViewDoubleClickListener
implements IDoubleClickListener
{
111 public void doubleClick(DoubleClickEvent evt
) {
112 Object obj
= ((IStructuredSelection
) evt
.getSelection())
114 if (obj
instanceof ExecutionModulesContentProvider
.FlowNode
) {
115 ExecutionModulesContentProvider
.FlowNode fn
= (ExecutionModulesContentProvider
.FlowNode
) obj
;
117 List
<RealizedFlow
> realizedFlows
= new ArrayList
<RealizedFlow
>();
118 RealizedFlow realizedFlow
= new RealizedFlow();
119 realizedFlow
.setModuleName(fn
.getExecutionModuleNode()
120 .getDescriptor().getName());
121 realizedFlow
.setModuleVersion(fn
.getExecutionModuleNode()
122 .getDescriptor().getVersion());
123 realizedFlow
.setFlowDescriptor(fn
.getExecutionModuleNode()
124 .getFlowDescriptors().get(fn
.getFlowName()));
125 realizedFlows
.add(realizedFlow
);
127 SlcExecution slcExecution
= new SlcExecution();
128 slcExecution
.setUuid(UUID
.randomUUID().toString());
129 slcExecution
.setRealizedFlows(realizedFlows
);
130 processController
.execute(fn
.getExecutionModuleNode()
131 .getAgentNode().getAgent(), slcExecution
);
137 class ViewDragListener
implements DragSourceListener
{
138 public void dragFinished(DragSourceEvent event
) {
139 System
.out
.println("Finished Drag");
142 public void dragSetData(DragSourceEvent event
) {
143 System
.out
.println("dragSetData: " + event
);
144 IStructuredSelection selection
= (IStructuredSelection
) viewer
146 if (selection
.getFirstElement() instanceof ExecutionModulesContentProvider
.FlowNode
) {
147 if (TextTransfer
.getInstance().isSupportedType(event
.dataType
)) {
148 ExecutionModulesContentProvider
.FlowNode flowNode
= (ExecutionModulesContentProvider
.FlowNode
) selection
150 RealizedFlow rf
= nodeAsRealizedFlow(flowNode
);
151 Properties props
= new Properties();
152 realizedFlowAsProperties(props
, rf
);
153 props
.setProperty("agentId", flowNode
154 .getExecutionModuleNode().getAgentNode().getAgent()
157 ByteArrayOutputStream out
= new ByteArrayOutputStream();
159 props
.store(out
, "");
160 event
.data
= new String(out
.toByteArray());
161 } catch (IOException e
) {
162 throw new SlcException("Cannot transfor realized flow",
165 IOUtils
.closeQuietly(out
);
171 public void dragStart(DragSourceEvent event
) {
172 System
.out
.println("Start Drag");
175 private RealizedFlow
nodeAsRealizedFlow(
176 ExecutionModulesContentProvider
.FlowNode flowNode
) {
177 RealizedFlow rf
= new RealizedFlow();
178 rf
.setModuleName(flowNode
.getExecutionModuleNode().getDescriptor()
180 rf
.setModuleVersion(flowNode
.getExecutionModuleNode()
181 .getDescriptor().getVersion());
182 ExecutionFlowDescriptor efd
= new ExecutionFlowDescriptor();
183 efd
.setName(flowNode
.getFlowName());
184 rf
.setFlowDescriptor(efd
);
188 private void realizedFlowAsProperties(Properties props
, RealizedFlow rf
) {
189 props
.setProperty("moduleName", rf
.getModuleName());
190 props
.setProperty("moduleVersion", rf
.getModuleVersion());
191 props
.setProperty("flowName", rf
.getFlowDescriptor().getName());