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 463d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov public void close() { 473d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov super.close(); 483d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov mCursor.close(); 493d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov } 503d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov 513d8b043c3341a5b6c2e781b7eba9767d5cd13267Dmitri Plotnikov @Override 5231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public boolean onMove(int oldPosition, int newPosition) { 5331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.moveToPosition(mPositionMap[newPosition]); 5431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 5531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov 5631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov @Override 5731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public String[] getColumnNames() { 5831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.getColumnNames(); 5931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 6031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov 6131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov @Override 6231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public int getCount() { 6331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.getCount(); 6431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 6531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov 6631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov @Override 6731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public double getDouble(int column) { 6831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.getDouble(column); 6931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 7031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov 7131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov @Override 7231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public float getFloat(int column) { 7331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.getFloat(column); 7431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 7531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov 7631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov @Override 7731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public int getInt(int column) { 7831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.getInt(column); 7931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 8031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov 8131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov @Override 8231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public long getLong(int column) { 8331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.getLong(column); 8431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 8531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov 8631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov @Override 8731b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public short getShort(int column) { 8831b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.getShort(column); 8931b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 9031b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov 9131b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov @Override 9231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public String getString(int column) { 9331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.getString(column); 9431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 9531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov 9631b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov @Override 971a40dbed84a2a2f397d52c64099469ed3557aabeVasu Nori public int getType(int column) { 981a40dbed84a2a2f397d52c64099469ed3557aabeVasu Nori return mCursor.getType(column); 991a40dbed84a2a2f397d52c64099469ed3557aabeVasu Nori } 1001a40dbed84a2a2f397d52c64099469ed3557aabeVasu Nori 1011a40dbed84a2a2f397d52c64099469ed3557aabeVasu Nori @Override 10231b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov public boolean isNull(int column) { 10331b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov return mCursor.isNull(column); 10431b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov } 10531b86315536573a72dc7fff1baac3b314e5a04c3Dmitri Plotnikov}