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 java.util.ArrayList; import java.util.List; public enum AlarmPreferenceDao { INSTANCE; private static final String HOUR = "hour"; private static final String MINUTE = "minute"; private static final String DAYS = "days"; private static final String ID = "id"; private static final String ENABLED = "enabled"; private static final String TABLE_NAME = "alarms"; /** * Creates table for alarms preferences. 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 INTEGER PRIMARY KEY AUTOINCREMENT," + "%s INTEGER, %s INTEGER, %s INTEGER, %s INTEGER);", TABLE_NAME, ID, DAYS, HOUR, MINUTE, ENABLED); db.execSQL(request); } public void add(AlarmPreference preference) { ContentValues values = toContentValues(preference); long id = DBOpenHelper.getInstance().getWritableDatabase().insert(TABLE_NAME, null, values); preference.setId((int)id); } public void update(AlarmPreference preference) { ContentValues values = toContentValues(preference); String[] args = {String.valueOf(preference.getId())}; DBOpenHelper.getInstance().getWritableDatabase().update(TABLE_NAME, values, "id=?", args); } public List<AlarmPreference> getAll() { String query = String.format("SELECT * FROM %s", TABLE_NAME); Cursor cursor = DBOpenHelper.getInstance().getReadableDatabase().rawQuery(query, null); List<AlarmPreference> preferences = new ArrayList<AlarmPreference>(cursor.getCount()); for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { preferences.add(read(cursor)); } cursor.close(); return preferences; } public AlarmPreference findById(int id) { String query = String.format("SELECT * FROM %s WHERE %s = %d", TABLE_NAME, ID, id); Cursor cursor = DBOpenHelper.getInstance().getReadableDatabase().rawQuery(query, null); cursor.moveToFirst(); if (cursor.isAfterLast()) { return null; } AlarmPreference preference = read(cursor); cursor.close(); return preference; } public void delete(AlarmPreference preference) { String[] args = {String.valueOf(preference.getId())}; DBOpenHelper.getInstance().getWritableDatabase().delete(TABLE_NAME, "id = ?", args); } private AlarmPreference read(Cursor cursor) { AlarmPreference preference = new AlarmPreference(); preference.setId(cursor.getInt(0)); preference.setDays(cursor.getInt(1)); preference.setHour(cursor.getInt(2)); preference.setMinute(cursor.getInt(3)); preference.setEnabled(cursor.getInt(4) == 1); return preference; } private ContentValues toContentValues(AlarmPreference preference) { ContentValues values = new ContentValues(); values.put(DAYS, preference.getDays()); values.put(HOUR, preference.getHour()); values.put(MINUTE, preference.getMinute()); values.put(ENABLED, preference.isEnabled() ? 1 : 0); return values; } }