]> git.argeo.org Git - gpl/argeo-slc.git/blob - eclipse/plugins/runtime/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/ExecutionModulesView.java
Add a Rap interface to handle SLC.
[gpl/argeo-slc.git] / eclipse / plugins / runtime / org.argeo.slc.client.ui / src / main / java / org / argeo / slc / client / ui / views / ExecutionModulesView.java
1 package org.argeo.slc.client.ui.views;
2
3 import java.io.ByteArrayOutputStream;
4 import java.io.IOException;
5 import java.util.ArrayList;
6 import java.util.List;
7 import java.util.Properties;
8 import java.util.UUID;
9
10 import org.apache.commons.io.IOUtils;
11 import org.argeo.slc.SlcException;
12 import org.argeo.slc.client.oxm.OxmInterface;
13 import org.argeo.slc.client.ui.ClientUiPlugin;
14 import org.argeo.slc.client.ui.controllers.ProcessController;
15 import org.argeo.slc.client.ui.providers.ExecutionModulesContentProvider;
16 import org.argeo.slc.client.ui.providers.ExecutionModulesContentProvider.FlowNode;
17 import org.argeo.slc.execution.ExecutionModuleDescriptor;
18 import org.argeo.slc.process.RealizedFlow;
19 import org.argeo.slc.process.SlcExecution;
20 import org.eclipse.jface.viewers.DoubleClickEvent;
21 import org.eclipse.jface.viewers.IContentProvider;
22 import org.eclipse.jface.viewers.IDoubleClickListener;
23 import org.eclipse.jface.viewers.IStructuredSelection;
24 import org.eclipse.jface.viewers.ITableLabelProvider;
25 import org.eclipse.jface.viewers.LabelProvider;
26 import org.eclipse.jface.viewers.TreeViewer;
27 import org.eclipse.swt.SWT;
28 import org.eclipse.swt.dnd.DND;
29 import org.eclipse.swt.dnd.DragSourceEvent;
30 import org.eclipse.swt.dnd.DragSourceListener;
31 import org.eclipse.swt.dnd.TextTransfer;
32 import org.eclipse.swt.dnd.Transfer;
33 import org.eclipse.swt.graphics.Image;
34 import org.eclipse.swt.widgets.Composite;
35 import org.eclipse.ui.ISharedImages;
36 import org.eclipse.ui.PlatformUI;
37 import org.eclipse.ui.part.ViewPart;
38
39 public class ExecutionModulesView extends ViewPart {
40 // private final static Log log = LogFactory
41 // .getLog(ExecutionModulesView.class);
42
43 public static final String ID = "org.argeo.slc.client.ui.executionModulesView";
44
45 private TreeViewer viewer;
46
47 // Ioc
48 private IContentProvider contentProvider;
49 private OxmInterface oxmBean;
50 private ProcessController processController;
51
52 public void createPartControl(Composite parent) {
53 viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
54 viewer.setContentProvider(contentProvider);
55 viewer.setLabelProvider(new ViewLabelProvider());
56 viewer.setInput(getViewSite());
57 viewer.addDoubleClickListener(new ViewDoubleClickListener());
58 int operations = DND.DROP_COPY | DND.DROP_MOVE;
59 Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
60 viewer.addDragSupport(operations, tt, new ViewDragListener());
61 }
62
63 public void setFocus() {
64 viewer.getControl().setFocus();
65 }
66
67 public TreeViewer getViewer() {
68 return viewer;
69 }
70
71 public void refreshView() {
72 viewer.setInput(getViewSite());
73 }
74
75 class ViewLabelProvider extends LabelProvider implements
76 ITableLabelProvider {
77 public String getColumnText(Object obj, int index) {
78 if (obj instanceof ExecutionModulesContentProvider.ExecutionModuleNode) {
79 ExecutionModuleDescriptor emd = ((ExecutionModulesContentProvider.ExecutionModuleNode) obj)
80 .getDescriptor();
81 if (emd.getLabel() != null)
82 return emd.getLabel();
83 else
84 return getText(emd);
85 } else
86 return getText(obj);
87 }
88
89 public Image getColumnImage(Object obj, int index) {
90 return getImage(obj);
91 }
92
93 public Image getImage(Object obj) {
94 if (obj instanceof ExecutionModulesContentProvider.AgentNode)
95 return ClientUiPlugin.getDefault().getImageRegistry()
96 .get("agent");
97 else if (obj instanceof ExecutionModulesContentProvider.ExecutionModuleNode)
98 return ClientUiPlugin.getDefault().getImageRegistry()
99 .get("executionModule");
100 else if (obj instanceof ExecutionModulesContentProvider.FolderNode)
101 return ClientUiPlugin.getDefault().getImageRegistry()
102 .get("folder");
103 else if (obj instanceof ExecutionModulesContentProvider.FlowNode)
104 return ClientUiPlugin.getDefault().getImageRegistry()
105 .get("flow");
106 else
107 return PlatformUI.getWorkbench().getSharedImages()
108 .getImage(ISharedImages.IMG_OBJ_ELEMENT);
109 }
110 }
111
112 class ViewDoubleClickListener implements IDoubleClickListener {
113 public void doubleClick(DoubleClickEvent evt) {
114 Object obj = ((IStructuredSelection) evt.getSelection())
115 .getFirstElement();
116 if (obj instanceof ExecutionModulesContentProvider.FlowNode) {
117 ExecutionModulesContentProvider.FlowNode fn = (ExecutionModulesContentProvider.FlowNode) obj;
118
119 List<RealizedFlow> realizedFlows = new ArrayList<RealizedFlow>();
120 RealizedFlow realizedFlow = new RealizedFlow();
121 realizedFlow.setModuleName(fn.getExecutionModuleNode()
122 .getDescriptor().getName());
123 realizedFlow.setModuleVersion(fn.getExecutionModuleNode()
124 .getDescriptor().getVersion());
125 realizedFlow.setFlowDescriptor(fn.getExecutionModuleNode()
126 .getFlowDescriptors().get(fn.getFlowName()));
127 realizedFlows.add(realizedFlow);
128
129 SlcExecution slcExecution = new SlcExecution();
130 slcExecution.setUuid(UUID.randomUUID().toString());
131 slcExecution.setRealizedFlows(realizedFlows);
132 slcExecution.setHost(fn.getExecutionModuleNode().getAgentNode()
133 .getAgent().toString());
134 processController.execute(fn.getExecutionModuleNode()
135 .getAgentNode().getAgent(), slcExecution);
136 }
137 }
138
139 }
140
141 class ViewDragListener implements DragSourceListener {
142
143 public void dragStart(DragSourceEvent event) {
144 System.out.println("Start Drag");
145 }
146
147 public void dragSetData(DragSourceEvent event) {
148 System.out.println("dragSetData: " + event);
149 // System.out.println("dataType: " + event.dataType);
150
151 IStructuredSelection selection = (IStructuredSelection) viewer
152 .getSelection();
153 if (selection.getFirstElement() instanceof ExecutionModulesContentProvider.FlowNode) {
154
155 if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
156 ExecutionModulesContentProvider.FlowNode flowNode = (ExecutionModulesContentProvider.FlowNode) selection
157 .getFirstElement();
158
159 Properties props = new Properties();
160 flowNodeAsProperties(props, flowNode);
161 props.setProperty("agentId", flowNode
162 .getExecutionModuleNode().getAgentNode().getAgent()
163 .getAgentUuid());
164 props.setProperty("host", flowNode.getExecutionModuleNode()
165 .getAgentNode().getAgent().toString());
166
167 ByteArrayOutputStream out = new ByteArrayOutputStream();
168 try {
169 props.store(out, "");
170 event.data = new String(out.toByteArray());
171 } catch (IOException e) {
172 throw new SlcException(
173 "Cannot transform realized flow", e);
174 } finally {
175 IOUtils.closeQuietly(out);
176 }
177 }
178 }
179 }
180
181 public void dragFinished(DragSourceEvent event) {
182 System.out.println("Finished Drag");
183 }
184
185 protected void flowNodeAsProperties(Properties props, FlowNode fn) {
186
187 RealizedFlow realizedFlow = new RealizedFlow();
188 realizedFlow.setModuleName(fn.getExecutionModuleNode()
189 .getDescriptor().getName());
190 realizedFlow.setModuleVersion(fn.getExecutionModuleNode()
191 .getDescriptor().getVersion());
192 realizedFlow.setFlowDescriptor(fn.getExecutionFlowDescriptor());
193
194 // As we want to have the effective ExecutionSpec and not a
195 // reference; we store it at the RealizeFlow level : thus the
196 // marshaller will store the object and not only a reference.
197 realizedFlow.setExecutionSpec(fn.getExecutionFlowDescriptor()
198 .getExecutionSpec());
199
200 props.setProperty("RealizedFlowAsXml",
201 oxmBean.marshal(realizedFlow));
202 System.out
203 .println(oxmBean.marshal(fn.getExecutionFlowDescriptor()));
204
205 }
206
207 }
208
209 // IoC
210 public void setContentProvider(IContentProvider contentProvider) {
211 this.contentProvider = contentProvider;
212 }
213
214 public void setProcessController(ProcessController processController) {
215 this.processController = processController;
216 }
217
218 public void setOxmBean(OxmInterface oxmBean) {
219 this.oxmBean = oxmBean;
220 }
221
222 }