/*
* Copyright (C) 2013-2014 Sony Computer Science Laboratories, Inc. All Rights Reserved.
* Copyright (C) 2014 Sony Corporation. All Rights Reserved.
*/
package com.sonycsl.Kadecot.utils;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.Map;
import java.util.Set;
public class DatabaseOpenHelper extends SQLiteOpenHelper {
public static final String DATA_TYPE_INTEGER = "INTEGER";
public static final String DATA_TYPE_TEXT = "TEXT";
public static final String DATA_TYPE_BLOB = "BLOB";
public static final String OPTION_PRIMARY_KEY_AUTOINCREMENT = " PRIMARY KEY AUTOINCREMENT";
public static final String OPTION_NOT_NULL = " NOT NULL";
public String mTableName;
public Map<String, String> mColumnMap;
public String[] mColumnNames;
public DatabaseOpenHelper(Context context, String dbName, int version, String tableName,
Map<String, String> columns) {
super(context, dbName, null, version);
setup(tableName, columns);
}
@Override
public void onCreate(SQLiteDatabase db) {
createTable(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
protected void setup(String tableName, Map<String, String> columns) {
mTableName = tableName;
mColumnMap = columns;
Set<String> keySet = mColumnMap.keySet();
mColumnNames = new String[keySet.size()];
int i = 0;
for (String key : keySet) {
mColumnNames[i] = key;
i++;
}
}
public void createTable(SQLiteDatabase db) {
StringBuffer buffer = new StringBuffer();
buffer.append("CREATE TABLE ");
buffer.append(mTableName);
buffer.append(" ( ");
Set<String> keySet = mColumnMap.keySet();
int size = keySet.size();
int i = 0;
for (String key : keySet) {
buffer.append(key);
buffer.append(" ");
buffer.append(mColumnMap.get(key));
i++;
if (i == size) {
buffer.append(")");
} else {
buffer.append(", ");
}
}
String sql = new String(buffer);
// System.out.println(sql);
db.execSQL(sql);
}
public long insert(ContentValues values) {
SQLiteDatabase db = getWritableDatabase();
long ret = db.insert(mTableName, null, values);
return ret;
}
public void update(String key, String arg, ContentValues values) {
SQLiteDatabase db = getWritableDatabase();
db.update(mTableName, values, key + "=?", new String[] {
arg
});
}
public void update(Where where, ContentValues values) {
SQLiteDatabase db = getWritableDatabase();
db.update(mTableName, values, where.getClause(), where.args);
}
public void delete(String key, String arg) {
SQLiteDatabase db = getWritableDatabase();
db.delete(mTableName, key + "=?", new String[] {
arg
});
}
public void delete(Where where) {
if (!where.isValid()) {
return;
}
SQLiteDatabase db = getWritableDatabase();
db.delete(mTableName, where.getClause(), where.args);
}
public void deleteAll() {
SQLiteDatabase db = getWritableDatabase();
db.delete(mTableName, null, null);
}
public Cursor getCursorByRowId(long rowid) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(mTableName, mColumnNames, "rowid=?", new String[] {
Long.toString(rowid)
}, null, null, null);
cursor.moveToFirst();
return cursor;
}
public Cursor getCursor() {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(mTableName, mColumnNames, null, null, null, null, null);
cursor.moveToFirst();
return cursor;
}
public Cursor getCursor(String key, String arg) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(mTableName, mColumnNames, key + "=?", new String[] {
arg
}, null, null, null);
cursor.moveToFirst();
return cursor;
}
public Cursor getCursor(Where where) {
if (!where.isValid()) {
return null;
}
SQLiteDatabase db = getReadableDatabase();
Cursor cursor =
db.query(mTableName, mColumnNames, where.getClause(), where.args, null, null, null);
cursor.moveToFirst();
return cursor;
}
public Cursor getCursor(OrderBy orderBy) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor =
db.query(mTableName, mColumnNames, null, null, null, null, orderBy.getClause());
cursor.moveToFirst();
return cursor;
}
public Cursor getCursor(Where where, OrderBy orderBy) {
if (!where.isValid()) {
return null;
}
if (!orderBy.isValid()) {
return null;
}
SQLiteDatabase db = getReadableDatabase();
Cursor cursor =
db.query(mTableName, mColumnNames, where.getClause(), where.args, null, null,
orderBy
.getClause());
cursor.moveToFirst();
return cursor;
}
public String getString(Cursor cursor, String columnName) {
if (cursor == null) {
return null;
}
int columnIndex = cursor.getColumnIndex(columnName);
if (cursor.isNull(columnIndex)) {
return null;
}
return cursor.getString(columnIndex);
}
public Short getShort(Cursor cursor, String columnName) {
if (cursor == null) {
return null;
}
int columnIndex = cursor.getColumnIndex(columnName);
if (cursor.isNull(columnIndex)) {
return null;
}
return cursor.getShort(columnIndex);
}
public Integer getInt(Cursor cursor, String columnName) {
if (cursor == null) {
return null;
}
int columnIndex = cursor.getColumnIndex(columnName);
if (cursor.isNull(columnIndex)) {
return null;
}
return cursor.getInt(columnIndex);
}
public Long getLong(Cursor cursor, String columnName) {
if (cursor == null) {
return null;
}
int columnIndex = cursor.getColumnIndex(columnName);
if (cursor.isNull(columnIndex)) {
return null;
}
return cursor.getLong(columnIndex);
}
public synchronized byte[] getBlob(Cursor cursor, String columnName) {
if (cursor == null) {
return null;
}
int columnIndex = cursor.getColumnIndex(columnName);
if (cursor.isNull(columnIndex)) {
return null;
}
return cursor.getBlob(columnIndex);
}
public synchronized boolean contains(String key, String arg) {
Cursor cursor = this.getCursor(key, arg);
boolean ret = (cursor.getCount() != 0);
cursor.close();
return ret;
}
public synchronized boolean contains(Where where) {
Cursor cursor = this.getCursor(where);
boolean ret = (cursor.getCount() != 0);
cursor.close();
return ret;
}
public static class Where {
public final String[] keys;
public final String[] args;
public Where(String key, String arg) {
this.keys = new String[] {
key
};
this.args = new String[] {
arg
};
}
public Where(String[] keys, String[] args) {
this.keys = keys;
this.args = args;
}
public String getClause() {
String clause = "";
for (int i = 0; i < keys.length; i++) {
clause += keys[i] + "=?";
if (i != keys.length - 1) {
clause += " and ";
}
}
return clause;
}
public boolean isValid() {
return keys.length == args.length;
}
}
public static class OrderBy {
public final String[] keys;
public final String[] orders;
public static final String ASC = "asc";
public static final String DESC = "desc";
public OrderBy(String key, String order) {
this.keys = new String[] {
key
};
this.orders = new String[] {
order
};
}
public OrderBy(String[] keys, String[] orders) {
this.keys = keys;
this.orders = orders;
}
public boolean isValid() {
return keys.length == orders.length;
}
public String getClause() {
String clause = "";
for (int i = 0; i < keys.length; i++) {
clause += keys[i] + " " + orders[i];
if (i != keys.length - 1) {
clause += ",";
}
}
return clause;
}
}
}