1 package org
.argeo
.slc
.client
.ui
.views
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.NodeIterator
;
8 import javax
.jcr
.Property
;
9 import javax
.jcr
.RepositoryException
;
10 import javax
.jcr
.Session
;
11 import javax
.jcr
.observation
.Event
;
12 import javax
.jcr
.observation
.EventIterator
;
13 import javax
.jcr
.observation
.EventListener
;
14 import javax
.jcr
.observation
.ObservationManager
;
15 import javax
.jcr
.query
.Query
;
17 import org
.argeo
.eclipse
.ui
.jcr
.AsyncUiEventListener
;
18 import org
.argeo
.jcr
.JcrUtils
;
19 import org
.argeo
.slc
.SlcException
;
20 import org
.argeo
.slc
.client
.ui
.editors
.ProcessEditor
;
21 import org
.argeo
.slc
.client
.ui
.editors
.ProcessEditorInput
;
22 import org
.argeo
.slc
.jcr
.SlcJcrConstants
;
23 import org
.argeo
.slc
.jcr
.SlcNames
;
24 import org
.argeo
.slc
.jcr
.SlcTypes
;
25 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
26 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
27 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
28 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
29 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
30 import org
.eclipse
.jface
.viewers
.ITableLabelProvider
;
31 import org
.eclipse
.jface
.viewers
.TableViewer
;
32 import org
.eclipse
.jface
.viewers
.Viewer
;
33 import org
.eclipse
.swt
.SWT
;
34 import org
.eclipse
.swt
.graphics
.Image
;
35 import org
.eclipse
.swt
.widgets
.Composite
;
36 import org
.eclipse
.swt
.widgets
.Table
;
37 import org
.eclipse
.swt
.widgets
.TableColumn
;
38 import org
.eclipse
.ui
.IWorkbenchPage
;
39 import org
.eclipse
.ui
.PlatformUI
;
40 import org
.eclipse
.ui
.part
.ViewPart
;
43 * This class display the list of all processes that have run in the
44 * corresponding agent. Currently, the local agent.
46 public class JcrProcessListView
extends ViewPart
{
47 public static final String ID
= "org.argeo.slc.client.ui.jcrProcessListView";
49 private TableViewer viewer
;
51 private Session session
;
53 private EventListener processesObserver
;
55 public void createPartControl(Composite parent
) {
56 Table table
= createTable(parent
);
57 viewer
= new TableViewer(table
);
58 viewer
.setLabelProvider(new LabelProvider());
59 viewer
.setContentProvider(new ContentProvider());
60 viewer
.setInput(getViewSite());
61 viewer
.addDoubleClickListener(new ViewDoubleClickListener());
63 processesObserver
= new AsyncUiEventListener() {
64 protected void onEventInUiThread(EventIterator events
) {
69 ObservationManager observationManager
= session
.getWorkspace()
70 .getObservationManager();
71 observationManager
.addEventListener(processesObserver
,
72 Event
.NODE_ADDED
| Event
.NODE_REMOVED
73 | Event
.PROPERTY_CHANGED
,
74 SlcJcrConstants
.PROCESSES_BASE_PATH
, true, null, null,
76 } catch (RepositoryException e
) {
77 throw new SlcException("Cannot register listeners", e
);
82 protected Table
createTable(Composite parent
) {
83 int style
= SWT
.SINGLE
| SWT
.BORDER
| SWT
.H_SCROLL
| SWT
.V_SCROLL
85 // does not function with RAP, commented for the time being
86 // | SWT.HIDE_SELECTION;
88 Table table
= new Table(parent
, style
);
90 table
.setLinesVisible(true);
91 table
.setHeaderVisible(true);
93 TableColumn column
= new TableColumn(table
, SWT
.LEFT
, 0);
94 column
.setText("Date");
97 column
= new TableColumn(table
, SWT
.LEFT
, 1);
98 column
.setText("Host");
101 column
= new TableColumn(table
, SWT
.LEFT
, 2);
102 column
.setText("Id");
103 column
.setWidth(300);
105 column
= new TableColumn(table
, SWT
.LEFT
, 3);
106 column
.setText("Status");
107 column
.setWidth(100);
112 public void setFocus() {
113 viewer
.getControl().setFocus();
117 public void dispose() {
118 JcrUtils
.unregisterQuietly(session
.getWorkspace(), processesObserver
);
122 class ContentProvider
implements IStructuredContentProvider
{
124 public Object
[] getElements(Object inputElement
) {
126 // TODO filter, optimize with virtual table, ...
127 String sql
= "SELECT * from [slc:process] ORDER BY [jcr:lastModified] DESC";
128 Query query
= session
.getWorkspace().getQueryManager()
129 .createQuery(sql
, Query
.JCR_SQL2
);
130 List
<Node
> nodes
= new ArrayList
<Node
>();
131 for (NodeIterator nit
= query
.execute().getNodes(); nit
133 nodes
.add(nit
.nextNode());
135 return nodes
.toArray();
136 } catch (RepositoryException e
) {
137 throw new SlcException("Cannot retrieve processes", e
);
141 public void dispose() {
144 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
149 class LabelProvider
extends ColumnLabelProvider
implements
150 ITableLabelProvider
{
152 public Image
getColumnImage(Object element
, int columnIndex
) {
153 // TODO Auto-generated method stub
157 public String
getColumnText(Object obj
, int index
) {
159 Node node
= (Node
) obj
;
163 return node
.getProperty(Property
.JCR_CREATED
).getString();
167 return node
.getProperty(SlcNames
.SLC_UUID
).getString();
169 return node
.getProperty(SlcNames
.SLC_STATUS
).getString();
172 } catch (RepositoryException e
) {
173 throw new SlcException("Cannot get column text", e
);
179 class ViewDoubleClickListener
implements IDoubleClickListener
{
180 public void doubleClick(DoubleClickEvent evt
) {
181 Object obj
= ((IStructuredSelection
) evt
.getSelection())
184 if (obj
instanceof Node
) {
185 Node node
= (Node
) obj
;
186 if (node
.isNodeType(SlcTypes
.SLC_PROCESS
)) {
187 IWorkbenchPage activePage
= PlatformUI
.getWorkbench()
188 .getActiveWorkbenchWindow().getActivePage();
189 activePage
.openEditor(
190 new ProcessEditorInput(node
.getPath()),
194 } catch (Exception e
) {
195 throw new SlcException("Cannot open " + obj
, e
);
201 public void setSession(Session session
) {
202 this.session
= session
;