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=c6ba27b138688cbc09ee89a0db51d5330a0d2897;hb=5d91de89b70a4ba96cd4d37c4fcc991118faf685;hp=0f358c36a2b908ae62219c5ed632b9a68d6f34a1;hpb=d601802d5a50e4e30eb639a08eff5270b63fe599;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 0f358c36a..c6ba27b13 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,20 @@ 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; import org.eclipse.jface.viewers.DoubleClickEvent; @@ -14,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; @@ -21,16 +37,49 @@ 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 { 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,66 +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() { - - @Override - 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); + 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