This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 227588
Collapse All | Expand All

(-)a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataView.java (-37 lines)
Lines 129-137 Link Here
129
129
130
        synchronized (this) {
130
        synchronized (this) {
131
            this.dataViewUI = new DataViewUI(this, nbOutputComponent);
131
            this.dataViewUI = new DataViewUI(this, nbOutputComponent);
132
            dataViewUI.getDataViewTableUI().setModel(dataPage.getModel());
133
            dataViewUI.setEditable(tblMeta == null ? false : tblMeta.hasOneTable());
132
            dataViewUI.setEditable(tblMeta == null ? false : tblMeta.hasOneTable());
134
            dataViewUI.setTotalCount(dataPage.getTotalRows());
135
            resetToolbar(hasExceptions());
133
            resetToolbar(hasExceptions());
136
        }
134
        }
137
        results = new ArrayList<Component>();
135
        results = new ArrayList<Component>();
Lines 320-360 Link Here
320
        });
318
        });
321
    }
319
    }
322
320
323
    synchronized void setTotalRowCount(final int count) {
324
        if (dataViewUI != null) {
325
            Mutex.EVENT.readAccess(new Runnable() {
326
                @Override
327
                public void run() {
328
                    dataViewUI.setTotalCount(count);
329
                }
330
            });
331
        }
332
    }
333
    
334
    synchronized void incrementRowSize(int count) {
335
        assert dataViewUI != null;
336
        dataPage.setTotalRows(dataPage.getTotalRows() + count);
337
        Mutex.EVENT.readAccess(new Runnable() {
338
339
            @Override
340
            public void run() {
341
                dataViewUI.setTotalCount(dataPage.getTotalRows());
342
            }
343
        });
344
    }
345
346
    synchronized void decrementRowSize(int count) {
347
        assert dataViewUI != null;
348
        dataPage.decrementRowSize(count);
349
        Mutex.EVENT.readAccess(new Runnable() {
350
351
            @Override
352
            public void run() {
353
                dataViewUI.setTotalCount(dataPage.getTotalRows());
354
            }
355
        });
356
    }
357
358
    void setHasResultSet(boolean hasResultSet) {
321
    void setHasResultSet(boolean hasResultSet) {
359
        this.hasResultSet = hasResultSet;
322
        this.hasResultSet = hasResultSet;
360
    }
323
    }
(-)a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewPageContext.java (-32 / +91 lines)
Lines 43-49 Link Here
43
 */
43
 */
44
package org.netbeans.modules.db.dataview.output;
44
package org.netbeans.modules.db.dataview.output;
45
45
46
import java.beans.PropertyChangeListener;
47
import java.beans.PropertyChangeSupport;
46
import org.netbeans.modules.db.dataview.meta.DBColumn;
48
import org.netbeans.modules.db.dataview.meta.DBColumn;
49
import org.openide.util.Mutex;
47
import org.openide.util.NbBundle;
50
import org.openide.util.NbBundle;
48
51
49
/**
52
/**
Lines 52-58 Link Here
52
 * @author Ahimanikya Satapathy
55
 * @author Ahimanikya Satapathy
53
 */
56
 */
54
class DataViewPageContext {
57
class DataViewPageContext {
55
58
    public static final String PROP_pageSize = "pageSize";
59
    public static final String PROP_totalRows = "totalRows";
60
    public static final String PROP_currentPos = "currentPos";
61
    private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
56
    private int pageSize = 10;
62
    private int pageSize = 10;
57
    private int totalRows = -1;
63
    private int totalRows = -1;
58
    private int currentPos = 1;
64
    private int currentPos = 1;
Lines 65-74 Link Here
65
    int getPageSize() {
71
    int getPageSize() {
66
        return pageSize;
72
        return pageSize;
67
    }
73
    }
68
74
    
75
    synchronized void setPageSize(int pageSize) {
76
        int oldPageSize = this.pageSize;
77
        this.pageSize = pageSize;
78
        firePropertyChange(PROP_pageSize, oldPageSize, pageSize);
79
    }
80
    
69
    int getCurrentPos() {
81
    int getCurrentPos() {
70
        return currentPos;
82
        return currentPos;
71
    }
83
    }
84
    
85
    synchronized private void setCurrentPos(int currentPos) {
86
        int oldPos = this.currentPos;
87
        this.currentPos = currentPos;
88
        firePropertyChange(PROP_currentPos, oldPos, currentPos);
89
    }
90
    
91
    synchronized void first() {
92
        setCurrentPos(1);
93
    }
94
95
    synchronized void previous() {
96
        setCurrentPos(getCurrentPos() - pageSize);
97
    }
98
99
    synchronized void next() {
100
        setCurrentPos(getCurrentPos() + pageSize);
101
    }
102
    
103
    synchronized void last() {
104
        if (pageSize < 1) {
105
            return;
106
        }
107
108
        int rem = totalRows % pageSize;
109
        int newCurrentPos = totalRows - (rem == 0 ? pageSize : rem) + 1;
110
        setCurrentPos(newCurrentPos);
111
    }
72
112
73
    DataViewTableUIModel getModel() {
113
    DataViewTableUIModel getModel() {
74
        return model;
114
        return model;
Lines 77-82 Link Here
77
    int getTotalRows() {
117
    int getTotalRows() {
78
        return totalRows;
118
        return totalRows;
79
    }
119
    }
120
    
121
    synchronized void setTotalRows(int totalCount) {
122
        int oldTotalRows = this.totalRows;
123
        this.totalRows = totalCount;
124
        firePropertyChange(PROP_totalRows, oldTotalRows, totalCount);
125
    }
80
126
81
    boolean hasRows() {
127
    boolean hasRows() {
82
        return (totalRows != 0 && pageSize != 0);
128
        return (totalRows != 0 && pageSize != 0);
Lines 94-120 Link Here
94
        return ((currentPos - pageSize) >= 0) && hasRows();
140
        return ((currentPos - pageSize) >= 0) && hasRows();
95
    }
141
    }
96
142
97
    void first() {
98
        currentPos = 1;
99
    }
100
101
    void previous() {
102
        currentPos -= pageSize;
103
    }
104
105
    void next() {
106
        currentPos += pageSize;
107
    }
108
109
    void last() {
110
        if (pageSize < 1) {
111
            return;
112
        }
113
114
        int rem = totalRows % pageSize;
115
        currentPos = totalRows - (rem == 0 ? pageSize : rem) + 1;
116
    }
117
118
    boolean isLastPage() {
143
    boolean isLastPage() {
119
        return (currentPos + pageSize) > totalRows;
144
        return (currentPos + pageSize) > totalRows;
120
    }
145
    }
Lines 137-156 Link Here
137
        return NbBundle.getMessage(DataViewPageContext.class, "LBL_page_of", curPage, totalPages);
162
        return NbBundle.getMessage(DataViewPageContext.class, "LBL_page_of", curPage, totalPages);
138
    }
163
    }
139
164
140
    synchronized void setPageSize(int pageSize) {
141
        this.pageSize = pageSize;
142
    }
143
144
    synchronized void setTotalRows(int totalCount) {
145
        this.totalRows = totalCount;
146
    }
147
148
    synchronized void decrementRowSize(int count) {
165
    synchronized void decrementRowSize(int count) {
149
        totalRows -= count;
166
        setTotalRows(getTotalRows() - count);
150
        if (totalRows <= pageSize) {
167
        if (totalRows <= pageSize) {
151
            first();
168
            first();
152
        } else if (currentPos > totalRows) {
169
        } else if (currentPos > totalRows) {
153
            previous();
170
            previous();
154
        }
171
        }
155
    }
172
    }
173
    
174
    synchronized void incrementRowSize(int count) {
175
        setTotalRows(getTotalRows() + count);
176
        if (totalRows <= pageSize) {
177
            first();
178
        } else if (currentPos > totalRows) {
179
            previous();
180
        }
181
    }
182
183
    /**
184
     * Ensure the property change event is dispatched into the EDT
185
     * 
186
     * @param propertyName
187
     * @param oldValue
188
     * @param newValue 
189
     */
190
    protected void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) {
191
        Mutex.EVENT.writeAccess(new Runnable() {
192
            @Override
193
            public void run() {
194
                pcs.firePropertyChange(propertyName, oldValue, newValue);
195
            }
196
        });
197
        
198
    }
199
200
    public void addPropertyChangeListener(PropertyChangeListener listener) {
201
        pcs.addPropertyChangeListener(listener);
202
    }
203
204
    public void removePropertyChangeListener(PropertyChangeListener listener) {
205
        pcs.removePropertyChangeListener(listener);
206
    }
207
208
    public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
209
        pcs.addPropertyChangeListener(propertyName, listener);
210
    }
211
212
    public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
213
        pcs.removePropertyChangeListener(propertyName, listener);
214
    }
156
}
215
}
(-)a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewUI.java (-1 / +16 lines)
Lines 54-59 Link Here
54
import java.awt.event.KeyListener;
54
import java.awt.event.KeyListener;
55
import java.awt.event.MouseEvent;
55
import java.awt.event.MouseEvent;
56
import java.awt.event.MouseListener;
56
import java.awt.event.MouseListener;
57
import java.beans.PropertyChangeEvent;
58
import java.beans.PropertyChangeListener;
57
import java.net.URL;
59
import java.net.URL;
58
60
59
import java.util.List;
61
import java.util.List;
Lines 109-114 Link Here
109
111
110
    private static final int MAX_TAB_LENGTH = 25;
112
    private static final int MAX_TAB_LENGTH = 25;
