1 package org
.argeo
.eclipse
.ui
.jcr
.editors
;
3 import java
.util
.ArrayList
;
6 import javax
.jcr
.RepositoryException
;
7 import javax
.jcr
.Session
;
8 import javax
.jcr
.query
.QueryResult
;
9 import javax
.jcr
.query
.Row
;
10 import javax
.jcr
.query
.RowIterator
;
12 import org
.argeo
.ArgeoException
;
13 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
14 import org
.eclipse
.core
.runtime
.IStatus
;
15 import org
.eclipse
.core
.runtime
.Status
;
16 import org
.eclipse
.jface
.dialogs
.ErrorDialog
;
17 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
18 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
19 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
20 import org
.eclipse
.jface
.viewers
.TableViewer
;
21 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
22 import org
.eclipse
.jface
.viewers
.Viewer
;
23 import org
.eclipse
.swt
.SWT
;
24 import org
.eclipse
.swt
.custom
.SashForm
;
25 import org
.eclipse
.swt
.graphics
.Image
;
26 import org
.eclipse
.swt
.layout
.FillLayout
;
27 import org
.eclipse
.swt
.layout
.GridData
;
28 import org
.eclipse
.swt
.layout
.GridLayout
;
29 import org
.eclipse
.swt
.widgets
.Composite
;
30 import org
.eclipse
.ui
.IEditorInput
;
31 import org
.eclipse
.ui
.IEditorSite
;
32 import org
.eclipse
.ui
.PartInitException
;
33 import org
.eclipse
.ui
.part
.EditorPart
;
35 /** Executes any JCR query. */
36 public abstract class AbstractJcrQueryEditor
extends EditorPart
{
37 protected String initialQuery
;
38 protected String initialQueryType
;
40 private Session session
;
42 private TableViewer viewer
;
43 private List
<TableViewerColumn
> tableViewerColumns
= new ArrayList
<TableViewerColumn
>();
45 protected abstract void createQueryForm(Composite parent
);
48 public void init(IEditorSite site
, IEditorInput input
)
49 throws PartInitException
{
50 JcrQueryEditorInput editorInput
= (JcrQueryEditorInput
) input
;
51 initialQuery
= editorInput
.getQuery();
52 initialQueryType
= editorInput
.getQueryType();
54 setInput(editorInput
);
58 public final void createPartControl(final Composite parent
) {
59 parent
.setLayout(new FillLayout());
61 SashForm sashForm
= new SashForm(parent
, SWT
.VERTICAL
);
62 sashForm
.setSashWidth(4);
63 sashForm
.setLayout(new FillLayout());
65 Composite top
= new Composite(sashForm
, SWT
.NONE
);
66 GridLayout gl
= new GridLayout(1, false);
69 // Device device = Display.getCurrent();
70 // Color red = new Color(device, 255, 0, 0);
71 // top.setBackground(red);
74 Composite bottom
= new Composite(sashForm
, SWT
.NONE
);
75 bottom
.setLayout(new GridLayout(1, false));
76 sashForm
.setWeights(getWeights());
78 viewer
= new TableViewer(bottom
);
79 viewer
.getTable().setLayoutData(
80 new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
81 viewer
.getTable().setHeaderVisible(true);
82 viewer
.setContentProvider(new QueryResultContentProvider());
83 // viewer.setLabelProvider(new QueryResultLabelProvider());
84 viewer
.setInput(getEditorSite());
86 if (getTableDoubleClickListener() != null)
87 viewer
.addDoubleClickListener(getTableDoubleClickListener());
92 * To be overidden to adapt size of form and result frames.
96 protected int[] getWeights() {
97 return new int[] { 30, 70 };
101 * To be overidden to implement a doubleclick Listener on one of the rows of
106 protected IDoubleClickListener
getTableDoubleClickListener() {
110 protected void executeQuery(String statement
) {
112 QueryResult qr
= session
.getWorkspace().getQueryManager()
113 .createQuery(statement
, initialQueryType
).execute();
115 // remove previous columns
116 for (TableViewerColumn tvc
: tableViewerColumns
)
117 tvc
.getColumn().dispose();
119 for (final String columnName
: qr
.getColumnNames()) {
120 TableViewerColumn tvc
= new TableViewerColumn(viewer
, SWT
.NONE
);
121 configureColumn(columnName
, tvc
);
122 tvc
.setLabelProvider(getLabelProvider(columnName
));
123 tableViewerColumns
.add(tvc
);
127 } catch (RepositoryException e
) {
128 ErrorDialog
.openError(null, "Error", "Cannot execute JCR query: "
129 + statement
, new Status(IStatus
.ERROR
,
130 "org.argeo.eclipse.ui.jcr", e
.getMessage()));
131 // throw new ArgeoException("Cannot execute JCR query " + statement,
137 * To be overridden in order to configure column label providers .
139 protected ColumnLabelProvider
getLabelProvider(final String columnName
) {
140 return new ColumnLabelProvider() {
141 public String
getText(Object element
) {
142 Row row
= (Row
) element
;
144 return row
.getValue(columnName
).getString();
145 } catch (RepositoryException e
) {
146 throw new ArgeoException("Cannot display row " + row
, e
);
150 public Image
getImage(Object element
) {
156 /** To be overridden in order to configure the columns. */
157 protected void configureColumn(String jcrColumnName
,
158 TableViewerColumn column
) {
159 column
.getColumn().setWidth(50);
160 column
.getColumn().setText(jcrColumnName
);
163 private class QueryResultContentProvider
implements
164 IStructuredContentProvider
{
166 public void dispose() {
169 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
172 public Object
[] getElements(Object inputElement
) {
173 if (!(inputElement
instanceof QueryResult
))
174 return new String
[] {};
177 QueryResult queryResult
= (QueryResult
) inputElement
;
178 List
<Row
> rows
= new ArrayList
<Row
>();
179 RowIterator rit
= queryResult
.getRows();
180 while (rit
.hasNext()) {
181 rows
.add(rit
.nextRow());
184 // List<Node> elems = new ArrayList<Node>();
185 // NodeIterator nit = queryResult.getNodes();
186 // while (nit.hasNext()) {
187 // elems.add(nit.nextNode());
189 return rows
.toArray();
190 } catch (RepositoryException e
) {
191 throw new ArgeoException("Cannot read query result", e
);
197 // private class QueryResultLabelProvider extends LabelProvider implements
198 // ITableLabelProvider {
199 // public String getColumnText(Object element, int columnIndex) {
200 // Row row = (Row) element;
202 // return row.getValues()[columnIndex].toString();
203 // } catch (RepositoryException e) {
204 // throw new ArgeoException("Cannot display row " + row, e);
208 // public Image getColumnImage(Object element, int columnIndex) {
215 public boolean isDirty() {
220 public void doSave(IProgressMonitor monitor
) {
221 // TODO save the query in JCR?
226 public void doSaveAs() {
230 public boolean isSaveAsAllowed() {
235 public void setSession(Session session
) {
236 this.session
= session
;