import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.GenericTableComparator;
import org.eclipse.core.runtime.IProgressMonitor;
/** Executes any JCR query. */
public abstract class AbstractJcrQueryEditor extends EditorPart {
+ private final static Log log = LogFactory
+ .getLog(AbstractJcrQueryEditor.class);
protected String initialQuery;
protected String initialQueryType;
- // IoC
+ /** DEPENDENCY INJECTION */
private Session session;
private TableViewer viewer;
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<Row> rows = new ArrayList<Row>();
+ 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,
};
}
- /** 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 {
}
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[] {};
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);