package com.jobmineplus.mobile.database.users; import java.util.ArrayList; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.util.Pair; import com.jobmineplus.mobile.database.DataSourceBase; public class UserDataSource extends DataSourceBase{ // Database fields private UserDatabaseHelper dbHelper; public UserDataSource(Context context) { dbHelper = new UserDatabaseHelper(context); } //========================= // Override Methods //========================= @Override public void open() { database = dbHelper.getWritableDatabase(); } @Override public void close() { dbHelper.close(); } //========================= // Insertions //========================= public synchronized long putUser(String username, String password, Boolean isLastUser) { return internalPutUser(username, password, isLastUser); } public synchronized long putUser(String username, String password) { return internalPutUser(username, password, false); } public synchronized void clearLastUser() { Cursor cursor = database.rawQuery(String.format("update %s set %s = null", UserTable.TABLE_USER, UserTable.COLUMN_LAST_USER), null); if (cursor != null) { cursor.moveToFirst(); } else { return; } cursor.close(); } //========================= // Accessors //========================= public synchronized boolean checkCredentials (String username, String password) { if (username == "" || password == "") { return false; } // Check if there is a row with that username and password, if it exists, then // credentials are correct Cursor cursor = database.rawQuery(String.format( "select * from %s where %s='%s' and %s='%s'", UserTable.TABLE_USER, UserTable.COLUMN_USERNAME, username, UserTable.COLUMN_PASSWORD, password), null); if (cursor != null) { cursor.moveToFirst(); } else { return false; } boolean correct = !cursor.isAfterLast(); cursor.close(); return correct; } // TODO when implement logout, please mark the last user to false (0) public synchronized Pair<String, String> getLastUser() { Cursor cursor = database.rawQuery(String.format( "select %s, %s from %s where %s='%s'", UserTable.COLUMN_USERNAME, UserTable.COLUMN_PASSWORD, UserTable.TABLE_USER, UserTable.COLUMN_LAST_USER, 1), null); if (cursor != null) { cursor.moveToFirst(); } else { return null; } if (cursor.getCount() == 0) { cursor.close(); return null; } Pair<String, String> p = new Pair<String, String>(cursor.getString(0), cursor.getString(1)); cursor.close(); return p; } //========================= // Private Methods //========================= private long internalPutUser(String username, String password, Boolean isLastUser) { ContentValues values = new ContentValues(); addNonNullValue(values, UserTable.COLUMN_USERNAME, username); addNonNullValue(values, UserTable.COLUMN_PASSWORD, password); if (isLastUser) { addNonNullValue(values, UserTable.COLUMN_LAST_USER, 1); } // Where statement ArrayList<Pair<String, Object>> where = new ArrayList<Pair<String,Object>>(); where.add(new Pair<String, Object>(UserTable.COLUMN_USERNAME, username)); return updateElseInsert(UserTable.TABLE_USER, where, values); } }