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=5cb83c1523e39b261394b7769eb69d6301786876;hb=ac38932aab09592c1ec0af26c26899536dff284f;hp=59157a3702bfb5a6d3fab4ebe3364786603a5b5d;hpb=12419f46844753798cd1b1eab3a7379611f25e47;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 59157a370..5cb83c152 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 @@ -3,26 +3,34 @@ package org.argeo.slc.client.ui.views; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; +import java.util.Iterator; import java.util.List; import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.RepositoryException; import javax.jcr.Session; +import javax.jcr.nodetype.NodeType; import javax.jcr.observation.Event; import javax.jcr.observation.EventIterator; +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.SimpleNodeContentProvider; +import org.argeo.slc.BasicNameVersion; +import org.argeo.slc.NameVersion; import org.argeo.slc.SlcException; 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.execution.ExecutionModulesManager; import org.argeo.slc.jcr.SlcJcrConstants; import org.argeo.slc.jcr.SlcNames; import org.argeo.slc.jcr.SlcTypes; +import org.eclipse.jface.fieldassist.SimpleContentProposalProvider; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; @@ -44,8 +52,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"; @@ -53,6 +61,8 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, private Session session; + private ExecutionModulesManager modulesManager; + public void createPartControl(Composite parent) { viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); ColumnViewerToolTipSupport.enableFor(viewer); @@ -64,6 +74,7 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, viewer.setLabelProvider(viewLabelProvider); viewer.setInput(getViewSite()); viewer.addDoubleClickListener(new ViewDoubleClickListener()); + getViewSite().setSelectionProvider(viewer); Transfer[] tt = new Transfer[] { TextTransfer.getInstance() }; // Transfer[] tt = new Transfer[] { EditorInputTransfer.getInstance() }; @@ -103,17 +114,19 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, new String[] { SlcJcrConstants.VM_AGENT_FACTORY_PATH }); } -// @Override -// protected Object[] getChildren(Node node) throws RepositoryException { -// if (node.isNodeType(SlcTypes.SLC_AGENT_FACTORY)) { -// List wrappers = new ArrayList(); -// for (NodeIterator nit = node.getNodes(); nit.hasNext();) { -// wrappers.add(new AgentNodesWrapper(nit.nextNode())); -// } -// return wrappers.toArray(); -// } -// return super.getChildren(node); -// } + // @Override + // protected Object[] getChildren(Node node) throws RepositoryException + // { + // if (node.isNodeType(SlcTypes.SLC_AGENT_FACTORY)) { + // List wrappers = new + // ArrayList(); + // 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) { @@ -122,6 +135,17 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, Arrays.sort(sorted, new ViewComparator()); return sorted; } + + @Override + protected List filterChildren(List children) + throws RepositoryException { + for (Iterator it = children.iterator(); it.hasNext();) { + Node node = it.next(); + if (node.getName().equals(SLC_EXECUTION_SPECS)) + it.remove(); + } + return super.filterChildren(children); + } } static class ViewComparator implements Comparator { @@ -131,6 +155,12 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, if (o1 instanceof Node && o2 instanceof Node) { Node node1 = (Node) o1; Node node2 = (Node) o2; + + if (node1.getName().equals(SLC_EXECUTION_SPECS)) + return -100; + if (node2.getName().equals(SLC_EXECUTION_SPECS)) + return 100; + if (node1.isNodeType(SLC_EXECUTION_FLOW) && node2.isNodeType(SLC_EXECUTION_FLOW)) { return node1.getName().compareTo(node2.getName()); @@ -154,62 +184,130 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, } -// /** Wraps the execution modules of an agent. */ -// static class AgentNodesWrapper extends NodesWrapper { + // /** Wraps the execution modules of an agent. */ + // static class AgentNodesWrapper extends NodesWrapper { + // + // public AgentNodesWrapper(Node node) { + // super(node); + // } + // + // protected List getWrappedNodes() + // throws RepositoryException { + // List children = new ArrayList(); + // 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())); + // } + // } + // return children; + // } + // + // } + + class VmAgentObserver extends AsyncUiEventListener { + protected void onEventInUiThread(EventIterator events) { +// List baseNodes = ((SimpleNodeContentProvider) viewer +// .getContentProvider()).getBaseNodes(); +// Node baseNode = baseNodes.get(0); // -// public AgentNodesWrapper(Node node) { -// super(node); -// } +// 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); +// } // -// protected List getWrappedNodes() -// throws RepositoryException { -// List children = new ArrayList(); -// 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())); +// } +// // 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); // } // } -// return children; -// } -// -// } - class VmAgentObserver extends AsyncUiEventListener { - protected void onEventInUiThread(EventIterator events) { + // 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(); } } class ViewLabelProvider extends DefaultNodeLabelProvider implements ITableLabelProvider { - public String getColumnText(Object obj, int index) { - return getText(obj); - } - public Image getColumnImage(Object obj, int index) { - return getImage(obj); + @Override + protected String getText(Node node) throws RepositoryException { + if (node.getName().equals(SLC_EXECUTION_SPECS)) + return "Execution Specifications"; + else if (node.getPath().equals( + SlcJcrConstants.VM_AGENT_FACTORY_PATH)) + return "Internal Agents"; + return super.getText(node); } + @Override public Image getImage(Node node) throws RepositoryException { - if (node.isNodeType(SlcTypes.SLC_AGENT)) - return SlcImages.AGENT; - else if (node.isNodeType(SlcTypes.SLC_MODULE)) - return SlcImages.MODULE; + // we try to optimize a bit by putting deeper nodes first + if (node.getParent().isNodeType( + SlcTypes.SLC_EXECUTION_SPEC_ATTRIBUTE)) + return SlcImages.CHOICES; + else if (node.isNodeType(SlcTypes.SLC_EXECUTION_SPEC_ATTRIBUTE)) + return SlcImages.EXECUTION_SPEC_ATTRIBUTE; + else if (node.isNodeType(SlcTypes.SLC_EXECUTION_SPEC)) + return SlcImages.EXECUTION_SPEC; + else if (node.getName().equals(SLC_EXECUTION_SPECS)) + return SlcImages.EXECUTION_SPECS; else if (node.isNodeType(SlcTypes.SLC_EXECUTION_FLOW)) return SlcImages.FLOW; + else if (node.isNodeType(SlcTypes.SLC_MODULE)) { + if (node.getProperty(SLC_STARTED).getBoolean()) + return SlcImages.MODULE; + else + return SlcImages.MODULE_STOPPED; + } else if (node.isNodeType(SlcTypes.SLC_AGENT)) + return SlcImages.AGENT; + else if (node.isNodeType(SlcTypes.SLC_AGENT_FACTORY)) + return SlcImages.AGENT_FACTORY; else return SlcImages.FOLDER; } public String getToolTipText(Node node) throws RepositoryException { - if (node.isNodeType(SlcTypes.SLC_MODULE) + if (node.isNodeType(NodeType.MIX_TITLE) && node.hasProperty(Property.JCR_DESCRIPTION)) return node.getProperty(Property.JCR_DESCRIPTION).getString(); return super.getToolTipText(node); } + public String getColumnText(Object obj, int index) { + return getText(obj); + } + + public Image getColumnImage(Object obj, int index) { + return getImage(obj); + } + } class ViewDoubleClickListener implements IDoubleClickListener { @@ -226,6 +324,19 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, .getActiveWorkbenchWindow().getActivePage(); activePage.openEditor(new ProcessEditorInput(paths, true), ProcessEditor.ID); + } else if (node.isNodeType(SLC_EXECUTION_MODULE)) { + String name = node.getProperty(SLC_NAME).getString(); + String version = node.getProperty(SLC_VERSION) + .getString(); + NameVersion nameVersion = new BasicNameVersion(name, + version); + Boolean started = node.getProperty(SLC_STARTED) + .getBoolean(); + if (started) { + modulesManager.stop(nameVersion); + } else { + modulesManager.start(nameVersion); + } } } } catch (Exception e) { @@ -275,4 +386,8 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, this.session = session; } + public void setModulesManager(ExecutionModulesManager modulesManager) { + this.modulesManager = modulesManager; + } + } \ No newline at end of file