package fr.tvbarthel.apps.sayitfromthesky.helpers;
import android.database.Cursor;
import com.google.gson.Gson;
import java.util.Arrays;
import fr.tvbarthel.apps.sayitfromthesky.models.Drawing;
import fr.tvbarthel.apps.sayitfromthesky.providers.contracts.DrawingContract;
/**
* Static utility methods for dealing with cursor.
*/
public final class CursorHelper {
private static final Gson GSON = new Gson();
// Non-instantiability
private CursorHelper() {
}
/**
* Get a {@link java.lang.String} from a {@link android.database.Cursor}
*
* @param cursor the {@link android.database.Cursor} from which the {@link java.lang.String} will be extracted.
* @param columnName the column name of the {@link java.lang.String}
* @param defaultValue the default {@link java.lang.String} to use if the column name does not exist.
* @return a {@link java.lang.String}
*/
public static String getString(Cursor cursor, String columnName, String defaultValue) {
final int columnIndex = cursor.getColumnIndex(columnName);
if (columnIndex == -1) return defaultValue;
return cursor.getString(columnIndex);
}
/**
* Get a long from a {@link android.database.Cursor}.
*
* @param cursor the {@link android.database.Cursor} from which the long will be extracted.
* @param columnName the column name of the long value.
* @param defaultValue the default long value to use if the column name does not exist.
* @return a long value
*/
public static long getLong(Cursor cursor, String columnName, long defaultValue) {
final int columnIndex = cursor.getColumnIndex(columnName);
if (columnIndex == -1) return defaultValue;
return cursor.getLong(columnIndex);
}
/**
* Get an int from a {@link android.database.Cursor}.
*
* @param cursor the {@link android.database.Cursor} from which the int will be extracted.
* @param columnName the column name of the int value.
* @param defaultValue the default int value to use if the column name does not exist.
* @return an int value
*/
public static int getInt(Cursor cursor, String columnName, int defaultValue) {
final int columnIndex = cursor.getColumnIndex(columnName);
if (columnIndex == -1) return defaultValue;
return cursor.getInt(columnIndex);
}
/**
* Convert a {@link android.database.Cursor} to a {@link fr.tvbarthel.apps.sayitfromthesky.models.Drawing}
*
* @param cursor the {@link android.database.Cursor} to be converted.
* @return a new {@link fr.tvbarthel.apps.sayitfromthesky.models.Drawing}
*/
public static Drawing cursorToDrawing(Cursor cursor) {
final int id = CursorHelper.getInt(cursor, DrawingContract.Columns.COLUMN_ID, Drawing.NON_VALID_ID);
final String title = CursorHelper.getString(cursor, DrawingContract.Columns.COLUMN_TITLE, "");
final long creationTime = CursorHelper.getLong(cursor, DrawingContract.Columns.COLUMN_CREATION_TIME, 0l);
final String encodedPolylines = CursorHelper.getString(cursor, DrawingContract.Columns.COLUMN_ENCODED_POLYLINES, "");
final String[] polylines = GSON.fromJson(encodedPolylines, String[].class);
final Drawing drawing = new Drawing(title, creationTime, Arrays.asList(polylines));
drawing.setId(id);
return drawing;
}
}