X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Fplugins%2Forg.argeo.slc.client.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fviews%2FJcrExecutionModulesView.java;h=b33238e3cc4ea32b9f14f23931b3f8f6b30b5b54;hb=83996361545b06f97a85d20f3b5824af0a2c4904;hp=75864680e0a8970efac4567b90dbdc1994d49c45;hpb=eef4888d3214ab92c5df3768d08c3e26269cc429;p=gpl%2Fargeo-slc.git diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java index 75864680e..b33238e3c 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrExecutionModulesView.java @@ -15,13 +15,15 @@ import javax.jcr.RepositoryException; 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; @@ -33,6 +35,11 @@ import org.argeo.slc.execution.ExecutionModulesManager; 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.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; @@ -54,8 +61,8 @@ import org.eclipse.ui.part.ViewPart; /** 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"; @@ -74,8 +81,11 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, ViewContentProvider contentProvider = new ViewContentProvider(session); viewer.setContentProvider(contentProvider); + viewer.setComparer(new NodeElementComparer()); final ViewLabelProvider viewLabelProvider = new ViewLabelProvider(); viewer.setLabelProvider(viewLabelProvider); + // FIXME fail on RAP put it in specific + ColumnViewerToolTipSupport.enableFor(viewer); viewer.setInput(getViewSite()); viewer.addDoubleClickListener(new ViewDoubleClickListener()); getViewSite().setSelectionProvider(viewer); @@ -86,6 +96,8 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, viewer.addDragSupport(operations, tt, new ViewDragListener()); try { + String[] nodeTypes = { SlcTypes.SLC_AGENT, + SlcTypes.SLC_AGENT_FACTORY, SlcTypes.SLC_EXECUTION_MODULE }; session.getWorkspace() .getObservationManager() .addEventListener( @@ -93,7 +105,7 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, 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); } @@ -235,39 +247,22 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, super(display); } - protected void onEventInUiThread(EventIterator events) { - // List 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 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 @@ -286,7 +281,10 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, @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)) @@ -349,15 +347,33 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, 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