/* AWSIotDBHelper.java Copyright (c) 2016 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.awsiot.cores.core; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.provider.BaseColumns; import java.util.ArrayList; import java.util.List; /** * This class manage a database. * * @author NTT DOCOMO, INC. */ public class AWSIotDBHelper { /** * データベース名. */ private static final String DB_NAME = "awsiot.db"; /** * データベースバージョン. */ private static final int DB_VERSION = 1; private static final String TBL_NAME = "manager_tbl"; private static final String COL_SERVICE_ID = "service_id"; private static final String COL_NAME = "name"; private static final String COL_SUBSCRIBE_FLAG = "subscribe_flag"; private static final String COL_UPDATEDATE_MILLIS = "update_date_millis"; private DBHelper mDBHelper; public AWSIotDBHelper(final Context context) { mDBHelper = new DBHelper(context); } /** * Add the manager in the database. * * @param manager RemoteDeviceConnectManager * @return the number of rows added */ public synchronized long addManager(final RemoteDeviceConnectManager manager) { ContentValues values = new ContentValues(); values.put(COL_SERVICE_ID, manager.getServiceId()); values.put(COL_NAME, manager.getName()); values.put(COL_SUBSCRIBE_FLAG, manager.isSubscribe() ? 1 : 0); values.put(COL_UPDATEDATE_MILLIS, System.currentTimeMillis()); SQLiteDatabase db = mDBHelper.getWritableDatabase(); try { return db.insert(TBL_NAME, null, values); } finally { db.close(); } } /** * Update the manager in the database. * * @param manager RemoteDeviceConnectManager * @return the number of rows updated */ public synchronized int updateManager(final RemoteDeviceConnectManager manager) { ContentValues values = new ContentValues(); values.put(COL_NAME, manager.getName()); values.put(COL_SUBSCRIBE_FLAG, manager.isSubscribe() ? 1 : 0); values.put(COL_UPDATEDATE_MILLIS, System.currentTimeMillis()); String whereClause = COL_SERVICE_ID + "=?"; String[] whereArgs = { manager.getServiceId() }; SQLiteDatabase db = mDBHelper.getWritableDatabase(); try { return db.update(TBL_NAME, values, whereClause, whereArgs); } finally { db.close(); } } public synchronized RemoteDeviceConnectManager findManagerById(final String id) { RemoteDeviceConnectManager manager; String SQL_SELECT = "SELECT * FROM " + TBL_NAME + " WHERE " + COL_SERVICE_ID + "=? " + ";"; String[] whereArgs = { id }; SQLiteDatabase db = mDBHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(SQL_SELECT, whereArgs); if (cursor.moveToFirst()) { manager = new RemoteDeviceConnectManager( cursor.getString(cursor.getColumnIndex(COL_NAME)), cursor.getString(cursor.getColumnIndex(COL_SERVICE_ID))); manager.setSubscribeFlag(cursor.getInt(cursor.getColumnIndex(COL_SUBSCRIBE_FLAG)) == 1); cursor.close(); db.close(); return manager; } else { cursor.close(); db.close(); return null; } } /** * Delete the manager in the database. * * @param manager RemoteDeviceConnectManager * @return the number of rows deleted, 0 otherwise */ public synchronized int removeManager(final RemoteDeviceConnectManager manager) { String whereClause = COL_SERVICE_ID + "=?"; String[] whereArgs = { manager.getServiceId() }; SQLiteDatabase db = mDBHelper.getWritableDatabase(); try { return db.delete(TBL_NAME, whereClause, whereArgs); } finally { db.close(); } } /** * Get a list of information in the database. * * @return a list of information */ public synchronized List<RemoteDeviceConnectManager> getManagers() { String sql = "SELECT * FROM " + TBL_NAME; String[] selectionArgs = {}; SQLiteDatabase db = mDBHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(sql, selectionArgs); List<RemoteDeviceConnectManager> managers = new ArrayList<>(); boolean next = cursor.moveToFirst(); while (next) { RemoteDeviceConnectManager manager = new RemoteDeviceConnectManager( cursor.getString(cursor.getColumnIndex(COL_NAME)), cursor.getString(cursor.getColumnIndex(COL_SERVICE_ID))); manager.setSubscribeFlag(cursor.getInt(cursor.getColumnIndex(COL_SUBSCRIBE_FLAG)) == 1); managers.add(manager); next = cursor.moveToNext(); } cursor.close(); return managers; } private static class DBHelper extends SQLiteOpenHelper { DBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(final SQLiteDatabase db) { createDB(db); } @Override public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TBL_NAME); createDB(db); } private void createDB(final SQLiteDatabase db) { String sql = "CREATE TABLE " + TBL_NAME + " (" + BaseColumns._ID + " INTEGER PRIMARY KEY, " + COL_SERVICE_ID + " TEXT NOT NULL, " + COL_NAME + " TEXT NOT NULL, " + COL_SUBSCRIBE_FLAG + " INTEGER, " + COL_UPDATEDATE_MILLIS + " INTEGER" + ");"; db.execSQL(sql); } } }