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.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;
/** 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<TableViewerColumn> tableViewerColumns = new ArrayList<TableViewerColumn>();
+ private GenericTableComparator comparator;
protected abstract void createQueryForm(Composite parent);
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);
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.
*
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<TableViewerColumn> 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. */
}
- // 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() {
public void setSession(Session session) {
this.session = session;
}
-
}