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=802fc0f128a32e8aeb98bb0d01b73aa50b0d99da;hpb=111e463d51e2cdf841264b6cc7f1fa30f35afed8;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 802fc0f12..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,22 +10,27 @@ 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; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.viewers.ColumnLabelProvider; +import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.TableViewer; 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; @@ -33,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); @@ -58,27 +66,33 @@ 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); bottom.setLayout(new GridLayout(1, false)); - sashForm.setWeights(new int[] { 30, 70 }); + sashForm.setWeights(getWeights()); viewer = new TableViewer(bottom); 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) { @@ -92,24 +106,8 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { for (final String columnName : qr.getColumnNames()) { TableViewerColumn tvc = new TableViewerColumn(viewer, SWT.NONE); - tvc.getColumn().setWidth(50); - tvc.getColumn().setText(columnName); - 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); - } - } - - public Image getImage(Object element) { - return null; - } - }); + configureColumn(columnName, tvc); + tvc.setLabelProvider(getLabelProvider(columnName)); tableViewerColumns.add(tvc); } @@ -123,6 +121,74 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { } } + /** + * To be overidden to adapt size of form and result frames. + * + * @return + */ + protected int[] getWeights() { + return new int[] { 30, 70 }; + } + + /** + * To be overidden to implement a doubleclick Listener on one of the rows of + * the table. + * + * @return + */ + protected IDoubleClickListener getTableDoubleClickListener() { + return null; + } + + /** + * To be overiden in order to implement a specific + * QueryResultContentProvider + */ + protected IStructuredContentProvider getQueryResultContentProvider() { + return new QueryResultContentProvider(); + } + + /** + * Enable specific implementation for columns + */ + protected List getTableViewerColumns() { + return tableViewerColumns; + } + + /** + * Enable specific implementation for columns + */ + protected TableViewer getTableViewer() { + return viewer; + } + + /** + * 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); + } + } + + public Image getImage(Object element) { + return null; + } + }; + } + + /** To be overridden in order to configure the columns. */ + protected void configureColumn(String jcrColumnName, + TableViewerColumn column) { + column.getColumn().setWidth(50); + column.getColumn().setText(jcrColumnName); + } + private class QueryResultContentProvider implements IStructuredContentProvider { @@ -157,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() { @@ -194,8 +290,8 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { return false; } + // IoC public void setSession(Session session) { this.session = session; } - }