ReorderingCursorWrapper.java revision 28f8857b1b46bde18b85c6d3c2a63ac44c3c2e1c
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 */ 1628f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarpackage com.android.providers.contacts; 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}