package droidkit.database;
import android.database.Cursor;
import android.support.annotation.NonNull;
import droidkit.util.Dynamic;
import droidkit.util.Objects;
/**
* @author Daniel Serdyukov
*/
public final class CursorUtils {
private CursorUtils() {
}
@NonNull
public static String getString(@NonNull Cursor cursor, @NonNull String columnName) {
return Objects.stringNonNull(cursor.getString(cursor.getColumnIndex(columnName)));
}
public static long getLong(@NonNull Cursor cursor, @NonNull String columnName) {
return cursor.getLong(cursor.getColumnIndex(columnName));
}
public static int getInt(@NonNull Cursor cursor, @NonNull String columnName) {
return cursor.getInt(cursor.getColumnIndex(columnName));
}
public static short getShort(@NonNull Cursor cursor, @NonNull String columnName) {
return cursor.getShort(cursor.getColumnIndex(columnName));
}
public static double getDouble(@NonNull Cursor cursor, @NonNull String columnName) {
return cursor.getDouble(cursor.getColumnIndex(columnName));
}
public static float getFloat(@NonNull Cursor cursor, @NonNull String columnName) {
return cursor.getFloat(cursor.getColumnIndex(columnName));
}
public static byte[] getBlob(@NonNull Cursor cursor, @NonNull String columnName) {
return cursor.getBlob(cursor.getColumnIndex(columnName));
}
public static boolean getBoolean(@NonNull Cursor cursor, @NonNull String columnName) {
final int columnIndex = cursor.getColumnIndex(columnName);
final int fieldType = cursor.getType(columnIndex);
switch (fieldType) {
case Cursor.FIELD_TYPE_INTEGER:
return cursor.getLong(columnIndex) > 0;
case Cursor.FIELD_TYPE_FLOAT:
return cursor.getDouble(columnIndex) > 0;
case Cursor.FIELD_TYPE_STRING:
return cursor.getString(columnIndex) != null;
case Cursor.FIELD_TYPE_BLOB:
return cursor.getBlob(columnIndex) != null;
default:
return false;
}
}
@NonNull
public static Object getTypedValue(@NonNull Cursor cursor, @NonNull String columnName, @NonNull Class<?> type) {
final Class<?> unboxedType = Dynamic.unbox(type);
if (unboxedType == Integer.class) {
return getInt(cursor, columnName);
} else if (unboxedType == Long.class) {
return getLong(cursor, columnName);
} else if (unboxedType == Double.class) {
return getDouble(cursor, columnName);
} else if (unboxedType == Float.class) {
return getFloat(cursor, columnName);
} else if (unboxedType == Short.class) {
return getShort(cursor, columnName);
} else if (unboxedType == byte[].class) {
return getBlob(cursor, columnName);
} else if (unboxedType == Boolean.class) {
return getBoolean(cursor, columnName);
} else {
return getString(cursor, columnName);
}
}
}