]> 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
Add support for combo box in editing parameters.
[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.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;
40
41 public class ExecutionModulesView extends ViewPart {
42 private final static Log log = LogFactory
43 .getLog(ExecutionModulesView.class);
44
45 public static final String ID = "org.argeo.slc.client.ui.executionModulesView";
46
47 private TreeViewer viewer;
48
49 // Ioc
50 private IContentProvider contentProvider;
51 private OxmInterface oxmBean;
52 private ProcessController processController;
53
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());
63 }
64
65 public void setFocus() {
66 viewer.getControl().setFocus();
67 }
68
69 public TreeViewer getViewer() {
70 return viewer;
71 }
72
73 public void refreshView() {
74 viewer.setInput(getViewSite());
75 }
76
77 class ViewLabelProvider extends LabelProvider implements
78 ITableLabelProvider {
79 public String getColumnText(Object obj, int index) {
80 if (obj instanceof ExecutionModulesContentProvider.ExecutionModuleNode) {
81 ExecutionModuleDescriptor emd = ((ExecutionModulesContentProvider.ExecutionModuleNode) obj)
82 .getDescriptor();
83 System.out
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();
89 } else {
90 log.debug("label is null and text is : " + getText(emd));
91 return getText(emd);
92 }
93 } else
94 return getText(obj);
95 }
96
97 public Image getColumnImage(Object obj, int index) {
98 return getImage(obj);
99 }
100
101 public Image getImage(Object obj) {
102 if (obj instanceof ExecutionModulesContentProvider.AgentNode)
103 return ClientUiPlugin.getDefault().getImageRegistry()
104 .get("agent");
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()
110 .get("folder");
111 else if (obj instanceof ExecutionModulesContentProvider.FlowNode)
112 return ClientUiPlugin.getDefault().getImageRegistry()
113 .get("flow");
114 else
115 return PlatformUI.getWorkbench().getSharedImages()
116 .getImage(ISharedImages.IMG_OBJ_ELEMENT);
117 }
118 }
119
120 class ViewDoubleClickListener implements IDoubleClickListener {
121 public void doubleClick(DoubleClickEvent evt) {
122 Object obj = ((IStructuredSelection) evt.getSelection())
123 .getFirstElement();
124 if (obj instanceof ExecutionModulesContentProvider.FlowNode) {
125 ExecutionModulesContentProvider.FlowNode fn = (ExecutionModulesContentProvider.FlowNode) obj;
126
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);
136
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);
144 }
145 }
146
147 }
148
149 class ViewDragListener implements DragSourceListener {
150
151 public void dragStart(DragSourceEvent event) {
152 System.out.println("Start Drag");
153 }
154
155 public void dragSetData(DragSourceEvent event) {
156
157 // System.out.println("dragSetData: " + event);
158
159 IStructuredSelection selection = (IStructuredSelection) viewer
160 .getSelection();
161 if (selection.getFirstElement() instanceof ExecutionModulesContentProvider.FlowNode) {
162
163 if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
164 ExecutionModulesContentProvider.FlowNode flowNode = (ExecutionModulesContentProvider.FlowNode) selection
165 .getFirstElement();
166
167 Properties props = new Properties();
168 flowNodeAsProperties(props, flowNode);
169 props.setProperty("agentId", flowNode
170 .getExecutionModuleNode().getAgentNode().getAgent()
171 .getAgentUuid());
172 props.setProperty("host", flowNode.getExecutionModuleNode()
173 .getAgentNode().getAgent().toString());
174
175 ByteArrayOutputStream out = new ByteArrayOutputStream();
176 try {
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);
182 } finally {
183 IOUtils.closeQuietly(out);
184 }
185 }
186 }
187 }
188
189 public void dragFinished(DragSourceEvent event) {
190 System.out.println("Finished Drag");
191 }
192
193 protected void flowNodeAsProperties(Properties props, FlowNode fn) {
194
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());
201
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());
207
208 props.setProperty("RealizedFlowAsXml",
209 oxmBean.marshal(realizedFlow));
210 System.out
211 .println(oxmBean.marshal(fn.getExecutionFlowDescriptor()));
212
213 }
214
215 }
216
217 // IoC
218 public void setContentProvider(IContentProvider contentProvider) {
219 this.contentProvider = contentProvider;
220 }
221
222 public void setProcessController(ProcessController processController) {
223 this.processController = processController;
224 }
225
226 public void setOxmBean(OxmInterface oxmBean) {
227 this.oxmBean = oxmBean;
228 }
229
230 }