120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn/*
220c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * Copyright (C) 2014 The Android Open Source Project
320c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn *
420c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
520c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * in compliance with the License. You may obtain a copy of the License at
620c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn *
720c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0
820c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn *
920c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License
1020c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under
1220c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * the License.
1320c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn */
1420c094c196271089a7119a965b6a99786ea9ed36Tim Kilbournpackage android.support.v17.leanback.database;
1520c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn
1620c094c196271089a7119a965b6a99786ea9ed36Tim Kilbournimport android.database.Cursor;
1720c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn
1820c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn/**
1920c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * Abstract class used to convert the current {@link Cursor} row to a single
2020c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn * object.
2120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn */
2220c094c196271089a7119a965b6a99786ea9ed36Tim Kilbournpublic abstract class CursorMapper {
2320c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn
2420c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    private Cursor mCursor;
2520c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn
2620c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    /**
2720c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     * Called once when the associated {@link Cursor} is changed. A subclass
2820c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     * should bind column indexes to column names in this method. This method is
2920c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     * not intended to be called outside of CursorMapper.
3020c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     */
3120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    protected abstract void bindColumns(Cursor cursor);
3220c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn
3320c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    /**
3420c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     * A subclass should implement this method to create a single object using
3520c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     * binding information. This method is not intended to be called
3620c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     * outside of CursorMapper.
3720c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     */
3820c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    protected abstract Object bind(Cursor cursor);
3920c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn
4020c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    /**
4120c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     * Convert a {@link Cursor} at its current position to an Object.
4220c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn     */
4320c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    public Object convert(Cursor cursor) {
4420c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn        if (cursor != mCursor) {
4520c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn            mCursor = cursor;
4620c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn            bindColumns(mCursor);
4720c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn        }
4820c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn        return bind(mCursor);
4920c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn    }
5020c094c196271089a7119a965b6a99786ea9ed36Tim Kilbourn}
51