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