package com.geek_alarm.android.db;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.geek_alarm.android.AlarmPreference;
import com.geek_alarm.android.tasks.TaskType;
import java.util.ArrayList;
import java.util.List;
public enum TaskTypeDao {
INSTANCE;
private static String TABLE_NAME = "task_types";
private static String TYPE = "type";
private static String NAME = "name";
private static String LEVEL = "level";
private static String DESCRIPTION = "description";
/**
* Creates table for task types. Must be called only once, when application starts first time.
* @param db database that contains geekalarm's data.
*/
public void initialize(SQLiteDatabase db) {
String request = String.format(
"CREATE TABLE %s (%s TEXT PRIMARY KEY, %s TEXT, %s TEXT, %s INTEGER);",
TABLE_NAME, TYPE, NAME, DESCRIPTION, LEVEL);
db.execSQL(request);
}
public void add(TaskType taskType) {
ContentValues values = toContentValues(taskType);
DBOpenHelper.getInstance().getWritableDatabase().insert(TABLE_NAME, null, values);
}
public void update(TaskType taskType) {
ContentValues values = toContentValues(taskType);
String[] args = {taskType.getType()};
DBOpenHelper.getInstance().getWritableDatabase().update(TABLE_NAME, values, "type = ?", args);
}
public List<TaskType> getAll() {
String query = String.format("SELECT * FROM %s ORDER BY %s", TABLE_NAME, NAME);
Cursor cursor = DBOpenHelper.getInstance().getReadableDatabase().rawQuery(query, null);
List<TaskType> taskTypes = new ArrayList<TaskType>();
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
taskTypes.add(read(cursor));
}
cursor.close();
return taskTypes;
}
public void delete(TaskType taskType) {
String[] args = {taskType.getType()};
DBOpenHelper.getInstance().getWritableDatabase().delete(TABLE_NAME, "type = ?", args);
}
public TaskType findByType(String type) {
String query = String.format("SELECT * FROM %s WHERE %s = '%s'", TABLE_NAME, TYPE, type);
Cursor cursor = DBOpenHelper.getInstance().getReadableDatabase().rawQuery(query, null);
cursor.moveToFirst();
if (cursor.isAfterLast()) {
return null;
}
TaskType taskType = read(cursor);
cursor.close();
return taskType;
}
private TaskType read(Cursor cursor) {
return new TaskType(
cursor.getString(cursor.getColumnIndex(TYPE)),
cursor.getString(cursor.getColumnIndex(NAME)),
cursor.getString(cursor.getColumnIndex(DESCRIPTION)),
TaskType.Level.fromValue(cursor.getInt(cursor.getColumnIndex(LEVEL))));
}
private ContentValues toContentValues(TaskType taskType) {
ContentValues values = new ContentValues();
values.put(TYPE, taskType.getType());
values.put(NAME, taskType.getName());
values.put(DESCRIPTION, taskType.getDescription());
values.put(LEVEL, taskType.getLevel().getValue());
return values;
}
}