--- /dev/null
+package com.quantum.view.tableview;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.sql.SQLException;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.sql.Scrollable;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IViewPart;
+
+
+/**
+ * @author BC
+ */
+public class NextPageAction extends ResultSetAction implements PropertyChangeListener {
+
+ private SQLResultSetResults resultSet;
+
+ public NextPageAction(IViewPart view, ISelectionProvider selectionProvider) {
+ super(view, selectionProvider);
+ setText(Messages.getString(getClass(), "text"));
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.NEXT));
+ setToolTipText(Messages.getString(getClass(), "text"));
+ setEnabled(hasNextPage((IStructuredSelection) selectionProvider.getSelection()));
+ }
+
+ protected void executeResultSetAction(SQLResultSetResults results) throws SQLException {
+ if (results instanceof Scrollable) {
+ ((Scrollable) results).nextPage(getConnection(results));
+ }
+ }
+ protected boolean updateSelection(IStructuredSelection selection) {
+ setResultSet(getResultSet(selection));
+ return hasNextPage(selection);
+ }
+
+ /**
+ * @param srollable
+ */
+ private void setResultSet(SQLResultSetResults results) {
+ if (this.resultSet != null) {
+ this.resultSet.removePropertyChangeListener(this);
+ }
+
+ this.resultSet = results;
+ if (results != null) {
+ this.resultSet.addPropertyChangeListener(this);
+ }
+ }
+
+ /**
+ * @param selection
+ */
+ private SQLResultSetResults getResultSet(IStructuredSelection selection) {
+ return (selection != null && !selection.isEmpty() &&
+ (selection.getFirstElement() instanceof SQLResultSetResults))
+ ? (SQLResultSetResults) selection.getFirstElement()
+ : null;
+ }
+
+ /**
+ * @param selection
+ * @return
+ */
+ private boolean hasNextPage(IStructuredSelection selection) {
+ return !selection.isEmpty() &&
+ (selection.getFirstElement() instanceof Scrollable) &&
+ ((Scrollable) selection.getFirstElement()).hasNextPage();
+ }
+
+ public void propertyChange(PropertyChangeEvent event) {
+ if ("rows".equals(event.getPropertyName())) {
+ setEnabled(hasNextPage(getStructuredSelection()));
+ }
+ }
+}