package org.sechat.app.adapter;
/**
* Copyright (c) 2014 Sechat GbR <support@sechat.org>
*
* You should have received a copy of the MIT License
* along with this program (license.txt).
* If not, see <http://sechat.github.io/license.txt>.
*/
import java.io.IOException;
import java.sql.Timestamp;
import java.util.LinkedList;
import org.sechat.app.Contact;
import org.sechat.app.Discussion;
import org.sechat.app.ThreadHelper;
import org.sechat.app.sql.DataBaseHelper;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.CursorIndexOutOfBoundsException;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
public class DataBaseAdapter {
private static ThreadHelper th = new ThreadHelper();
private final Context mContext;
private DataBaseHelper mDbHelper;
String TAG = this.getClass().getName();
public DataBaseAdapter(Context context) {
this.mContext = context;
mDbHelper = new DataBaseHelper(mContext);
}
public DataBaseAdapter createDatabase() throws SQLException {
try {
mDbHelper.createDataBase();
mDbHelper.openDataBase();
mDbHelper.close();
} catch (IOException e) {
Log.e(TAG, e.toString(), e);
return null;
}
return this;
}
public void close() {
mDbHelper.close();
}
public String getPassword() {
SQLiteDatabase db = mDbHelper.getReadableDatabase();
Cursor cursor = db.query(ThreadHelper.DB_USER_TABLE, new String[] { ThreadHelper.DB_PASSWORD },
ThreadHelper.DB_ID + "=?", new String[] { "0" }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
try {
return cursor.getString(0);
} catch (CursorIndexOutOfBoundsException e) {
if (th.D) Log.d(TAG, e.getMessage());
}
return null;
}
public String getName() {
SQLiteDatabase db = mDbHelper.getReadableDatabase();
Cursor cursor = db.query(ThreadHelper.DB_USER_TABLE, new String[] { ThreadHelper.DB_NAME },
ThreadHelper.DB_ID + "=?", new String[] { "0" }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
try {
return cursor.getString(0);
} catch (CursorIndexOutOfBoundsException e) {
if (th.D) Log.d(TAG, e.getMessage());
}
return null;
}
public void addContact(Contact contact) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
if (contact.getID() != -1)
values.put(ThreadHelper.DB_ID, contact.getID());
values.put(ThreadHelper.DB_NAME, contact.getName());
values.put(ThreadHelper.DB_PASSWORD, contact.getPass());
values.put(ThreadHelper.DB_PRIVATE, contact.getPriv());
values.put(ThreadHelper.DB_PUBLIC, contact.getPub());
db.insert(ThreadHelper.DB_USER_TABLE, null, values);
db.close();
}
public void addMessage(String jid, String message, Boolean me) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ThreadHelper.DB_NAME, jid);
values.put(ThreadHelper.DB_MESSAGE, message);
values.put(ThreadHelper.DB_ME, String.valueOf(me));
db.insert(ThreadHelper.DB_HISTORY_TABLE, null, values);
db.close();
}
public LinkedList<Discussion> getMessagesFrom(String jid) {
SQLiteDatabase db = mDbHelper.getReadableDatabase();
LinkedList<Discussion> list = new LinkedList<Discussion>();
String selectQuery = "SELECT "+ThreadHelper.DB_DATE+", "+
ThreadHelper.DB_MESSAGE+", "+ThreadHelper.DB_ME+
" FROM "+ThreadHelper.DB_HISTORY_TABLE+
" WHERE "+ThreadHelper.DB_NAME+" LIKE '"+jid+"'";
try {
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToPosition(0)) {
do {list.add(
new Discussion(
Timestamp.valueOf(cursor.getString(0)),
cursor.getString(1),
Boolean.valueOf(cursor.getString(2))
));
} while (cursor.moveToNext());
}
} catch (NullPointerException e) {
// no results found
return new LinkedList<Discussion>();
}
return list;
}
public void update(Contact contact) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ThreadHelper.DB_NAME, contact.getName());
values.put(ThreadHelper.DB_PASSWORD, contact.getPass());
values.put(ThreadHelper.DB_PRIVATE, contact.getPriv());
values.put(ThreadHelper.DB_PUBLIC, contact.getPub());
db.update(ThreadHelper.DB_USER_TABLE, values, ThreadHelper.DB_NAME + "=?",
new String []{ contact.getName() });
db.close();
}
public boolean issetUser() {
SQLiteDatabase db = mDbHelper.getReadableDatabase();
try {
Cursor cursor = db.query(ThreadHelper.DB_USER_TABLE, new String[] { ThreadHelper.DB_NAME },
ThreadHelper.DB_ID + "=?", new String[] { "0" }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
cursor.getString(0);
return true;
} catch (CursorIndexOutOfBoundsException e) {
if (th.D) Log.d(TAG, e.getMessage());
}
return false;
}
public String getPublicKey() {
String result = null;
SQLiteDatabase db = mDbHelper.getReadableDatabase();
Cursor cursor = db.query(ThreadHelper.DB_USER_TABLE, new String[] { ThreadHelper.DB_PUBLIC },
ThreadHelper.DB_ID + "=?", new String[] { "0" }, null, null, null, null);
try {
if (cursor != null)
cursor.moveToFirst();
result = cursor.getString(0);
} catch (CursorIndexOutOfBoundsException e) {
if (th.D) Log.d(TAG, e.getMessage());
}
return result;
}
public String getPrivateKey() {
String result = null;
SQLiteDatabase db = mDbHelper.getReadableDatabase();
Cursor cursor = db.query(ThreadHelper.DB_USER_TABLE, new String[] { ThreadHelper.DB_PRIVATE },
ThreadHelper.DB_ID + "=?", new String[] { "0" }, null, null, null, null);
try {
if (cursor != null)
cursor.moveToFirst();
result = cursor.getString(0);
} catch (CursorIndexOutOfBoundsException e) {
if (th.D) Log.d(TAG, e.getMessage());
}
return result;
}
}