/*
- * Copyright (C) 2007-2012 Mathieu Baudier
+ * Copyright (C) 2007-2012 Argeo GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
+import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.nodetype.NodeType;
import org.argeo.eclipse.ui.jcr.NodeElementComparer;
import org.argeo.eclipse.ui.jcr.SimpleNodeContentProvider;
import org.argeo.eclipse.ui.specific.EclipseUiSpecificUtils;
-import org.argeo.slc.BasicNameVersion;
-import org.argeo.slc.NameVersion;
+import org.argeo.jcr.JcrUtils;
import org.argeo.slc.SlcException;
+import org.argeo.slc.client.ui.ClientUiPlugin;
import org.argeo.slc.client.ui.SlcImages;
import org.argeo.slc.client.ui.editors.ProcessEditor;
import org.argeo.slc.client.ui.editors.ProcessEditorInput;
import org.argeo.slc.jcr.SlcJcrConstants;
import org.argeo.slc.jcr.SlcNames;
import org.argeo.slc.jcr.SlcTypes;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
private final static Log log = LogFactory
.getLog(JcrExecutionModulesView.class);
- public static final String ID = "org.argeo.slc.client.ui.jcrExecutionModulesView";
+ public static final String ID = ClientUiPlugin.ID
+ + ".jcrExecutionModulesView";
private TreeViewer viewer;
+ /* DEPENDENCY INJECTION */
private Session session;
-
private ExecutionModulesManager modulesManager;
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
EclipseUiSpecificUtils.enableToolTipSupport(viewer);
-
ViewContentProvider contentProvider = new ViewContentProvider(session);
viewer.setContentProvider(contentProvider);
viewer.setComparer(new NodeElementComparer());
viewer.setLabelProvider(viewLabelProvider);
viewer.setInput(getViewSite());
viewer.addDoubleClickListener(new ViewDoubleClickListener());
+ // context menu
+ // addContextMenu(viewer);
+
getViewSite().setSelectionProvider(viewer);
Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
viewer.setInput(getViewSite());
}
+ // Controllers
class ViewContentProvider extends SimpleNodeContentProvider {
public ViewContentProvider(Session session) {
new String[] { SlcJcrConstants.VM_AGENT_FACTORY_PATH });
}
- // @Override
- // protected Object[] getChildren(Node node) throws RepositoryException
- // {
- // if (node.isNodeType(SlcTypes.SLC_AGENT_FACTORY)) {
- // List<AgentNodesWrapper> wrappers = new
- // ArrayList<AgentNodesWrapper>();
- // for (NodeIterator nit = node.getNodes(); nit.hasNext();) {
- // wrappers.add(new AgentNodesWrapper(nit.nextNode()));
- // }
- // return wrappers.toArray();
- // }
- // return super.getChildren(node);
- // }
-
@Override
protected Object[] sort(Object parent, Object[] children) {
Object[] sorted = new Object[children.length];
}
- // /** Wraps the execution modules of an agent. */
- // static class AgentNodesWrapper extends NodesWrapper {
+ // private void addContextMenu(TreeViewer flowsViewer) {
//
- // public AgentNodesWrapper(Node node) {
- // super(node);
- // }
+ // final MenuManager menuMgr = new MenuManager();
+ // menuMgr.setRemoveAllWhenShown(true);
+ // menuMgr.addMenuListener(new IMenuListener() {
//
- // protected List<WrappedNode> getWrappedNodes()
- // throws RepositoryException {
- // List<WrappedNode> children = new ArrayList<WrappedNode>();
- // Node executionModules = getNode();
- // for (NodeIterator nit = executionModules.getNodes(); nit.hasNext();) {
- // for (NodeIterator nitVersions = nit.nextNode().getNodes(); nitVersions
- // .hasNext();) {
- // children.add(new WrappedNode(this, nitVersions.nextNode()));
+ // public void menuAboutToShow(IMenuManager manager) {
+ // menuMgr.add(new Action("Test") {
+ // public void run() {
+ // log.debug("do something");
// }
+ // });
// }
- // return children;
- // }
- //
+ // });
+ // Menu menu = menuMgr.createContextMenu(flowsViewer.getControl());
+ // flowsViewer.getTree().setMenu(menu);
+ // getSite().registerContextMenu(menuMgr, flowsViewer);
// }
class VmAgentObserver extends AsyncUiEventListener {
}
}
- // try {
- // Node vmAgentNode = session
- // .getNode(SlcJcrConstants.VM_AGENT_FACTORY_PATH);
- // viewer.refresh(vmAgentNode);
- // } catch (RepositoryException e) {
- // log.warn("Cannot process event : " + e);
- // }
// TODO: optimize based on event
viewer.refresh();
}
if (obj instanceof Node) {
Node node = (Node) obj;
if (node.isNodeType(SLC_EXECUTION_MODULE)) {
- String name = node.getProperty(SLC_NAME).getString();
- String version = node.getProperty(SLC_VERSION)
- .getString();
- final NameVersion nameVersion = new BasicNameVersion(
- name, version);
- Boolean started = node.getProperty(SLC_STARTED)
- .getBoolean();
-
- Job job;
- if (started) {
- job = new Job("Stop " + nameVersion) {
- protected IStatus run(IProgressMonitor monitor) {
- monitor.beginTask("Stop " + nameVersion, 1);
- modulesManager.stop(nameVersion);
- monitor.worked(1);
- return Status.OK_STATUS;
- }
-
- protected void canceling() {
- getThread().interrupt();
- super.canceling();
- }
- };
- } else {
- job = new Job("Start " + nameVersion) {
- protected IStatus run(IProgressMonitor monitor) {
- monitor.beginTask("Start " + nameVersion, 1);
- modulesManager.start(nameVersion);
- monitor.worked(1);
- return Status.OK_STATUS;
- }
-
- protected void canceling() {
- getThread().interrupt();
- super.canceling();
- }
- };
- }
- job.setUser(true);
- job.schedule();
+ ClientUiPlugin.startStopExecutionModule(modulesManager,
+ node);
} else {
String path = node.getPath();
// TODO factorize with editor
paths.add(nit.nextNode().getPath());
}
- // List<String> paths = new ArrayList<String>();
- // paths.add(node.getPath());
IWorkbenchPage activePage = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
activePage.openEditor(new ProcessEditorInput(
/** Listen to drags */
class ViewDragListener extends DragSourceAdapter {
+
+ // Check if the drag action should start.
+ public void dragStart(DragSourceEvent event) {
+ // we only start drag if at least one of the selected elements is
+ // valid
+ boolean doIt = false;
+ IStructuredSelection selection = (IStructuredSelection) viewer
+ .getSelection();
+ @SuppressWarnings("rawtypes")
+ Iterator it = selection.iterator();
+ try {
+ while (it.hasNext()) {
+ Object obj = it.next();
+ if (obj instanceof Node) {
+ Node node = (Node) obj;
+ if (node.isNodeType(SlcTypes.SLC_EXECUTION_FLOW)
+ || node.isNodeType(SlcTypes.SLC_EXECUTION_MODULE)) {
+ doIt = true;
+ }
+ }
+ }
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot read node to set drag data", e);
+ }
+ event.doit = doIt;
+ }
+
public void dragSetData(DragSourceEvent event) {
IStructuredSelection selection = (IStructuredSelection) viewer
.getSelection();
- if (selection.getFirstElement() instanceof Node) {
- Node node = (Node) selection.getFirstElement();
- if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
- try {
- event.data = node.getPath();
- } catch (RepositoryException e) {
- throw new SlcException("Cannot read node", e);
+ StringBuilder buf = new StringBuilder();
+ @SuppressWarnings("rawtypes")
+ Iterator it = selection.iterator();
+ try {
+
+ while (it.hasNext()) {
+ Object obj = it.next();
+
+ if (obj instanceof Node) {
+ Node node = (Node) obj;
+ if ((node.isNodeType(SlcTypes.SLC_EXECUTION_FLOW) || node
+ .isNodeType(SlcTypes.SLC_EXECUTION_MODULE))
+ && TextTransfer.getInstance().isSupportedType(
+ event.dataType)) {
+ buf.append(node.getPath()).append('\n');
+ }
}
}
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot read node to set drag data", e);
+ }
+
+ if (buf.length() > 0) {
+ if (buf.charAt(buf.length() - 1) == '\n')
+ buf.deleteCharAt(buf.length() - 1);
+ event.data = buf.toString();
+ log.debug("data set to : " + buf.toString());
}
}
}
- public void setSession(Session session) {
- this.session = session;
+ public void dispose() {
+ JcrUtils.logoutQuietly(session);
+ super.dispose();
}
+ // DEPENDENCY INJECTION
+
public void setModulesManager(ExecutionModulesManager modulesManager) {
this.modulesManager = modulesManager;
}
+ @Deprecated
+ public void setSession(Session session) {
+ this.session = session;
+ }
+
+ public void setRepository(Repository repository) {
+ try {
+ session = repository.login();
+ } catch (RepositoryException re) {
+ throw new SlcException("Unable to log in Repository " + repository,
+ re);
+ }
+ }
}
\ No newline at end of file