ReorderingCursorWrapper.java revision 31b86315536573a72dc7fff1baac3b314e5a04c3
131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov/*
231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * Copyright (C) 2009 The Android Open Source Project
331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov *
431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * you may not use this file except in compliance with the License.
631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * You may obtain a copy of the License at
731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov *
831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov *
1031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
1131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
1231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * See the License for the specific language governing permissions and
1431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * limitations under the License
1531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov */
1631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikovpackage com.android.providers.contacts2;
1731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
1831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikovimport android.database.AbstractCursor;
1931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikovimport android.database.Cursor;
2031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
2131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov/**
2231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov * Cursor wrapper that reorders rows according to supplied specific position mapping.
2331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov */
2431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikovpublic class ReorderingCursorWrapper extends AbstractCursor {
2531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
2631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    private final Cursor mCursor;
2731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    private final int[] mPositionMap;
2831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
2931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    /**
3031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov     * Constructor.
3131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov     *
3231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov     * @param cursor wrapped cursor
3331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov     * @param positionMap maps wrapper cursor positions to wrapped cursor positions
3431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov     *            so that positionMap[wrapperPosition] == wrappedPosition
3531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov     */
3631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public ReorderingCursorWrapper(Cursor cursor, int[] positionMap) {
3731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        if (cursor.getCount() != positionMap.length) {
3831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov            throw new IllegalArgumentException("Cursor and position map have different sizes.");
3931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        }
4031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
4131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        mCursor = cursor;
4231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        mPositionMap = positionMap;
4331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
4431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
4531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
4631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public boolean onMove(int oldPosition, int newPosition) {
4731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.moveToPosition(mPositionMap[newPosition]);
4831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
4931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
5031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
5131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public String[] getColumnNames() {
5231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.getColumnNames();
5331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
5431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
5531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
5631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public int getCount() {
5731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.getCount();
5831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
5931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
6031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
6131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public double getDouble(int column) {
6231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.getDouble(column);
6331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
6431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
6531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
6631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public float getFloat(int column) {
6731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.getFloat(column);
6831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
6931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
7031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
7131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public int getInt(int column) {
7231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.getInt(column);
7331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
7431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
7531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
7631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public long getLong(int column) {
7731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.getLong(column);
7831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
7931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
8031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
8131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public short getShort(int column) {
8231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.getShort(column);
8331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
8431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
8531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
8631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public String getString(int column) {
8731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.getString(column);
8831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
8931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov
9031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    @Override
9131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    public boolean isNull(int column) {
9231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov        return mCursor.isNull(column);
9331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov    }
9431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov}