public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
- configurer.setInitialSize(new Point(800, 600));
+ configurer.setInitialSize(new Point(1024, 800));
configurer.setShowCoolBar(true);
configurer.setShowStatusLine(false);
}
package org.argeo.slc.client.rcp;
import org.argeo.slc.client.ui.views.ExecutionModulesView;
+import org.argeo.slc.client.ui.views.ProcessBuilderView;
import org.argeo.slc.client.ui.views.ResultListView;
import org.argeo.slc.client.ui.views.ProcessListView;
import org.eclipse.ui.IFolderLayout;
layout.setEditorAreaVisible(false);
layout.setFixed(true);
- layout.addStandaloneView(ExecutionModulesView.ID, false,
+ IFolderLayout topLeft = layout.createFolder("topLeft",
IPageLayout.LEFT, 0.5f, editorArea);
+ topLeft.addView(ExecutionModulesView.ID);
+
IFolderLayout topRight = layout.createFolder("topRight",
IPageLayout.RIGHT, 0.5f, editorArea);
-
topRight.addView(ResultListView.ID);
+
IFolderLayout bottomRight = layout.createFolder("bottomRight",
- IPageLayout.BOTTOM, 0.5f, "topRight");
+ IPageLayout.BOTTOM, 0.6f, "topRight");
bottomRight.addView(ProcessListView.ID);
+
+ IFolderLayout bottomLeft = layout.createFolder("bottomLeft",
+ IPageLayout.BOTTOM, 0.6f, "topLeft");
+ bottomLeft.addView(ProcessBuilderView.ID);
// layout.addStandaloneView(SlcExecutionListView.ID, false,
// IPageLayout.BOTTOM, 0.5f, editorArea);
}
Export-Package: org.argeo.slc.client.ui,
org.argeo.slc.client.ui.services,
org.argeo.slc.client.ui.views
-Import-Package: org.apache.commons.logging;version="1.1.1",
+Import-Package: org.apache.commons.io;version="1.4.0",
+ org.apache.commons.logging;version="1.1.1",
org.argeo.eclipse.spring,
org.argeo.eclipse.ui,
org.argeo.slc.build;version="0.13.0.SNAPSHOT-r3685",
<property name="testResultCollectionDao" ref="testResultCollectionDao" />
</bean>
- <bean id="org.argeo.slc.client.ui.ProcessListView" class="org.argeo.slc.client.ui.views.ProcessListView"
+ <bean id="org.argeo.slc.client.ui.processListView" class="org.argeo.slc.client.ui.views.ProcessListView"
scope="prototype">
<property name="slcExecutionDao" ref="slcExecutionDao" />
</bean>
+ <bean id="org.argeo.slc.client.ui.processBuilderView" class="org.argeo.slc.client.ui.views.ProcessBuilderView"
+ scope="prototype">
+ <property name="processController" ref="processController" />
+ </bean>
+
<bean id="executionModulesContentProvider"
class="org.argeo.slc.client.ui.views.ExecutionModulesContentProvider">
<property name="slcAgents" ref="slcAgents" />
restorable="true">
</view>
<view
- id="org.argeo.slc.client.ui.ProcessListView"
+ id="org.argeo.slc.client.ui.processListView"
class="org.argeo.eclipse.spring.SpringExtensionFactory"
name="Process List"
restorable="true">
+ </view>
+ <view
+ id="org.argeo.slc.client.ui.processBuilderView"
+ class="org.argeo.eclipse.spring.SpringExtensionFactory"
+ name="Process Builder"
+ restorable="true">
</view>
</extension>
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.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;
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) {
}
}
- 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.setUuid(UUID.randomUUID().toString());
- slcExecution.setRealizedFlows(realizedFlows);
- processController.execute(fn.getExecutionModuleNode()
- .getAgentNode().getAgent(), 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);
+ 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 setContentProvider(IContentProvider contentProvider) {
- this.contentProvider = contentProvider;
- }
+ 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 setProcessController(ProcessController processController) {
- this.processController = processController;
}
}
\ No newline at end of file
--- /dev/null
+package org.argeo.slc.client.ui.views;
+
+import java.io.ByteArrayInputStream;
+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.controllers.ProcessController;
+import org.argeo.slc.execution.ExecutionFlowDescriptor;
+import org.argeo.slc.process.RealizedFlow;
+import org.argeo.slc.process.SlcExecution;
+import org.argeo.slc.runtime.SlcAgent;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.part.ViewPart;
+
+public class ProcessBuilderView extends ViewPart {
+ public static final String ID = "org.argeo.slc.client.ui.processBuilderView";
+
+ // private final static Log log =
+ // LogFactory.getLog(ProcessBuilderView.class);
+
+ private TableViewer viewer;
+
+ private List<RealizedFlow> realizedFlows = new ArrayList<RealizedFlow>();
+
+ private String currentAgentUuid = null;
+ private ProcessController processController;
+
+ public void createPartControl(Composite parent) {
+ Table table = createTable(parent);
+ viewer = new TableViewer(table);
+ viewer.setLabelProvider(new ViewLabelProvider());
+ viewer.setContentProvider(new ViewContentProvider());
+ int operations = DND.DROP_COPY | DND.DROP_MOVE;
+ Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
+ viewer.addDropSupport(operations, tt, new ViewDropListener(viewer));
+ viewer.setInput(getViewSite());
+ }
+
+ protected Table createTable(Composite parent) {
+ int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL
+ | SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
+
+ Table table = new Table(parent, style);
+
+ GridData gridData = new GridData(GridData.FILL_BOTH);
+ gridData.grabExcessVerticalSpace = true;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.horizontalSpan = 3;
+ table.setLayoutData(gridData);
+
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+
+ TableColumn column = new TableColumn(table, SWT.LEFT, 0);
+ column.setText("Date");
+ column.setWidth(200);
+
+ column = new TableColumn(table, SWT.LEFT, 1);
+ column.setText("UUID");
+ column.setWidth(300);
+
+ return table;
+ }
+
+ protected void execute() {
+ // TODO: use agent proxy to retrieve it
+ SlcAgent agent = null;
+ SlcExecution slcExecution = new SlcExecution();
+ slcExecution.setUuid(UUID.randomUUID().toString());
+ slcExecution.setRealizedFlows(realizedFlows);
+
+ processController.execute(agent, slcExecution);
+ }
+
+ public void setFocus() {
+ viewer.getControl().setFocus();
+ }
+
+ public void setProcessController(ProcessController processController) {
+ this.processController = processController;
+ }
+
+ protected class ViewContentProvider implements IStructuredContentProvider {
+ public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
+ }
+
+ public void dispose() {
+ }
+
+ public Object[] getElements(Object obj) {
+ return realizedFlows.toArray();
+ }
+ }
+
+ protected class ViewLabelProvider extends LabelProvider implements
+ ITableLabelProvider {
+ public String getColumnText(Object obj, int index) {
+ RealizedFlow rf = (RealizedFlow) obj;
+ switch (index) {
+ case 0:
+ return rf.getModuleName();
+ case 1:
+ return rf.getFlowDescriptor().getName();
+ }
+ return getText(obj);
+ }
+
+ public Image getColumnImage(Object obj, int index) {
+ return null;
+ }
+
+ }
+
+ protected class ViewDropListener extends ViewerDropAdapter {
+
+ public ViewDropListener(Viewer viewer) {
+ super(viewer);
+ }
+
+ @Override
+ public boolean performDrop(Object data) {
+ System.out.println(data);
+ Properties props = new Properties();
+ ByteArrayInputStream in = new ByteArrayInputStream(data.toString()
+ .getBytes());
+ try {
+ props.load(in);
+ } catch (IOException e) {
+ throw new SlcException("Cannot create read realized flow", e);
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+
+ String agentId = props.getProperty("agentId");
+ if (currentAgentUuid == null)
+ currentAgentUuid = agentId;
+ else if (currentAgentUuid.equals(agentId))
+ return false;
+
+ RealizedFlow rf = realizedFlowFromProperties(props);
+ realizedFlows.add(rf);
+ getViewer().refresh();
+ return true;
+ }
+
+ private RealizedFlow realizedFlowFromProperties(Properties props) {
+ RealizedFlow rf = new RealizedFlow();
+ rf.setModuleName(props.getProperty("moduleName"));
+ rf.setModuleVersion(props.getProperty("moduleVersion"));
+ ExecutionFlowDescriptor efd = new ExecutionFlowDescriptor();
+ efd.setName(props.getProperty("flowName"));
+ rf.setFlowDescriptor(efd);
+ return rf;
+ }
+
+ @Override
+ public boolean validateDrop(Object target, int operation,
+ TransferData transferType) {
+ return true;
+
+ }
+
+ }
+
+}
private final static Log log = LogFactory
.getLog(ProcessListView.class);
- public static final String ID = "org.argeo.slc.client.ui.ProcessListView";
+ public static final String ID = "org.argeo.slc.client.ui.processListView";
private TableViewer viewer;