From: Bruno Sinou Date: Thu, 19 May 2011 09:10:21 +0000 (+0000) Subject: Slightly modify the class to enable easy introduction of sorter on column headers... X-Git-Tag: argeo-commons-2.1.30~1255 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=7b680adaf3b7ca7d69ee0f0b216deb06814a30da;p=lgpl%2Fargeo-commons.git Slightly modify the class to enable easy introduction of sorter on column headers for sub classes. git-svn-id: https://svn.argeo.org/commons/trunk@4521 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java index dbe4a5576..482f9f9d4 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java @@ -104,14 +104,30 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { for (TableViewerColumn tvc : tableViewerColumns) tvc.getColumn().dispose(); + int i = 0; for (final String columnName : qr.getColumnNames()) { TableViewerColumn tvc = new TableViewerColumn(viewer, SWT.NONE); - configureColumn(columnName, tvc); + configureColumn(columnName, tvc, i); tvc.setLabelProvider(getLabelProvider(columnName)); tableViewerColumns.add(tvc); + i++; + } + + // We must create a local list because query result can be read only + // once. + // viewer.setInput(qr); + + try { + List rows = new ArrayList(); + RowIterator rit = qr.getRows(); + while (rit.hasNext()) { + rows.add(rit.nextRow()); + } + viewer.setInput(rows); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot read query result", e); } - viewer.setInput(qr); } catch (RepositoryException e) { ErrorDialog.openError(null, "Error", "Cannot execute JCR query: " + statement, new Status(IStatus.ERROR, @@ -182,13 +198,27 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { }; } - /** To be overridden in order to configure the columns. */ + /** + * To be overridden in order to configure the columns. + * + * @deprecated use {@link + * org.argeo.eclipse.ui.jcr.editors.AbstractJcrQueryEditor. + * configureColumn(String jcrColumnName, TableViewerColumn + * column, int columnIndex)} instead + */ protected void configureColumn(String jcrColumnName, TableViewerColumn column) { column.getColumn().setWidth(50); column.getColumn().setText(jcrColumnName); } + /** To be overridden in order to configure the columns. */ + protected void configureColumn(String jcrColumnName, + TableViewerColumn column, int columnIndex) { + column.getColumn().setWidth(50); + column.getColumn().setText(jcrColumnName); + } + private class QueryResultContentProvider implements IStructuredContentProvider { @@ -199,6 +229,11 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { } public Object[] getElements(Object inputElement) { + + if (inputElement instanceof List) + return ((List) inputElement).toArray(); + + // Never reached might be deleted in future release if (!(inputElement instanceof QueryResult)) return new String[] {}; @@ -233,28 +268,30 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { protected SelectionAdapter getSelectionAdapter(final TableColumn column, final int index) { + // A comparator must be define + if (comparator == null) + return null; + 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(); -// } + 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;