From 15fdf876a4dbb73b379f8c6c16d7d929955ade4d Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 19 Apr 2011 19:09:56 +0000 Subject: [PATCH] Processes list view ASSIGNED - bug 17: Generalize agent management and registration beyond JMS https://bugzilla.argeo.org/show_bug.cgi?id=17 git-svn-id: https://svn.argeo.org/slc/trunk@4458 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../META-INF/MANIFEST.MF | 1 + .../META-INF/spring/jcr.xml | 5 +- .../org.argeo.slc.client.ui/plugin.xml | 7 + .../client/ui/SlcExecutionPerspective.java | 2 +- .../client/ui/editors/ProcessBuilderPage.java | 15 +- .../slc/client/ui/editors/ProcessEditor.java | 1 - .../listeners/TestManagerServiceAdapter.java | 12 +- .../ui/views/JcrExecutionModulesView.java | 92 +------- .../client/ui/views/JcrProcessListView.java | 205 ++++++++++++++++++ 9 files changed, 231 insertions(+), 109 deletions(-) create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrProcessListView.java diff --git a/eclipse/plugins/org.argeo.slc.client.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/MANIFEST.MF index e2a3d5582..9fe6f8f6e 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/META-INF/MANIFEST.MF +++ b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/MANIFEST.MF @@ -16,6 +16,7 @@ Export-Package: org.argeo.slc.client.ui, Import-Package: javax.jcr;version="2.0.0", javax.jcr.nodetype;version="2.0.0", javax.jcr.observation;version="2.0.0", + javax.jcr.query;version="2.0.0", org.apache.commons.io;version="1.4.0", org.apache.commons.logging;version="1.1.1", org.argeo, diff --git a/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/jcr.xml b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/jcr.xml index 072ed6313..340ae1c78 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/jcr.xml +++ b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/jcr.xml @@ -7,10 +7,13 @@ - + + + diff --git a/eclipse/plugins/org.argeo.slc.client.ui/plugin.xml b/eclipse/plugins/org.argeo.slc.client.ui/plugin.xml index 39cadc59f..96f9fe1f9 100644 --- a/eclipse/plugins/org.argeo.slc.client.ui/plugin.xml +++ b/eclipse/plugins/org.argeo.slc.client.ui/plugin.xml @@ -49,6 +49,13 @@ icon="icons/processes.gif" restorable="true"> + + paths = new ArrayList(); paths.add(node.getPath()); - PlatformUI - .getWorkbench() - .getActiveWorkbenchWindow() - .getActivePage() - .openEditor( - new ProcessEditorInput(paths, true), - ProcessEditor.ID); + IWorkbenchPage activePage = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getActivePage(); + activePage.openEditor(new ProcessEditorInput(paths, + true), ProcessEditor.ID); } } } catch (Exception e) { throw new SlcException("Cannot open " + obj, e); } - - // if (obj instanceof ExecutionModulesContentProvider.FlowNode) { - // ExecutionModulesContentProvider.FlowNode fn = - // (ExecutionModulesContentProvider.FlowNode) obj; - // - // List realizedFlows = new ArrayList(); - // RealizedFlow realizedFlow = new RealizedFlow(); - // realizedFlow.setModuleName(fn.getExecutionModuleNode() - // .getDescriptor().getName()); - // realizedFlow.setModuleVersion(fn.getExecutionModuleNode() - // .getDescriptor().getVersion()); - // realizedFlow.setFlowDescriptor(fn.getExecutionModuleNode() - // .getFlowDescriptors().get(fn.getFlowName())); - // realizedFlows.add(realizedFlow); - // - // SlcExecution slcExecution = new SlcExecution(); - // slcExecution.setUuid(UUID.randomUUID().toString()); - // slcExecution.setRealizedFlows(realizedFlows); - // slcExecution.setHost(fn.getExecutionModuleNode().getAgentNode() - // .getAgent().toString()); - // processController.execute(fn.getExecutionModuleNode() - // .getAgentNode().getAgent(), slcExecution); - // } } } @@ -314,31 +283,6 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, // TODO Auto-generated catch block e1.printStackTrace(); } - // - // // ExecutionModulesContentProvider.FlowNode flowNode = - // (ExecutionModulesContentProvider.FlowNode) selection - // // .getFirstElement(); - // // - // // Properties props = new Properties(); - // // flowNodeAsProperties(props, flowNode); - // // props.setProperty("agentId", flowNode - // // .getExecutionModuleNode().getAgentNode().getAgent() - // // .getAgentUuid()); - // // props.setProperty("host", - // flowNode.getExecutionModuleNode() - // // .getAgentNode().getAgent().toString()); - // // - // // ByteArrayOutputStream out = new - // ByteArrayOutputStream(); - // // try { - // // props.store(out, ""); - // // event.data = new String(out.toByteArray()); - // // } catch (IOException e) { - // // throw new SlcException( - // // "Cannot transform realized flow", e); - // // } finally { - // // IOUtils.closeQuietly(out); - // // } } } } @@ -348,32 +292,6 @@ public class JcrExecutionModulesView extends ViewPart implements SlcTypes, log.debug("Finished Drag " + event); } - protected void flowNodeAsProperties(Properties props, FlowNode fn) { - - RealizedFlow realizedFlow = new RealizedFlow(); - realizedFlow.setModuleName(fn.getExecutionModuleNode() - .getDescriptor().getName()); - realizedFlow.setModuleVersion(fn.getExecutionModuleNode() - .getDescriptor().getVersion()); - realizedFlow.setFlowDescriptor(fn.getExecutionFlowDescriptor()); - - // As we want to have the effective ExecutionSpec and not a - // reference; we store it at the RealizeFlow level : thus the - // marshaller will store the object and not only a reference. - realizedFlow.setExecutionSpec(fn.getExecutionFlowDescriptor() - .getExecutionSpec()); - - // props.setProperty("RealizedFlowAsXml", - // oxmBean.marshal(realizedFlow)); - // System.out - // .println(oxmBean.marshal(fn.getExecutionFlowDescriptor())); - - } - - } - - public void setProcessController(ProcessController processController) { - this.processController = processController; } public void setSession(Session session) { diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrProcessListView.java b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrProcessListView.java new file mode 100644 index 000000000..8c2bb4007 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrProcessListView.java @@ -0,0 +1,205 @@ +package org.argeo.slc.client.ui.views; + +import java.util.ArrayList; +import java.util.List; + +import javax.jcr.Node; +import javax.jcr.NodeIterator; +import javax.jcr.Property; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.observation.Event; +import javax.jcr.observation.EventIterator; +import javax.jcr.observation.EventListener; +import javax.jcr.observation.ObservationManager; +import javax.jcr.query.Query; + +import org.argeo.eclipse.ui.jcr.AsyncUiEventListener; +import org.argeo.jcr.JcrUtils; +import org.argeo.slc.SlcException; +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.jface.viewers.ColumnLabelProvider; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.part.ViewPart; + +/** + * This class display the list of all processes that have run in the + * corresponding agent. Currently, the local agent. + */ +public class JcrProcessListView extends ViewPart { + public static final String ID = "org.argeo.slc.client.ui.jcrProcessListView"; + + private TableViewer viewer; + + private Session session; + + private EventListener processesObserver; + + public void createPartControl(Composite parent) { + Table table = createTable(parent); + viewer = new TableViewer(table); + viewer.setLabelProvider(new LabelProvider()); + viewer.setContentProvider(new ContentProvider()); + viewer.setInput(getViewSite()); + viewer.addDoubleClickListener(new ViewDoubleClickListener()); + + processesObserver = new AsyncUiEventListener() { + protected void onEventInUiThread(EventIterator events) { + viewer.refresh(); + } + }; + try { + ObservationManager observationManager = session.getWorkspace() + .getObservationManager(); + observationManager.addEventListener(processesObserver, + Event.NODE_ADDED | Event.NODE_REMOVED + | Event.PROPERTY_CHANGED, + SlcJcrConstants.PROCESSES_BASE_PATH, true, null, null, + false); + } catch (RepositoryException e) { + throw new SlcException("Cannot register listeners", e); + } + + } + + protected Table createTable(Composite parent) { + int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL + | SWT.FULL_SELECTION; + // does not function with RAP, commented for the time being + // | SWT.HIDE_SELECTION; + + Table table = new Table(parent, style); + + table.setLinesVisible(true); + table.setHeaderVisible(true); + + TableColumn column = new TableColumn(table, SWT.LEFT, 0); + column.setText("Date"); + column.setWidth(200); + + column = new TableColumn(table, SWT.LEFT, 1); + column.setText("Host"); + column.setWidth(100); + + column = new TableColumn(table, SWT.LEFT, 2); + column.setText("Id"); + column.setWidth(300); + + column = new TableColumn(table, SWT.LEFT, 3); + column.setText("Status"); + column.setWidth(100); + + return table; + } + + public void setFocus() { + viewer.getControl().setFocus(); + } + + @Override + public void dispose() { + JcrUtils.unregisterQuietly(session.getWorkspace(), processesObserver); + super.dispose(); + } + + class ContentProvider implements IStructuredContentProvider { + + public Object[] getElements(Object inputElement) { + try { + // TODO filter, optimize with virtual table, ... + String sql = "SELECT * from [slc:process] ORDER BY [jcr:lastModified] DESC"; + Query query = session.getWorkspace().getQueryManager() + .createQuery(sql, Query.JCR_SQL2); + List nodes = new ArrayList(); + for (NodeIterator nit = query.execute().getNodes(); nit + .hasNext();) { + nodes.add(nit.nextNode()); + } + return nodes.toArray(); + } catch (RepositoryException e) { + throw new SlcException("Cannot retrieve processes", e); + } + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + } + + class LabelProvider extends ColumnLabelProvider implements + ITableLabelProvider { + + public Image getColumnImage(Object element, int columnIndex) { + // TODO Auto-generated method stub + return null; + } + + public String getColumnText(Object obj, int index) { + try { + Node node = (Node) obj; + switch (index) { + + case 0: + return node.getProperty(Property.JCR_CREATED).getString(); + case 1: + return "local"; + case 2: + return node.getProperty(SlcNames.SLC_UUID).getString(); + case 3: + return node.getProperty(SlcNames.SLC_STATUS).getString(); + } + return getText(obj); + } catch (RepositoryException e) { + throw new SlcException("Cannot get column text", e); + } + } + + } + + class ViewDoubleClickListener implements IDoubleClickListener { + public void doubleClick(DoubleClickEvent evt) { + Object obj = ((IStructuredSelection) evt.getSelection()) + .getFirstElement(); + try { + if (obj instanceof Node) { + Node node = (Node) obj; + if (node.isNodeType(SlcTypes.SLC_PROCESS)) { + IWorkbenchPage activePage = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getActivePage(); + activePage.openEditor( + new ProcessEditorInput(node.getPath()), + ProcessEditor.ID); + } + } + } catch (Exception e) { + throw new SlcException("Cannot open " + obj, e); + } + } + + } + + public void setSession(Session session) { + this.session = session; + } + +} \ No newline at end of file -- 2.39.2