/** * */ package org.nightlabs.jfire.reporting.admin.ui.jdoql.editor; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.nightlabs.base.ui.layout.WeightedTableLayout; import org.nightlabs.base.ui.table.AbstractTableComposite; import org.nightlabs.base.ui.table.TableContentProvider; import org.nightlabs.base.ui.table.TableLabelProvider; import org.nightlabs.jfire.reporting.admin.ui.resource.Messages; /** * @author Alexander Bieber <alex [AT] nightlabs [DOT] de> * */ public class JDOQLResultTable extends AbstractTableComposite { private static class ContentProvider extends TableContentProvider { /* (non-Javadoc) * @see org.nightlabs.base.ui.table.TableContentProvider#getElements(java.lang.Object) */ @Override public Object[] getElements(Object inputElement) { if (inputElement instanceof Collection) return ((Collection)inputElement).toArray(); return null; } } private static class LabelProvider extends TableLabelProvider { public String getColumnText(Object element, int columnIndex) { Object[] columns = null; if (element instanceof List) columns = ((List)element).toArray(); else if (element instanceof Object[]) columns = (Object[])element; else return element != null ? element.toString() : "null"; //$NON-NLS-1$ if (columns == null || columnIndex >= columns.length) return ""; //$NON-NLS-1$ return String.valueOf(columns[columnIndex]); } } private List<TableColumn> tableColums = new ArrayList<TableColumn>(); /** * @param parent * @param style */ public JDOQLResultTable(Composite parent, int style) { super(parent, style); } /** * @param parent * @param style * @param initTable */ public JDOQLResultTable(Composite parent, int style, boolean initTable) { super(parent, style, initTable); } /** * @param parent * @param style * @param initTable * @param viewerStyle */ public JDOQLResultTable(Composite parent, int style, boolean initTable, int viewerStyle) { super(parent, style, initTable, viewerStyle); // TODO Auto-generated constructor stub } private Collection currentResult; public void setInput(Collection result) { currentResult = result; createTableColumns(getTableViewer(), getTable()); getTableViewer().setInput(result); layout(true, true); if (getParent() != null) getParent().layout(true, true); } /* (non-Javadoc) * @see org.nightlabs.base.ui.table.AbstractTableComposite#createTableColumns(org.eclipse.jface.viewers.TableViewer, org.eclipse.swt.widgets.Table) */ @Override protected void createTableColumns(TableViewer tableViewer, Table table) { if (currentResult == null) return; for (TableColumn column : tableColums) { column.dispose(); } tableColums.clear(); if (currentResult.size() <= 0) return; Object element = currentResult.iterator().next(); if (element instanceof Object[]) { Object[] elements = (Object[])element; for (int i = 0; i < elements.length; i++) { TableColumn col = new TableColumn(table, SWT.LEFT); col.setText(Messages.getString("org.nightlabs.jfire.reporting.admin.ui.jdoql.editor.JDOQLResultTable.columnPrefix")+i); //$NON-NLS-1$ tableColums.add(col); } } else { TableColumn col = new TableColumn(table, SWT.LEFT); col.setText(Messages.getString("org.nightlabs.jfire.reporting.admin.ui.jdoql.editor.JDOQLResultTable.columnOneText")); //$NON-NLS-1$ tableColums.add(col); } int[] weights = new int[tableColums.size()]; for (int i = 0; i < tableColums.size(); i++) { weights[i] = 1; } table.setLayout(new WeightedTableLayout(weights)); } /* (non-Javadoc) * @see org.nightlabs.base.ui.table.AbstractTableComposite#setTableProvider(org.eclipse.jface.viewers.TableViewer) */ @Override protected void setTableProvider(TableViewer tableViewer) { tableViewer.setContentProvider(new ContentProvider()); tableViewer.setLabelProvider(new LabelProvider()); } }