# HG changeset patch # User Matthias Bläsing # Date 1363121087 -3600 # Branch dataview-rework-2 # Node ID 324057bca4622e44b36d356a9077ce2c57ca05e1 # Parent 4137de24779a181d6065afb16cf7edf0a5d82f80 Move paging handling (display part) completly into DataViewPageContext - add observability to properties of DataViewPageContext - use observable properties of DataViewPageContext for display - move modifing methods from DataView into DataViewPageContext diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataView.java b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataView.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataView.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataView.java @@ -129,9 +129,7 @@ synchronized (this) { this.dataViewUI = new DataViewUI(this, nbOutputComponent); - dataViewUI.getDataViewTableUI().setModel(dataPage.getModel()); dataViewUI.setEditable(tblMeta == null ? false : tblMeta.hasOneTable()); - dataViewUI.setTotalCount(dataPage.getTotalRows()); resetToolbar(hasExceptions()); } results = new ArrayList(); @@ -320,41 +318,6 @@ }); } - synchronized void setTotalRowCount(final int count) { - if (dataViewUI != null) { - Mutex.EVENT.readAccess(new Runnable() { - @Override - public void run() { - dataViewUI.setTotalCount(count); - } - }); - } - } - - synchronized void incrementRowSize(int count) { - assert dataViewUI != null; - dataPage.setTotalRows(dataPage.getTotalRows() + count); - Mutex.EVENT.readAccess(new Runnable() { - - @Override - public void run() { - dataViewUI.setTotalCount(dataPage.getTotalRows()); - } - }); - } - - synchronized void decrementRowSize(int count) { - assert dataViewUI != null; - dataPage.decrementRowSize(count); - Mutex.EVENT.readAccess(new Runnable() { - - @Override - public void run() { - dataViewUI.setTotalCount(dataPage.getTotalRows()); - } - }); - } - void setHasResultSet(boolean hasResultSet) { this.hasResultSet = hasResultSet; } diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewPageContext.java b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewPageContext.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewPageContext.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewPageContext.java @@ -43,7 +43,10 @@ */ package org.netbeans.modules.db.dataview.output; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import org.netbeans.modules.db.dataview.meta.DBColumn; +import org.openide.util.Mutex; import org.openide.util.NbBundle; /** @@ -52,7 +55,10 @@ * @author Ahimanikya Satapathy */ class DataViewPageContext { - + public static final String PROP_pageSize = "pageSize"; + public static final String PROP_totalRows = "totalRows"; + public static final String PROP_currentPos = "currentPos"; + private PropertyChangeSupport pcs = new PropertyChangeSupport(this); private int pageSize = 10; private int totalRows = -1; private int currentPos = 1; @@ -65,10 +71,44 @@ int getPageSize() { return pageSize; } - + + synchronized void setPageSize(int pageSize) { + int oldPageSize = this.pageSize; + this.pageSize = pageSize; + firePropertyChange(PROP_pageSize, oldPageSize, pageSize); + } + int getCurrentPos() { return currentPos; } + + synchronized private void setCurrentPos(int currentPos) { + int oldPos = this.currentPos; + this.currentPos = currentPos; + firePropertyChange(PROP_currentPos, oldPos, currentPos); + } + + synchronized void first() { + setCurrentPos(1); + } + + synchronized void previous() { + setCurrentPos(getCurrentPos() - pageSize); + } + + synchronized void next() { + setCurrentPos(getCurrentPos() + pageSize); + } + + synchronized void last() { + if (pageSize < 1) { + return; + } + + int rem = totalRows % pageSize; + int newCurrentPos = totalRows - (rem == 0 ? pageSize : rem) + 1; + setCurrentPos(newCurrentPos); + } DataViewTableUIModel getModel() { return model; @@ -77,6 +117,12 @@ int getTotalRows() { return totalRows; } + + synchronized void setTotalRows(int totalCount) { + int oldTotalRows = this.totalRows; + this.totalRows = totalCount; + firePropertyChange(PROP_totalRows, oldTotalRows, totalCount); + } boolean hasRows() { return (totalRows != 0 && pageSize != 0); @@ -94,27 +140,6 @@ return ((currentPos - pageSize) >= 0) && hasRows(); } - void first() { - currentPos = 1; - } - - void previous() { - currentPos -= pageSize; - } - - void next() { - currentPos += pageSize; - } - - void last() { - if (pageSize < 1) { - return; - } - - int rem = totalRows % pageSize; - currentPos = totalRows - (rem == 0 ? pageSize : rem) + 1; - } - boolean isLastPage() { return (currentPos + pageSize) > totalRows; } @@ -137,20 +162,54 @@ return NbBundle.getMessage(DataViewPageContext.class, "LBL_page_of", curPage, totalPages); } - synchronized void setPageSize(int pageSize) { - this.pageSize = pageSize; - } - - synchronized void setTotalRows(int totalCount) { - this.totalRows = totalCount; - } - synchronized void decrementRowSize(int count) { - totalRows -= count; + setTotalRows(getTotalRows() - count); if (totalRows <= pageSize) { first(); } else if (currentPos > totalRows) { previous(); } } + + synchronized void incrementRowSize(int count) { + setTotalRows(getTotalRows() + count); + if (totalRows <= pageSize) { + first(); + } else if (currentPos > totalRows) { + previous(); + } + } + + /** + * Ensure the property change event is dispatched into the EDT + * + * @param propertyName + * @param oldValue + * @param newValue + */ + protected void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) { + Mutex.EVENT.writeAccess(new Runnable() { + @Override + public void run() { + pcs.firePropertyChange(propertyName, oldValue, newValue); + } + }); + + } + + public void addPropertyChangeListener(PropertyChangeListener listener) { + pcs.addPropertyChangeListener(listener); + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + pcs.removePropertyChangeListener(listener); + } + + public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + pcs.addPropertyChangeListener(propertyName, listener); + } + + public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + pcs.removePropertyChangeListener(propertyName, listener); + } } diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewUI.java b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewUI.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewUI.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewUI.java @@ -54,6 +54,8 @@ import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.net.URL; import java.util.List; @@ -109,6 +111,13 @@ private static final int MAX_TAB_LENGTH = 25; + private PropertyChangeListener pageContextListener = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + updateTotalCountLabel(); + } + }; + /** Shared mouse listener used for setting the border painting property * of the toolbar buttons and for invoking the popup menu. */ @@ -178,6 +187,11 @@ this.add(dataPanelScrollPane, BorderLayout.CENTER); dataPanel.revalidate(); dataPanel.repaint(); + + dataPanel.setModel(dataView.getDataViewPageContext().getModel()); + dataView.getDataViewPageContext().addPropertyChangeListener( + pageContextListener); + updateTotalCountLabel(); } void handleColumnUpdated() { @@ -202,7 +216,8 @@ return getDataViewTableUIModel().isEditable(); } - void setTotalCount(int count) { + void updateTotalCountLabel() { + int count = dataView.getDataViewPageContext().getTotalRows(); assert SwingUtilities.isEventDispatchThread() : "Must be called from AWT thread"; //NOI18N if (count < 0) { int pageSize = dataView.getDataViewPageContext().getPageSize(); diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/output/SQLExecutionHelper.java b/db.dataview/src/org/netbeans/modules/db/dataview/output/SQLExecutionHelper.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/output/SQLExecutionHelper.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/output/SQLExecutionHelper.java @@ -194,7 +194,7 @@ Integer result = null; if (rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE - || rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE) { + || rs.getType() == ResultSet.TYPE_SCROLL_SENSITIVE) { try { rs.last(); result = rs.getRow(); @@ -305,7 +305,7 @@ dataView.getDataViewPageContext().setTotalRows(0); dataView.getDataViewPageContext().first(); } - dataView.incrementRowSize(1); + dataView.getDataViewPageContext().incrementRowSize(1); // refresh when required if (dataView.getDataViewPageContext().refreshRequiredOnInsert()) { @@ -377,7 +377,7 @@ @Override protected void executeOnSucess() { - dataView.decrementRowSize(rows.length); + dataView.getDataViewPageContext().decrementRowSize(rows.length); SQLExecutionHelper.this.executeQuery(); } }; @@ -561,7 +561,7 @@ Integer result = null; if (rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE - || rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE) { + || rs.getType() == ResultSet.TYPE_SCROLL_SENSITIVE) { try { rs.last(); result = rs.getRow(); @@ -694,10 +694,8 @@ void setTotalCount(Integer count) { if (count == null) { dataView.getDataViewPageContext().setTotalRows(-1); - dataView.setTotalRowCount(-1); } else { dataView.getDataViewPageContext().setTotalRows(count); - dataView.setTotalRowCount(count); } }