111
113
114
    private PropertyChangeListener pageContextListener = new PropertyChangeListener() {
115
        @Override
116
        public void propertyChange(PropertyChangeEvent evt) {
117
            updateTotalCountLabel();
118
        }
119
    };
120
    
112
    /** Shared mouse listener used for setting the border painting property
121
    /** Shared mouse listener used for setting the border painting property
113
     * of the toolbar buttons and for invoking the popup menu.
122
     * of the toolbar buttons and for invoking the popup menu.
114
     */
123
     */
Lines 178-183 Link Here
178
        this.add(dataPanelScrollPane, BorderLayout.CENTER);
187
        this.add(dataPanelScrollPane, BorderLayout.CENTER);
179
        dataPanel.revalidate();
188
        dataPanel.revalidate();
180
        dataPanel.repaint();
189
        dataPanel.repaint();
190
        
191
        dataPanel.setModel(dataView.getDataViewPageContext().getModel());
192
        dataView.getDataViewPageContext().addPropertyChangeListener(
193
                pageContextListener);
194
        updateTotalCountLabel();
181
    }
195
    }
182
196
183
    void handleColumnUpdated() {
197
    void handleColumnUpdated() {
Lines 202-208 Link Here
202
        return getDataViewTableUIModel().isEditable();
216
        return getDataViewTableUIModel().isEditable();
203
    }
217
    }
204
218
205
    void setTotalCount(int count) {
219
    void updateTotalCountLabel() {
220
        int count = dataView.getDataViewPageContext().getTotalRows();
206
        assert SwingUtilities.isEventDispatchThread() : "Must be called from AWT thread";  //NOI18N
221
        assert SwingUtilities.isEventDispatchThread() : "Must be called from AWT thread";  //NOI18N
207
        if (count < 0) {
222
        if (count < 0) {
208
            int pageSize = dataView.getDataViewPageContext().getPageSize();
223
            int pageSize = dataView.getDataViewPageContext().getPageSize();
(-)a/db.dataview/src/org/netbeans/modules/db/dataview/output/SQLExecutionHelper.java (-6 / +4 lines)
Lines 194-200 Link Here
194
                    Integer result = null;
194
                    Integer result = null;
195
                    
195
                    
196
                    if (rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE
196
                    if (rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE
197
                            || rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE) {
197
                            || rs.getType() == ResultSet.TYPE_SCROLL_SENSITIVE) {
198
                        try {
198
                        try {
199
                            rs.last();
199
                            rs.last();
200
                            result = rs.getRow();
200
                            result = rs.getRow();
Lines 305-311 Link Here
305
                    dataView.getDataViewPageContext().setTotalRows(0);
305
                    dataView.getDataViewPageContext().setTotalRows(0);
306
                    dataView.getDataViewPageContext().first();
306
                    dataView.getDataViewPageContext().first();
307
                }
307
                }
308
                dataView.incrementRowSize(1);
308
                dataView.getDataViewPageContext().incrementRowSize(1);
309
309
310
                // refresh when required
310
                // refresh when required
311
                if (dataView.getDataViewPageContext().refreshRequiredOnInsert()) {
311
                if (dataView.getDataViewPageContext().refreshRequiredOnInsert()) {
Lines 377-383 Link Here
377
377
378
            @Override
378
            @Override
379
            protected void executeOnSucess() {
379
            protected void executeOnSucess() {
380
                dataView.decrementRowSize(rows.length);
380
                dataView.getDataViewPageContext().decrementRowSize(rows.length);
381
                SQLExecutionHelper.this.executeQuery();
381
                SQLExecutionHelper.this.executeQuery();
382
            }
382
            }
383
        };
383
        };
Lines 561-567 Link Here
561
                            Integer result = null;
561
                            Integer result = null;
562
562
563
                            if (rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE
563
                            if (rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE
564
                                    || rs.getType() == ResultSet.TYPE_SCROLL_INSENSITIVE) {
564
                                    || rs.getType() == ResultSet.TYPE_SCROLL_SENSITIVE) {
565
                                try {
565
                                try {
566
                                    rs.last();
566
                                    rs.last();
567
                                    result = rs.getRow();
567
                                    result = rs.getRow();
Lines 694-703 Link Here
694
    void setTotalCount(Integer count) {
694
    void setTotalCount(Integer count) {
695
        if (count == null) {
695
        if (count == null) {
696
            dataView.getDataViewPageContext().setTotalRows(-1);
696
            dataView.getDataViewPageContext().setTotalRows(-1);
697
            dataView.setTotalRowCount(-1);
698
        } else {
697
        } else {
699
            dataView.getDataViewPageContext().setTotalRows(count);
698
            dataView.getDataViewPageContext().setTotalRows(count);
700
            dataView.setTotalRowCount(count);
701
        }
699
        }
702
    }
700
    }
703
    
701
    

Return to bug 227588