--- /dev/null
+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