X-Git-Url: http://git.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableAdapter.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableAdapter.java new file mode 100644 index 0000000..17d7b29 --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableAdapter.java @@ -0,0 +1,269 @@ +package com.quantum.view.tableview; + +import java.sql.SQLException; +import java.util.Vector; + +import com.quantum.Messages; +import com.quantum.adapters.AdapterFactory; +import com.quantum.adapters.DatabaseAdapter; +import com.quantum.model.Bookmark; +import com.quantum.model.Entity; +import com.quantum.model.NotConnectedException; +import com.quantum.sql.FilterSort; +import com.quantum.sql.SQLHelper; +import com.quantum.sql.SQLResults; + +import org.eclipse.jface.viewers.CellEditor; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TextCellEditor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.TableItem; +import org.eclipse.swt.widgets.Text; + +public class TableAdapter { + + private Table table = null; + + public static final String DEFAULT = ""; //$NON-NLS-1$ + public static final String UTF_8 = "UTF-8"; //$NON-NLS-1$ + public static final String UTF_16 = "UTF-16"; //$NON-NLS-1$ + + private int pageSize = DefaultSizes.PAGE_SIZE; + private int maxColumnSize = DefaultSizes.MAX_COLUMN_SIZE; + private FilterSort extra = new FilterSort(); + private int offset = 1; + private int totalSize = -1; + private Vector rows = new Vector(); + private Vector columnNames = new Vector(); + private boolean hasMore = false; + + private Bookmark bookmark = null; + private Entity entity = null; + private String query; + + private String encoding = ""; //$NON-NLS-1$ + + private TableAdapter(Entity entity) { + this.entity = entity; + this.bookmark = entity.getBookmark(); + } + private TableAdapter(Bookmark bookmark) { + this.bookmark = bookmark; + } + public void fullMode() { + offset = 1; + pageSize = Integer.MAX_VALUE; + } + public void resetMode() { + offset = 1; + pageSize = DefaultSizes.PAGE_SIZE; + } + public static TableAdapter createFromQuery(Bookmark bookmark, SQLResults results) throws NotConnectedException { + TableAdapter retVal = new TableAdapter(bookmark); + retVal.setQuery(results.getQuery()); + retVal.setData(results); + return retVal; + } + public static TableAdapter createFromTable(Entity entity) { + TableAdapter retVal = new TableAdapter(entity); + return retVal; + } + private void loadSize() { + try { + if (entity != null) { + totalSize = SQLHelper.getSize( + bookmark.getConnection(), entity.getCondQualifiedName(), + AdapterFactory.getInstance().getAdapter(bookmark.getType())); + } + } catch (SQLException e) { + e.printStackTrace(); + } catch (NotConnectedException e) { + e.printStackTrace(); + } + } + public int getStartIndex() { + if (totalSize == 0) { + return 0; + } + return offset; + } + public int getEndIndex() { + return offset + rows.size() - 1; + } + public int getTotalSize() { + return totalSize; + } + public void nextPage() { + loadSize(); + offset = offset + pageSize; + if (totalSize >= 0 && offset > totalSize) { + offset = offset - pageSize; + } + } + public void previousPage() { + offset = offset - pageSize; + if (offset < 1) { + offset = 1; + } + } + public boolean hasNextPage() { + if (entity != null) { + if (offset + pageSize <= totalSize) { + return true; + } + return false; + } + return hasMore; + } + public boolean hasPreviousPage() { + if (offset > 1) { + return true; + } + return false; + } + + public String getQuery() { + if (entity != null) { + DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(bookmark.getType()); + if (adapter == null) throw new RuntimeException(); + else return adapter.getTableQuery((entity).getCondQualifiedName()) + extra.toString(); + } + return query; + } + public void loadData() throws NotConnectedException { + loadSize(); + if (entity != null) { + if (offset > totalSize) { + offset = 1; + } + } + String query = getQuery(); + System.out.println(offset + Messages.getString("TableAdapter.to") + (offset + pageSize - 1)); //$NON-NLS-1$ + SQLResults results = SQLHelper.getResults(bookmark.getConnection(), query, offset, offset + pageSize - 1, maxColumnSize, encoding); + setData(results); + } + public void resetOffset() { + offset = 1; + } + public void setData(SQLResults results) throws NotConnectedException { + if (results.isError()) return; + int rowCount = results.getRowCount(); + int columnCount = results.getColumnCount(); + rows = new Vector(); + columnNames = new Vector(); + for (int col = 1; col <= columnCount; col++) { + columnNames.addElement(results.getColumnName(col)); + } + for (int row = 1; row <= rowCount; row++) { + String rowData[] = new String[columnCount]; + for (int col = 1; col <= columnCount; col++) { + rowData[col - 1] = results.getElement(col, row).toString(); + } + rows.addElement(rowData); + } + hasMore = results.hasMore(); + if (entity == null && results.getMaxSize() >= 0) { + if (offset > results.getMaxSize()) { + offset = 1; + loadData(); + } + } + } + public void loadTable(Table table) { + this.table = table; + table.setHeaderVisible(true); + for (int i = 0; i < columnNames.size(); i++) { + TableColumn column = new TableColumn(table, SWT.NONE); + column.setText(columnNames.elementAt(i).toString()); + } + for (int i = 0; i < columnNames.size(); i++) { + table.getColumn(i).pack(); + } + for (int row = 0; row < rows.size(); row++) { + TableItem item = new TableItem(table, SWT.NONE); + String itemData[] = (String[]) rows.elementAt(row); + item.setText(itemData); + } + for (int i = 0; i < columnNames.size(); i++) { + table.getColumn(i).pack(); + } + } + + public TableViewer addTableViewer(Table table) { + TableViewer tableViewer = new TableViewer(table); + tableViewer.setUseHashlookup(true); + String[] colNams = new String[columnNames.size()]; + for (int i = 0; i < columnNames.size(); i++) { + colNams[i] = (String) columnNames.get(i); + } + tableViewer.setColumnProperties(colNams); + + // Create the cell editors + CellEditor[] editors = new CellEditor[columnNames.size()]; + for (int i = 0; i < columnNames.size(); i++) { + TextCellEditor textEditor = new TextCellEditor(table); + ((Text) textEditor.getControl()).setTextLimit(60); + editors[i] = textEditor; + } + // Assign the cell editors to the viewer + tableViewer.setCellEditors(editors); + // Set the cell modifier for the viewer + //tableViewer.setCellModifier(new MetaDataModifier(this)); + // Set the default sorter for the viewer + //tableViewer.setSorter(new ExampleTaskSorter(ExampleTaskSorter.DESCRIPTION)); + + return tableViewer; + } + + public int getPageSize() { + return pageSize; + } + + public void setFilterSort(FilterSort extra) { + this.extra = extra; + } + public String getTable() { + return (entity != null) ? entity.getCondQualifiedName() : null; + } + + public void setQuery(String query) { + this.query = query; + } + public String getEncoding() { + return encoding; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + public String getStatusString() { + String status = getStartIndex() + Messages.getString("TableAdapter.to") + getEndIndex() + Messages.getString("TableAdapter.of") + //$NON-NLS-1$ //$NON-NLS-2$ + getTotalSize(); + if (!encoding.equals(DEFAULT)) { + status += " (" + encoding + ")"; //$NON-NLS-1$ //$NON-NLS-2$ + } + String filterText = extra.toString(); + if (!filterText.equals("")) { //$NON-NLS-1$ + status += " (" + filterText + ")"; //$NON-NLS-1$ //$NON-NLS-2$ + } + if (pageSize == Integer.MAX_VALUE) { + status += Messages.getString("TableAdapter.full"); //$NON-NLS-1$ + } + return status; + } + /** + * @return + */ + public Bookmark getBookmark() { + return this.bookmark; + } + /** + * @return + */ + public Entity getEntity() { + return entity; + } + +} \ No newline at end of file