X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Fplugins%2Forg.argeo.slc.client.ui%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fviews%2FExecutionModulesView.java;h=4c01230bf3912cccf36ee6edcdb90eacc0fcea90;hb=911bf76bc93ca875a66e908666a399d3bcb4db5d;hp=bc0cb889a50bb0645610f25959dfb20da85d399d;hpb=c208feddd6ceb7c4a6861e9a49228edc25a13181;p=gpl%2Fargeo-slc.git diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesView.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesView.java index bc0cb889a..4c01230bf 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesView.java +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesView.java @@ -1,9 +1,18 @@ 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.ui.ClientUiPlugin; +import org.argeo.slc.client.ui.controllers.ProcessController; +import org.argeo.slc.execution.ExecutionFlowDescriptor; +import org.argeo.slc.execution.ExecutionModuleDescriptor; import org.argeo.slc.process.RealizedFlow; import org.argeo.slc.process.SlcExecution; import org.eclipse.jface.viewers.DoubleClickEvent; @@ -14,6 +23,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; @@ -27,10 +41,47 @@ public class ExecutionModulesView extends ViewPart { private IContentProvider contentProvider; + 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; + } + + public void setContentProvider(IContentProvider contentProvider) { + this.contentProvider = contentProvider; + } + + public void setProcessController(ProcessController processController) { + this.processController = processController; + } + class ViewLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object obj, int index) { - return getText(obj); + if (obj instanceof ExecutionModulesContentProvider.ExecutionModuleNode) { + ExecutionModuleDescriptor emd = ((ExecutionModulesContentProvider.ExecutionModuleNode) obj) + .getDescriptor(); + if (emd.getLabel() != null) + return emd.getLabel(); + else + return getText(emd); + } else + return getText(obj); } public Image getColumnImage(Object obj, int index) { @@ -39,65 +90,107 @@ 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"); 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); } } - 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 realizedFlows = new ArrayList(); - 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 realizedFlows = new ArrayList(); + 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); + 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 dragFinished(DragSourceEvent event) { + System.out.println("Finished Drag"); + } + + public void dragSetData(DragSourceEvent event) { + System.out.println("dragSetData: " + event); + IStructuredSelection selection = (IStructuredSelection) viewer + .getSelection(); + if (selection.getFirstElement() instanceof ExecutionModulesContentProvider.FlowNode) { + if (TextTransfer.getInstance().isSupportedType(event.dataType)) { + ExecutionModulesContentProvider.FlowNode flowNode = (ExecutionModulesContentProvider.FlowNode) selection + .getFirstElement(); + RealizedFlow rf = nodeAsRealizedFlow(flowNode); + Properties props = new Properties(); + realizedFlowAsProperties(props, rf); + 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 transfor realized flow", + e); + } finally { + IOUtils.closeQuietly(out); + } + } + } + } + + public void dragStart(DragSourceEvent event) { + System.out.println("Start Drag"); + } + + private RealizedFlow nodeAsRealizedFlow( + ExecutionModulesContentProvider.FlowNode flowNode) { + RealizedFlow rf = new RealizedFlow(); + rf.setModuleName(flowNode.getExecutionModuleNode().getDescriptor() + .getName()); + rf.setModuleVersion(flowNode.getExecutionModuleNode() + .getDescriptor().getVersion()); + ExecutionFlowDescriptor efd = new ExecutionFlowDescriptor(); + efd.setName(flowNode.getFlowName()); + rf.setFlowDescriptor(efd); + return rf; + } + + private void realizedFlowAsProperties(Properties props, RealizedFlow rf) { + props.setProperty("moduleName", rf.getModuleName()); + props.setProperty("moduleVersion", rf.getModuleVersion()); + props.setProperty("flowName", rf.getFlowDescriptor().getName()); + } - public void setContentProvider(IContentProvider contentProvider) { - this.contentProvider = contentProvider; } } \ No newline at end of file