import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.jcr.AsyncUiEventListener;
import org.argeo.jcr.JcrUtils;
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;
/** 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 */
flowsViewer.addDropSupport(operations, tt, new FlowsDropListener(
flowsViewer));
+ // Context menu
+ addContextMenu();
+
flowsViewer.setInput(getEditorSite());
flowsViewer.setInput(processNode);
}
}
+ /**
+ * 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 {
@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<String> paths = new TreeSet<String>();
- 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<String> resultPaths = new TreeSet<String>();
+ 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
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();