AbstractWindowedCursor.java revision 8a358a7eedae45178f55c3b514a15e8ae4b10dba
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.database; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A base class for Cursors that store their data in {@link CursorWindow}s. 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamiltonpublic abstract class AbstractWindowedCursor extends AbstractCursor { 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 24f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public byte[] getBlob(int columnIndex) { 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPosition(); 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow.getBlob(mPos, columnIndex); 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 30f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public String getString(int columnIndex) { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPosition(); 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow.getString(mPos, columnIndex); 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 36f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPosition(); 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.copyStringToBuffer(mPos, columnIndex, buffer); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 42f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public short getShort(int columnIndex) { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPosition(); 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow.getShort(mPos, columnIndex); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 48f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public int getInt(int columnIndex) { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPosition(); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow.getInt(mPos, columnIndex); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 54f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public long getLong(int columnIndex) { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPosition(); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow.getLong(mPos, columnIndex); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 60f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public float getFloat(int columnIndex) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPosition(); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow.getFloat(mPos, columnIndex); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 66f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public double getDouble(int columnIndex) { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPosition(); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow.getDouble(mPos, columnIndex); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 72f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public boolean isNull(int columnIndex) { 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPosition(); 748b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori return mWindow.getType(mPos, columnIndex) == Cursor.FIELD_TYPE_NULL; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 77f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton /** 78f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton * @deprecated Use {@link #getType} 79f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton */ 80f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton @Deprecated 818b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori public boolean isBlob(int columnIndex) { 828b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori return getType(columnIndex) == Cursor.FIELD_TYPE_BLOB; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 85f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton /** 86f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton * @deprecated Use {@link #getType} 87f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton */ 88f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton @Deprecated 898b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori public boolean isString(int columnIndex) { 908b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori return getType(columnIndex) == Cursor.FIELD_TYPE_STRING; 9103d9490758c9318cee6d14d3cc5007556dce92d0Fred Quintana } 9203d9490758c9318cee6d14d3cc5007556dce92d0Fred Quintana 93f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton /** 94f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton * @deprecated Use {@link #getType} 95f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton */ 96f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton @Deprecated 978b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori public boolean isLong(int columnIndex) { 988b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori return getType(columnIndex) == Cursor.FIELD_TYPE_INTEGER; 998b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori } 10003d9490758c9318cee6d14d3cc5007556dce92d0Fred Quintana 101f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton /** 102f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton * @deprecated Use {@link #getType} 103f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton */ 104f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton @Deprecated 1058b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori public boolean isFloat(int columnIndex) { 1068b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori return getType(columnIndex) == Cursor.FIELD_TYPE_FLOAT; 10703d9490758c9318cee6d14d3cc5007556dce92d0Fred Quintana } 10803d9490758c9318cee6d14d3cc5007556dce92d0Fred Quintana 1098b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori @Override 110f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton public int getType(int columnIndex) { 11103d9490758c9318cee6d14d3cc5007556dce92d0Fred Quintana checkPosition(); 1128b0dd7da360d70920a37802eb455ba41500d3b45Vasu Nori return mWindow.getType(mPos, columnIndex); 11303d9490758c9318cee6d14d3cc5007556dce92d0Fred Quintana } 11403d9490758c9318cee6d14d3cc5007556dce92d0Fred Quintana 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 116f1a4a0a5b712963b77bf019886cf73cf6bc1b7b4Jeff Hamilton protected void checkPosition() { 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.checkPosition(); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow == null) { 1208a358a7eedae45178f55c3b514a15e8ae4b10dbaVasu Nori throw new StaleDataException("Attempting to access a closed CursorWindow." + 1218a358a7eedae45178f55c3b514a15e8ae4b10dbaVasu Nori "Most probable cause: cursor is deactivated prior to calling this method."); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CursorWindow getWindow() { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set a new cursor window to cursor, usually set a remote cursor window 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param window cursor window 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setWindow(CursorWindow window) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.close(); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow = window; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasWindow() { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow != null; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This needs be updated in {@link #onMove} by subclasses, and 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * needs to be set to NULL when the contents of the cursor change. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected CursorWindow mWindow; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 151