package gueei.binding.cursor; import gueei.binding.Observable; import android.database.Cursor; public abstract class CursorField<T> extends Observable<T> { protected static final int COLUMN_NOT_FOUND = -1; protected static final int COLUMN_UNSET = -10; protected int mColumnIndex = COLUMN_UNSET; protected final String mColumnName; public CursorField(Class<T> type, int columnIndex){ super(type); mColumnName = null; mColumnIndex = columnIndex; } public CursorField(Class<T> type, String columnName){ super(type); mColumnName = columnName; } public abstract T returnValue(Cursor cursor); public void fillValue(Cursor cursor){ if (mColumnIndex>=0){ this.set(returnValue(cursor)); return; } if (mColumnIndex == COLUMN_NOT_FOUND) return; if (mColumnIndex == COLUMN_UNSET){ mColumnIndex = cursor.getColumnIndex(mColumnName); fillValue(cursor); return; } } // Save the data back to the database (if applicable) public abstract void saveValue(Cursor cursor); }