X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=eclipse%2Fplugins%2Forg.argeo.eclipse.ui.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Feclipse%2Fui%2Fjcr%2Feditors%2FAbstractJcrQueryEditor.java;h=76ea5508e06e429d15ca73680984a58946b77a75;hb=ebfaa7c9c6c8e93d2a524656878f86d29dbf3d58;hp=1629ada8b86d2a6d69653fe45164bba772f875f1;hpb=5eac624b55efa89c8315f8ce28545aba5b8def2f;p=lgpl%2Fargeo-commons.git diff --git a/eclipse/plugins/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java b/eclipse/plugins/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java index 1629ada8b..76ea5508e 100644 --- a/eclipse/plugins/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java +++ b/eclipse/plugins/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java @@ -10,6 +10,7 @@ import javax.jcr.query.Row; import javax.jcr.query.RowIterator; import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.GenericTableComparator; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -22,11 +23,14 @@ import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; @@ -34,13 +38,16 @@ import org.eclipse.ui.part.EditorPart; /** Executes any JCR query. */ public abstract class AbstractJcrQueryEditor extends EditorPart { + protected String initialQuery; protected String initialQueryType; + // IoC private Session session; private TableViewer viewer; private List tableViewerColumns = new ArrayList(); + private GenericTableComparator comparator; protected abstract void createQueryForm(Composite parent); @@ -59,14 +66,13 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { parent.setLayout(new FillLayout()); SashForm sashForm = new SashForm(parent, SWT.VERTICAL); - sashForm.setSashWidth(2); + sashForm.setSashWidth(4); sashForm.setLayout(new FillLayout()); Composite top = new Composite(sashForm, SWT.NONE); - top.setLayout(new GridLayout(1, false)); - // Device device = Display.getCurrent(); - // Color red = new Color(device, 255, 0, 0); - // top.setBackground(red); + GridLayout gl = new GridLayout(1, false); + top.setLayout(gl); + createQueryForm(top); Composite bottom = new Composite(sashForm, SWT.NONE); @@ -77,15 +83,44 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { viewer.getTable().setLayoutData( new GridData(SWT.FILL, SWT.FILL, true, true)); viewer.getTable().setHeaderVisible(true); - viewer.setContentProvider(new QueryResultContentProvider()); - // viewer.setLabelProvider(new QueryResultLabelProvider()); + viewer.setContentProvider(getQueryResultContentProvider()); viewer.setInput(getEditorSite()); + if (getComparator() != null) { + comparator = getComparator(); + viewer.setComparator(comparator); + } if (getTableDoubleClickListener() != null) viewer.addDoubleClickListener(getTableDoubleClickListener()); } + protected void executeQuery(String statement) { + try { + QueryResult qr = session.getWorkspace().getQueryManager() + .createQuery(statement, initialQueryType).execute(); + + // remove previous columns + for (TableViewerColumn tvc : tableViewerColumns) + tvc.getColumn().dispose(); + + for (final String columnName : qr.getColumnNames()) { + TableViewerColumn tvc = new TableViewerColumn(viewer, SWT.NONE); + configureColumn(columnName, tvc); + tvc.setLabelProvider(getLabelProvider(columnName)); + tableViewerColumns.add(tvc); + } + + viewer.setInput(qr); + } catch (RepositoryException e) { + ErrorDialog.openError(null, "Error", "Cannot execute JCR query: " + + statement, new Status(IStatus.ERROR, + "org.argeo.eclipse.ui.jcr", e.getMessage())); + // throw new ArgeoException("Cannot execute JCR query " + statement, + // e); + } + } + /** * To be overidden to adapt size of form and result frames. * @@ -105,45 +140,46 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { return null; } - protected void executeQuery(String statement) { - try { - QueryResult qr = session.getWorkspace().getQueryManager() - .createQuery(statement, initialQueryType).execute(); + /** + * To be overiden in order to implement a specific + * QueryResultContentProvider + */ + protected IStructuredContentProvider getQueryResultContentProvider() { + return new QueryResultContentProvider(); + } - // remove previous columns - for (TableViewerColumn tvc : tableViewerColumns) - tvc.getColumn().dispose(); + /** + * Enable specific implementation for columns + */ + protected List getTableViewerColumns() { + return tableViewerColumns; + } - for (final String columnName : qr.getColumnNames()) { - TableViewerColumn tvc = new TableViewerColumn(viewer, SWT.NONE); - configureColumn(columnName, tvc); - tvc.setLabelProvider(new ColumnLabelProvider() { - - public String getText(Object element) { - Row row = (Row) element; - try { - return row.getValue(columnName).getString(); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot display row " - + row, e); - } - } + /** + * Enable specific implementation for columns + */ + protected TableViewer getTableViewer() { + return viewer; + } - public Image getImage(Object element) { - return null; - } - }); - tableViewerColumns.add(tvc); + /** + * To be overridden in order to configure column label providers . + */ + protected ColumnLabelProvider getLabelProvider(final String columnName) { + return new ColumnLabelProvider() { + public String getText(Object element) { + Row row = (Row) element; + try { + return row.getValue(columnName).getString(); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot display row " + row, e); + } } - viewer.setInput(qr); - } catch (RepositoryException e) { - ErrorDialog.openError(null, "Error", "Cannot execute JCR query: " - + statement, new Status(IStatus.ERROR, - "org.argeo.eclipse.ui.jcr", e.getMessage())); - // throw new ArgeoException("Cannot execute JCR query " + statement, - // e); - } + public Image getImage(Object element) { + return null; + } + }; } /** To be overridden in order to configure the columns. */ @@ -187,22 +223,52 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { } - // private class QueryResultLabelProvider extends LabelProvider implements - // ITableLabelProvider { - // public String getColumnText(Object element, int columnIndex) { - // Row row = (Row) element; - // try { - // return row.getValues()[columnIndex].toString(); - // } catch (RepositoryException e) { - // throw new ArgeoException("Cannot display row " + row, e); - // } - // } - // - // public Image getColumnImage(Object element, int columnIndex) { - // return null; - // } - // - // } + /** + * Might be used by children classes to sort columns. + * + * @param column + * @param index + * @return + */ + protected SelectionAdapter getSelectionAdapter(final TableColumn column, + final int index) { + + SelectionAdapter selectionAdapter = new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + + if (true) + return; + try { + + comparator.setColumn(index); + int dir = viewer.getTable().getSortDirection(); + if (viewer.getTable().getSortColumn() == column) { + dir = dir == SWT.UP ? SWT.DOWN : SWT.UP; + } else { + + dir = SWT.DOWN; + } + viewer.getTable().setSortDirection(dir); + viewer.getTable().setSortColumn(column); + viewer.refresh(); + } catch (Exception exc) { + exc.printStackTrace(); + } + } + }; + return selectionAdapter; + } + + /** + * To be overriden to enable sorting. + * + * @author bsinou + * + */ + protected GenericTableComparator getComparator() { + return null; + } @Override public boolean isDirty() { @@ -228,5 +294,4 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { public void setSession(Session session) { this.session = session; } - }