import javax.jcr.Session;
import javax.jcr.nodetype.NodeType;
import javax.jcr.observation.Event;
-import javax.jcr.observation.EventIterator;
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.eclipse.ui.jcr.DefaultNodeLabelProvider;
+import org.argeo.eclipse.ui.jcr.NodeElementComparer;
import org.argeo.eclipse.ui.jcr.SimpleNodeContentProvider;
import org.argeo.slc.BasicNameVersion;
import org.argeo.slc.NameVersion;
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;
/** JCR based view of the execution modules. */
public class JcrExecutionModulesView extends ViewPart implements SlcTypes,
SlcNames {
- // private final static Log log = LogFactory
- // .getLog(JcrExecutionModulesView.class);
+ private final static Log log = LogFactory
+ .getLog(JcrExecutionModulesView.class);
public static final String ID = "org.argeo.slc.client.ui.jcrExecutionModulesView";
ViewContentProvider contentProvider = new ViewContentProvider(session);
viewer.setContentProvider(contentProvider);
+ viewer.setComparer(new NodeElementComparer());
final ViewLabelProvider viewLabelProvider = new ViewLabelProvider();
viewer.setLabelProvider(viewLabelProvider);
+ // ColumnViewerToolTipSupport.enableFor(viewer);
viewer.setInput(getViewSite());
viewer.addDoubleClickListener(new ViewDoubleClickListener());
getViewSite().setSelectionProvider(viewer);
viewer.addDragSupport(operations, tt, new ViewDragListener());
try {
+ String[] nodeTypes = { SlcTypes.SLC_AGENT,
+ SlcTypes.SLC_AGENT_FACTORY, SlcTypes.SLC_EXECUTION_MODULE };
session.getWorkspace()
.getObservationManager()
.addEventListener(
Event.NODE_ADDED | Event.NODE_REMOVED
| Event.NODE_MOVED,
SlcJcrConstants.VM_AGENT_FACTORY_PATH, true, null,
- null, false);
+ nodeTypes, false);
} catch (RepositoryException e) {
throw new SlcException("Cannot add observer", e);
}
super(display);
}
- protected void onEventInUiThread(EventIterator events) {
- // List<Node> baseNodes = ((SimpleNodeContentProvider) viewer
- // .getContentProvider()).getBaseNodes();
- // Node baseNode = baseNodes.get(0);
- //
- // while (events.hasNext()) {
- // Event event = events.nextEvent();
- // try {
- // String path = event.getPath();
- // String baseNodePath = baseNode.getPath();
- // if (path.startsWith(baseNodePath)) {
- // String relPath = path
- // .substring(baseNodePath.length() + 1);
- // log.debug("relPath: " + relPath);
- // if (baseNode.hasNode(relPath)) {
- // Node refreshNode = baseNode.getNode(relPath);
- // log.debug("refreshNode: " + refreshNode);
- // viewer.refresh(refreshNode);
- // }
- //
- // }
- // // if (log.isDebugEnabled())
- // // log.debug("Process " + path + ": " + event);
- //
- // // if (session.itemExists(path)) {
- // // Node parentNode = session.getNode(path).getParent();
- // // log.debug("Parent: " + parentNode);
- // // viewer.refresh(parentNode);
- // // }
- // } catch (RepositoryException e) {
- // log.warn("Cannot process event " + event + ": " + e);
- // }
- // }
+ protected void onEventInUiThread(List<Event> events) {
+ for (Event event : events) {
+ try {
+ String path = event.getPath();
+
+ if (session.itemExists(path)) {
+ Node parentNode = session.getNode(path);// .getParent();
+ if (log.isTraceEnabled())
+ log.trace("Refresh " + parentNode + " after event "
+ + event);
+ viewer.refresh(parentNode);
+ }
+ } catch (RepositoryException e) {
+ log.warn("Cannot process event " + event + ": " + e);
+ }
+ }
// try {
// Node vmAgentNode = session
@Override
protected String getText(Node node) throws RepositoryException {
- if (node.getName().equals(SLC_EXECUTION_SPECS))
+ if (node.isNodeType(NodeType.MIX_TITLE)
+ && node.hasProperty(Property.JCR_TITLE))
+ return node.getProperty(Property.JCR_TITLE).getString();
+ else if (node.getName().equals(SLC_EXECUTION_SPECS))
return "Execution Specifications";
else if (node.getPath().equals(
SlcJcrConstants.VM_AGENT_FACTORY_PATH))
String name = node.getProperty(SLC_NAME).getString();
String version = node.getProperty(SLC_VERSION)
.getString();
- NameVersion nameVersion = new BasicNameVersion(name,
- version);
+ final NameVersion nameVersion = new BasicNameVersion(
+ name, version);
Boolean started = node.getProperty(SLC_STARTED)
.getBoolean();
+
+ Job job;
if (started) {
- modulesManager.stop(nameVersion);
+ 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;
+ }
+ };
} else {
- modulesManager.start(nameVersion);
+ 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;
+ }
+ };
}
+ job.setUser(true);
+ job.schedule();
} else {
String path = node.getPath();
// TODO factorize with editor