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