/*
HitoeDBHelper
Copyright (c) 2016 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.deviceplugin.hitoe.data;
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 HitoeDBHelper {
/**
* Define the name of the database.
*/
private static final String DB_NAME = "hitoe_device.db";
/**
* Define the version of the database.
*/
private static final int DB_VERSION = 1;
/** DB Name. */
private static final String TBL_NAME = "device_tbl";
/** DB column {@value} . */
private static final String COL_TYPE = "type";
/** DB column {@value} . */
private static final String COL_NAME = "name";
/** DB column {@value} . */
private static final String COL_ID = "device_id";
/** DB column {@value} . */
private static final String COL_CONNECT_MODE = "connect_mode";
/** DB column {@value} . */
private static final String COL_PIN_CODE = "pin_code";
/** DB column {@value} . */
private static final String COL_REGISTER_FLAG = "register_flag";
/** DB Helper. */
private DBHelper mDBHelper;
/**
* Constructor.
* @param context application context
*/
public HitoeDBHelper(final Context context) {
mDBHelper = new DBHelper(context);
}
/**
* Add the device to database.
* @param device device
* @return the row ID of the newly added row, or -1 if an error occurred
*/
public synchronized long addHitoeDevice(final HitoeDevice device) {
List<HitoeDevice> exist = getHitoeDevices(device.getId());
if (exist.size() > 0) {
updateHitoeDevice(device);
return -2;
}
ContentValues values = new ContentValues();
values.put(COL_TYPE, device.getType());
values.put(COL_NAME, device.getName());
values.put(COL_ID, device.getId());
values.put(COL_CONNECT_MODE, device.getConnectMode());
values.put(COL_PIN_CODE, device.getPinCode());
values.put(COL_REGISTER_FLAG, device.isRegisterFlag() ? 1 : 0);
SQLiteDatabase db = mDBHelper.getWritableDatabase();
try {
return db.insert(TBL_NAME, null, values);
} finally {
db.close();
}
}
/**
* Update the device in the database.
* @param device device
* @return the number of rows updated
*/
public synchronized int updateHitoeDevice(final HitoeDevice device) {
ContentValues values = new ContentValues();
values.put(COL_REGISTER_FLAG, device.isRegisterFlag() ? 1 : 0);
String whereClause = COL_ID + "=?";
String[] whereArgs = {
device.getId()
};
SQLiteDatabase db = mDBHelper.getWritableDatabase();
try {
return db.update(TBL_NAME, values, whereClause, whereArgs);
} finally {
db.close();
}
}
/**
* Delete the device in the database.
* @param device device
* @return the number of rows deleted, 0 otherwise
*/
public synchronized int removeHitoeDevice(final HitoeDevice device) {
String whereClause = COL_ID + "=?";
String[] whereArgs = {
device.getId()
};
SQLiteDatabase db = mDBHelper.getWritableDatabase();
try {
return db.delete(TBL_NAME, whereClause, whereArgs);
} finally {
db.close();
}
}
/**
* Get a list of device in the database.
* @return a list of device
*/
public synchronized List<HitoeDevice> getHitoeDevices(final String id) {
String sql = "SELECT * FROM " + TBL_NAME;
String[] selectionArgs = {};
if (id != null) {
sql += " WHERE " + COL_ID + "='" + id + "' ";
}
SQLiteDatabase db = mDBHelper.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, selectionArgs);
List<HitoeDevice> devices = new ArrayList<>();
boolean next = cursor.moveToFirst();
while (next) {
HitoeDevice device = new HitoeDevice(null);
device.setType(cursor.getString(cursor.getColumnIndex(COL_TYPE)));
device.setName(cursor.getString(cursor.getColumnIndex(COL_NAME)));
device.setId(cursor.getString(cursor.getColumnIndex(COL_ID)));
device.setConnectMode(cursor.getString(cursor.getColumnIndex(COL_CONNECT_MODE)));
device.setPinCode(cursor.getString(cursor.getColumnIndex(COL_PIN_CODE)));
device.setRegisterFlag(cursor.getInt(cursor.getColumnIndex(COL_REGISTER_FLAG)) == 1);
devices.add(device);
next = cursor.moveToNext();
}
return devices;
}
/**
* SQL DB Helper.
*/
private static class DBHelper extends SQLiteOpenHelper {
/**
* Constructor.
* @param context Context
*/
public DBHelper(final 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);
}
/**
* Create DB's sql.
* @param db DB
*/
private void createDB(final SQLiteDatabase db) {
String sql = "CREATE TABLE " + TBL_NAME + " ("
+ BaseColumns._ID + " INTEGER PRIMARY KEY, "
+ COL_TYPE + " TEXT, "
+ COL_NAME + " TEXT, "
+ COL_ID + " TEXT, "
+ COL_CONNECT_MODE + " TEXT, "
+ COL_PIN_CODE + " TEXT, "
+ COL_REGISTER_FLAG + " INTEGER"
+ ");";
db.execSQL(sql);
}
}
}