package com.whatstodo.persistence;
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import com.whatstodo.models.List;
//TODO Exception handling and logging
public class TodoListDAOSqlite implements TodoListDAO {
private final String idClause = DatabaseHelper.TODOLIST_COLUMN_ID + " = ?";
private DatabaseHelper dbHelper;
private SQLiteDatabase db;
public TodoListDAOSqlite(Context context) {
dbHelper = new DatabaseHelper(context);
}
@Override
public void open() throws SQLException {
db = dbHelper.getWritableDatabase();
}
@Override
public void close() {
dbHelper.close();
}
@Override
public List getById(long id) {
Cursor cursor = db.query(DatabaseHelper.TODOLIST_TABLE, null, idClause, new String[]{Long.toString(id)}, null, null, null);
List list = null;
if (cursor.moveToFirst()) {
list = cursorToTodoList(cursor);
}
cursor.close();
return list;
}
@Override
public java.util.List<List> findAll() {
Cursor cursor = db.query(DatabaseHelper.TODOLIST_TABLE, null, null, null, null, null, null);
java.util.List<List> list = cursorToList(cursor);
cursor.close();
return list;
}
@Override
public List create(List entity) {
ContentValues values = todoListToContentValues(entity);
long listId = db.insert(DatabaseHelper.TODOLIST_TABLE, null, values);
return getById(listId);
}
@Override
public List read(long id) {
return getById(id);
}
@Override
public List update(List entity) {
ContentValues values = todoListToContentValues(entity);
int updatedRows = db.update(DatabaseHelper.TODOLIST_TABLE, values, idClause, new String[] {Long.toString(entity.getId())});
if (updatedRows > 1) {
throw new SQLException("More than one row with the same _ID");
}
return getById(entity.getId());
}
@Override
public void delete(List entity) {
db.delete(DatabaseHelper.TODOLIST_TABLE, idClause,
new String[] { Long.toString(entity.getId()) });
}
@Override
public void deleteAll(){
db.delete(DatabaseHelper.TODOLIST_TABLE, null, null);
}
private java.util.List<List> cursorToList(Cursor cursor) {
java.util.List<List> resultList = new ArrayList<List>();
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
resultList.add(cursorToTodoList(cursor));
}
return resultList;
}
private ContentValues todoListToContentValues(List entity) {
ContentValues values = new ContentValues();
if(entity.getId() != 0) {
values.put(DatabaseHelper.TODOLIST_COLUMN_ID, entity.getId());
}
values.put(DatabaseHelper.TODOLIST_COLUMN_NAME, entity.getName());
values.put(DatabaseHelper.TODOLIST_COLUMN_SIZE, entity.size());
return values;
}
private List cursorToTodoList(Cursor cursor) {
List list = new List();
list.setId(cursor.getLong(cursor.getColumnIndex(DatabaseHelper.TODOLIST_COLUMN_ID)));
list.setName(cursor.getString(cursor.getColumnIndex(DatabaseHelper.TODOLIST_COLUMN_NAME)));
list.setSize(cursor.getInt(cursor.getColumnIndex(DatabaseHelper.TODOLIST_COLUMN_SIZE)));
return list;
}
}