]> 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
git-svn-id: https://svn.argeo.org/slc/trunk@4431 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc
[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 if (emd.getLabel() != null) {
84 return emd.getLabel();
85 } else {
86 return getText(emd);
87 }
88 } else
89 return getText(obj);
90 }
91
92 public Image getColumnImage(Object obj, int index) {
93 return getImage(obj);
94 }
95
96 public Image getImage(Object obj) {
97 if (obj instanceof ExecutionModulesContentProvider.AgentNode)
98 return ClientUiPlugin.getDefault().getImageRegistry()
99 .get("agent");
100 else if (obj instanceof ExecutionModulesContentProvider.ExecutionModuleNode)
101 return ClientUiPlugin.getDefault().getImageRegistry()
102 .get("executionModule");
103 else if (obj instanceof ExecutionModulesContentProvider.FolderNode)
104 return ClientUiPlugin.getDefault().getImageRegistry()
105 .get("folder");
106 else if (obj instanceof ExecutionModulesContentProvider.FlowNode)
107 return ClientUiPlugin.getDefault().getImageRegistry()
108 .get("flow");
109 else
110 return PlatformUI.getWorkbench().getSharedImages()
111 .getImage(ISharedImages.IMG_OBJ_ELEMENT);
112 }
113 }
114
115 class ViewDoubleClickListener implements IDoubleClickListener {
116 public void doubleClick(DoubleClickEvent evt) {
117 Object obj = ((IStructuredSelection) evt.getSelection())
118 .getFirstElement();
119 if (obj instanceof ExecutionModulesContentProvider.FlowNode) {
120 ExecutionModulesContentProvider.FlowNode fn = (ExecutionModulesContentProvider.FlowNode) obj;
121
122 List<RealizedFlow> realizedFlows = new ArrayList<RealizedFlow>();
123 RealizedFlow realizedFlow = new RealizedFlow();
124 realizedFlow.setModuleName(fn.getExecutionModuleNode()
125 .getDescriptor().getName());
126 realizedFlow.setModuleVersion(fn.getExecutionModuleNode()
127 .getDescriptor().getVersion());
128 realizedFlow.setFlowDescriptor(fn.getExecutionModuleNode()
129 .getFlowDescriptors().get(fn.getFlowName()));
130 realizedFlows.add(realizedFlow);
131
132 SlcExecution slcExecution = new SlcExecution();
133 slcExecution.setUuid(UUID.randomUUID().toString());
134 slcExecution.setRealizedFlows(realizedFlows);
135 slcExecution.setHost(fn.getExecutionModuleNode().getAgentNode()
136 .getAgent().toString());
137 processController.execute(fn.getExecutionModuleNode()
138 .getAgentNode().getAgent(), slcExecution);
139 }
140 }
141
142 }
143
144 class ViewDragListener implements DragSourceListener {
145
146 public void dragStart(DragSourceEvent event) {
147 System.out.println("Start Drag");
148 }
149
150 public void dragSetData(DragSourceEvent event) {
151
152 // System.out.println("dragSetData: " + event);
153
154 IStructuredSelection selection = (IStructuredSelection) viewer
155 .getSelection();
156 if (selection.getFirstElement() instanceof ExecutionModulesContentProvider.FlowNode) {
157
158 if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
159 ExecutionModulesContentProvider.FlowNode flowNode = (ExecutionModulesContentProvider.FlowNode) selection
160 .getFirstElement();
161
162 Properties props = new Properties();
163 flowNodeAsProperties(props, flowNode);
164 props.setProperty("agentId", flowNode
165 .getExecutionModuleNode().getAgentNode().getAgent()
166 .getAgentUuid());
167 props.setProperty("host", flowNode.getExecutionModuleNode()
168 .getAgentNode().getAgent().toString());
169
170 ByteArrayOutputStream out = new ByteArrayOutputStream();
171 try {
172 props.store(out, "");
173 event.data = new String(out.toByteArray());
174 } catch (IOException e) {
175 throw new SlcException(
176 "Cannot transform realized flow", e);
177 } finally {
178 IOUtils.closeQuietly(out);
179 }
180 }
181 }
182 }
183
184 public void dragFinished(DragSourceEvent event) {
185 System.out.println("Finished Drag");
186 }
187
188 protected void flowNodeAsProperties(Properties props, FlowNode fn) {
189
190 RealizedFlow realizedFlow = new RealizedFlow();
191 realizedFlow.setModuleName(fn.getExecutionModuleNode()
192 .getDescriptor().getName());
193 realizedFlow.setModuleVersion(fn.getExecutionModuleNode()
194 .getDescriptor().getVersion());
195 realizedFlow.setFlowDescriptor(fn.getExecutionFlowDescriptor());
196
197 // As we want to have the effective ExecutionSpec and not a
198 // reference; we store it at the RealizeFlow level : thus the
199 // marshaller will store the object and not only a reference.
200 realizedFlow.setExecutionSpec(fn.getExecutionFlowDescriptor()
201 .getExecutionSpec());
202
203 props.setProperty("RealizedFlowAsXml",
204 oxmBean.marshal(realizedFlow));
205 System.out
206 .println(oxmBean.marshal(fn.getExecutionFlowDescriptor()));
207
208 }
209
210 }
211
212 // IoC
213 public void setContentProvider(IContentProvider contentProvider) {
214 this.contentProvider = contentProvider;
215 }
216
217 public void setProcessController(ProcessController processController) {
218 this.processController = processController;
219 }
220
221 public void setOxmBean(OxmInterface oxmBean) {
222 this.oxmBean = oxmBean;
223 }
224
225 }