X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=plugins%2Forg.argeo.slc.client.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Feditors%2FProcessBuilderPage.java;h=a18fecd318e5b6edb9aec8bfb92536c80c4c9b99;hb=2fd714f3b2c3bf3168e8a2a9b9d8e5e999e0af65;hp=833cc89d16f5bc57dd2567071e82397e0b9cc2eb;hpb=de32ea41c5ebe2b35a2d1cea00166a9dd349e7de;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessBuilderPage.java b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessBuilderPage.java index 833cc89d1..a18fecd31 100644 --- a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessBuilderPage.java +++ b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/editors/ProcessBuilderPage.java @@ -39,7 +39,6 @@ import org.argeo.slc.SlcException; import org.argeo.slc.client.ui.SlcImages; import org.argeo.slc.core.execution.PrimitiveAccessor; import org.argeo.slc.core.execution.PrimitiveUtils; -import org.argeo.slc.execution.ExecutionModulesManager; import org.argeo.slc.execution.ExecutionProcess; import org.argeo.slc.jcr.SlcJcrUtils; import org.argeo.slc.jcr.SlcNames; @@ -78,6 +77,8 @@ import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.forms.AbstractFormPart; import org.eclipse.ui.forms.IManagedForm; @@ -87,13 +88,15 @@ import org.eclipse.ui.forms.widgets.ScrolledForm; /** Definition of the process. */ public class ProcessBuilderPage extends FormPage implements SlcNames { + // private final static Log log = + // LogFactory.getLog(ProcessBuilderPage.class); + public final static String ID = "processBuilderPage"; /** To be displayed in empty lists */ final static String NONE = ""; private Node processNode; - private final ExecutionModulesManager modulesManager; private TreeViewer flowsViewer; private TableViewer valuesViewer; @@ -105,11 +108,9 @@ public class ProcessBuilderPage extends FormPage implements SlcNames { private AbstractFormPart formPart; private EventListener statusObserver; - public ProcessBuilderPage(ProcessEditor editor, Node processNode, - ExecutionModulesManager modulesManager) { + public ProcessBuilderPage(ProcessEditor editor, Node processNode) { super(editor, ID, "Definition"); this.processNode = processNode; - this.modulesManager = modulesManager; } @Override @@ -239,6 +240,9 @@ public class ProcessBuilderPage extends FormPage implements SlcNames { flowsViewer.addDropSupport(operations, tt, new FlowsDropListener( flowsViewer)); + // Context menu + addContextMenu(); + flowsViewer.setInput(getEditorSite()); flowsViewer.setInput(processNode); @@ -610,6 +614,39 @@ public class ProcessBuilderPage extends FormPage implements SlcNames { } } + /** + * Add a context menu that call private methods. It only relies on selected + * item(s) not on parameter that are passed in the menuAboutToShow method + **/ + private void addContextMenu() { + Menu menu = new Menu(flowsViewer.getControl()); + + MenuItem removeItems = new MenuItem(menu, SWT.PUSH); + removeItems.addSelectionListener(new SelectionListener() { + + public void widgetSelected(SelectionEvent e) { + removeSelectedFlows(); + } + + public void widgetDefaultSelected(SelectionEvent e) { + } + }); + removeItems.setText("Remove selected flow(s)"); + + MenuItem removeAllItems = new MenuItem(menu, SWT.PUSH); + removeAllItems.addSelectionListener(new SelectionListener() { + + public void widgetSelected(SelectionEvent e) { + removeAllFlows(); + } + + public void widgetDefaultSelected(SelectionEvent e) { + } + }); + removeAllItems.setText("Remove all flows"); + flowsViewer.getTree().setMenu(menu); + } + /** Manages drop event. */ class FlowsDropListener extends ViewerDropAdapter { @@ -619,32 +656,40 @@ public class ProcessBuilderPage extends FormPage implements SlcNames { @Override public boolean performDrop(Object data) { - String path = data.toString(); - try { - // either a node or a whole directory was dragged - QueryManager qm = processNode.getSession().getWorkspace() - .getQueryManager(); - String statement = "SELECT * FROM [" - + SlcTypes.SLC_EXECUTION_FLOW - + "] WHERE ISDESCENDANTNODE(['" + path - + "']) OR ISSAMENODE(['" + path + "'])"; - // log.debug(statement); - Query query = qm.createQuery(statement, Query.JCR_SQL2); - - // order paths - SortedSet paths = new TreeSet(); - for (NodeIterator nit = query.execute().getNodes(); nit - .hasNext();) { - paths.add(nit.nextNode().getPath()); - } - for (String p : paths) { - addFlow(p); + // Parse the received String, paths are separated with a carriage + // return + String[] paths = data.toString().split(new String("\n")); + SortedSet resultPaths = new TreeSet(); + for (String path : paths) { + try { + // either a node or a whole directory can have been dragged + QueryManager qm = processNode.getSession().getWorkspace() + .getQueryManager(); + String statement = "SELECT * FROM [" + + SlcTypes.SLC_EXECUTION_FLOW + + "] WHERE ISDESCENDANTNODE(['" + path + + "']) OR ISSAMENODE(['" + path + "'])"; + Query query = qm.createQuery(statement, Query.JCR_SQL2); + + // order paths + for (NodeIterator nit = query.execute().getNodes(); nit + .hasNext();) { + String currPath = nit.nextNode().getPath(); + // do not add twice a same flow + if (!resultPaths.contains(currPath)) + resultPaths.add(currPath); + } + } catch (RepositoryException e) { + throw new SlcException("Cannot query flows under " + path, + e); } - return true; - } catch (RepositoryException e) { - throw new SlcException("Cannot query flows under " + path, e); } + for (String p : resultPaths) { + addFlow(p); + } + return true; + } @Override @@ -672,6 +717,12 @@ public class ProcessBuilderPage extends FormPage implements SlcNames { if (!specAttrNode .isNodeType(SlcTypes.SLC_EXECUTION_SPEC_ATTRIBUTE)) continue specAttrs; + // workaround to enable hiding of necessary but unusable + // flow parameters + else if (specAttrNode.hasProperty(SlcNames.SLC_IS_HIDDEN) + && specAttrNode.getProperty(SlcNames.SLC_IS_HIDDEN) + .getBoolean()) + continue specAttrs; specAttributes.add(specAttrNode); } return specAttributes.toArray();