]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesView.java
Implementation of a first draft of editorView for the process parameters.
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.client.ui / src / org / argeo / slc / client / ui / views / ExecutionModulesView.java
index ec76070504c7027476de7e39c379e3705d0ce1c5..c6ba27b138688cbc09ee89a0db51d5330a0d2897 100644 (file)
@@ -1,9 +1,19 @@
 package org.argeo.slc.client.ui.views;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
+import java.util.UUID;
 
+import org.apache.commons.io.IOUtils;
+import org.argeo.slc.SlcException;
+import org.argeo.slc.client.oxm.OxmInterface;
 import org.argeo.slc.client.ui.ClientUiPlugin;
+import org.argeo.slc.client.ui.controllers.ProcessController;
+import org.argeo.slc.client.ui.providers.ExecutionModulesContentProvider;
+import org.argeo.slc.client.ui.providers.ExecutionModulesContentProvider.FlowNode;
 import org.argeo.slc.execution.ExecutionModuleDescriptor;
 import org.argeo.slc.process.RealizedFlow;
 import org.argeo.slc.process.SlcExecution;
@@ -15,6 +25,11 @@ import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.ISharedImages;
@@ -22,11 +37,36 @@ import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.ViewPart;
 
 public class ExecutionModulesView extends ViewPart {
+       // private final static Log log = LogFactory
+       // .getLog(ExecutionModulesView.class);
+
        public static final String ID = "org.argeo.slc.client.ui.executionModulesView";
 
        private TreeViewer viewer;
 
+       // Ioc
        private IContentProvider contentProvider;
+       private OxmInterface oxmBean;
+       private ProcessController processController;
+
+       public void createPartControl(Composite parent) {
+               viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+               viewer.setContentProvider(contentProvider);
+               viewer.setLabelProvider(new ViewLabelProvider());
+               viewer.setInput(getViewSite());
+               viewer.addDoubleClickListener(new ViewDoubleClickListener());
+               int operations = DND.DROP_COPY | DND.DROP_MOVE;
+               Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
+               viewer.addDragSupport(operations, tt, new ViewDragListener());
+       }
+
+       public void setFocus() {
+               viewer.getControl().setFocus();
+       }
+
+       public TreeViewer getViewer() {
+               return viewer;
+       }
 
        class ViewLabelProvider extends LabelProvider implements
                        ITableLabelProvider {
@@ -48,68 +88,128 @@ public class ExecutionModulesView extends ViewPart {
 
                public Image getImage(Object obj) {
                        if (obj instanceof ExecutionModulesContentProvider.AgentNode)
-                               return ClientUiPlugin.getDefault().getImageRegistry().get(
-                                               "agent");
+                               return ClientUiPlugin.getDefault().getImageRegistry()
+                                               .get("agent");
                        else if (obj instanceof ExecutionModulesContentProvider.ExecutionModuleNode)
-                               return ClientUiPlugin.getDefault().getImageRegistry().get(
-                                               "executionModule");
+                               return ClientUiPlugin.getDefault().getImageRegistry()
+                                               .get("executionModule");
                        else if (obj instanceof ExecutionModulesContentProvider.FolderNode)
-                               return ClientUiPlugin.getDefault().getImageRegistry().get(
-                                               "folder");
+                               return ClientUiPlugin.getDefault().getImageRegistry()
+                                               .get("folder");
                        else if (obj instanceof ExecutionModulesContentProvider.FlowNode)
-                               return ClientUiPlugin.getDefault().getImageRegistry().get(
-                                               "flow");
+                               return ClientUiPlugin.getDefault().getImageRegistry()
+                                               .get("flow");
                        else
-                               return PlatformUI.getWorkbench().getSharedImages().getImage(
-                                               ISharedImages.IMG_OBJ_ELEMENT);
+                               return PlatformUI.getWorkbench().getSharedImages()
+                                               .getImage(ISharedImages.IMG_OBJ_ELEMENT);
                }
        }
 
-       public void createPartControl(Composite parent) {
-               viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
-               viewer.setContentProvider(contentProvider);
-               viewer.setLabelProvider(new ViewLabelProvider());
-               viewer.setInput(getViewSite());
-               viewer.addDoubleClickListener(new IDoubleClickListener() {
-
-                       public void doubleClick(DoubleClickEvent evt) {
-                               Object obj = ((IStructuredSelection) evt.getSelection())
-                                               .getFirstElement();
-                               if (obj instanceof ExecutionModulesContentProvider.FlowNode) {
-                                       ExecutionModulesContentProvider.FlowNode fn = (ExecutionModulesContentProvider.FlowNode) obj;
-
-                                       List<RealizedFlow> realizedFlows = new ArrayList<RealizedFlow>();
-                                       RealizedFlow realizedFlow = new RealizedFlow();
-                                       realizedFlow.setModuleName(fn.getExecutionModuleNode()
-                                                       .getDescriptor().getName());
-                                       realizedFlow.setModuleVersion(fn.getExecutionModuleNode()
-                                                       .getDescriptor().getVersion());
-                                       realizedFlow.setFlowDescriptor(fn.getExecutionModuleNode()
-                                                       .getFlowDescriptors().get(fn.getFlowName()));
-                                       realizedFlows.add(realizedFlow);
-
-                                       SlcExecution slcExecution = new SlcExecution();
-                                       slcExecution.setRealizedFlows(realizedFlows);
-                                       fn.getExecutionModuleNode().getAgentNode().getAgent()
-                                                       .runSlcExecution(slcExecution);
-                               }
+       class ViewDoubleClickListener implements IDoubleClickListener {
+               public void doubleClick(DoubleClickEvent evt) {
+                       Object obj = ((IStructuredSelection) evt.getSelection())
+                                       .getFirstElement();
+                       if (obj instanceof ExecutionModulesContentProvider.FlowNode) {
+                               ExecutionModulesContentProvider.FlowNode fn = (ExecutionModulesContentProvider.FlowNode) obj;
+
+                               List<RealizedFlow> realizedFlows = new ArrayList<RealizedFlow>();
+                               RealizedFlow realizedFlow = new RealizedFlow();
+                               realizedFlow.setModuleName(fn.getExecutionModuleNode()
+                                               .getDescriptor().getName());
+                               realizedFlow.setModuleVersion(fn.getExecutionModuleNode()
+                                               .getDescriptor().getVersion());
+                               realizedFlow.setFlowDescriptor(fn.getExecutionModuleNode()
+                                               .getFlowDescriptors().get(fn.getFlowName()));
+                               realizedFlows.add(realizedFlow);
+
+                               SlcExecution slcExecution = new SlcExecution();
+                               slcExecution.setUuid(UUID.randomUUID().toString());
+                               slcExecution.setRealizedFlows(realizedFlows);
+                               slcExecution.setHost(fn.getExecutionModuleNode().getAgentNode()
+                                               .getAgent().toString());
+                               processController.execute(fn.getExecutionModuleNode()
+                                               .getAgentNode().getAgent(), slcExecution);
                        }
-               });
-       }
+               }
 
-       /**
-        * Passing the focus request to the viewer's control.
-        */
-       public void setFocus() {
-               viewer.getControl().setFocus();
        }
 
-       public TreeViewer getViewer() {
-               return viewer;
+       class ViewDragListener implements DragSourceListener {
+
+               public void dragStart(DragSourceEvent event) {
+                       System.out.println("Start Drag");
+               }
+
+               public void dragSetData(DragSourceEvent event) {
+                       System.out.println("dragSetData: " + event);
+                       // System.out.println("dataType: " + event.dataType);
+
+                       IStructuredSelection selection = (IStructuredSelection) viewer
+                                       .getSelection();
+                       if (selection.getFirstElement() instanceof ExecutionModulesContentProvider.FlowNode) {
+
+                               if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
+                                       ExecutionModulesContentProvider.FlowNode flowNode = (ExecutionModulesContentProvider.FlowNode) selection
+                                                       .getFirstElement();
+
+                                       // we still use property because the marshaller bean does
+                                       // not know the FlowNode Class
+                                       Properties props = new Properties();
+                                       flowNodeAsProperties(props, flowNode);
+                                       props.setProperty("agentId", flowNode
+                                                       .getExecutionModuleNode().getAgentNode().getAgent()
+                                                       .getAgentUuid());
+
+                                       ByteArrayOutputStream out = new ByteArrayOutputStream();
+                                       try {
+                                               props.store(out, "");
+                                               event.data = new String(out.toByteArray());
+                                       } catch (IOException e) {
+                                               throw new SlcException(
+                                                               "Cannot transform realized flow", e);
+                                       } finally {
+                                               IOUtils.closeQuietly(out);
+                                       }
+                               }
+                       }
+               }
+
+               public void dragFinished(DragSourceEvent event) {
+                       System.out.println("Finished Drag");
+               }
+
+               private void flowNodeAsProperties(Properties props, FlowNode fn) {
+                       props.setProperty("moduleName", fn.getExecutionModuleNode()
+                                       .getDescriptor().getName());
+                       props.setProperty("moduleVersion", fn.getExecutionModuleNode()
+                                       .getDescriptor().getVersion());
+                       props.setProperty("flowName", fn.getFlowName());
+
+                       System.out.println("Execution Spec avant marshalling ??? ");
+                       System.out.println(fn.getExecutionFlowDescriptor());
+                       System.out.println(fn.getExecutionFlowDescriptor()
+                                       .getExecutionSpec());
+
+                       props.setProperty("FlowDescriptorAsXml",
+                                       oxmBean.marshal(fn.getExecutionFlowDescriptor()));
+                       System.out
+                                       .println(oxmBean.marshal(fn.getExecutionFlowDescriptor()));
+
+               }
+
        }
 
+       // IoC
        public void setContentProvider(IContentProvider contentProvider) {
                this.contentProvider = contentProvider;
        }
 
+       public void setProcessController(ProcessController processController) {
+               this.processController = processController;
+       }
+
+       public void setOxmBean(OxmInterface oxmBean) {
+               this.oxmBean = oxmBean;
+       }
+
 }
\ No newline at end of file