package com.openfarmanager.android.core.dbadapters;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import com.openfarmanager.android.App;
import com.openfarmanager.android.core.DataStorageHelper;
import com.openfarmanager.android.model.Bookmark;
import com.openfarmanager.android.model.NetworkAccount;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import static com.openfarmanager.android.core.dbadapters.NetworkAccountDbAdapter.Columns.*;
/**
* @author Vlad Namashko
*/
public class NetworkAccountDbAdapter {
public static final String TABLE_NAME = "network_accounts";
public static final class Columns {
public static final String ID = "id";
public static final String USER_NAME = "user_name";
public static final String NETWORK_TYPE = "newtork_type";
public static final String AUTH_DATA = "auth_data";
public static final String HOME_PATH = "home_path";
}
public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " ("
+ ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ USER_NAME + " TEXT not null,"
+ NETWORK_TYPE + " INTEGER not null,"
+ AUTH_DATA + " TEXT not null,"
+ HOME_PATH + " TEXT"
+ ");";
public static Cursor getAccountById(long id) {
SQLiteDatabase db = DataStorageHelper.getDatabase();
if(db == null) return null;
try {
return db.query(TABLE_NAME, null, ID + "=" + id, null, null, null, null);
} catch(Exception e) {
e.printStackTrace();
DataStorageHelper.closeDatabase();
return null;
}
}
public static Cursor getAccounts(int type) {
SQLiteDatabase db = DataStorageHelper.getDatabase();
if(db == null) return null;
try {
return db.query(TABLE_NAME, null, NETWORK_TYPE + "=" + type, null, null, null, null);
} catch(Exception e) {
e.printStackTrace();
DataStorageHelper.closeDatabase();
return null;
}
}
public static long insert(String userName, int networkType, String authData) throws SQLiteException {
long defaultValue = -1;
ContentValues values = new ContentValues();
values.put(USER_NAME, userName);
values.put(NETWORK_TYPE, networkType);
values.put(AUTH_DATA, authData);
SQLiteDatabase db = DataStorageHelper.getDatabase();
if(db == null) return defaultValue;
try {
return db.insert(TABLE_NAME, null, values);
} catch(Exception e) {
if (e instanceof SQLiteException) throw (SQLiteException) e;
e.printStackTrace();
return defaultValue;
} finally {
DataStorageHelper.closeDatabase();
}
}
public static int count(int type) {
SQLiteDatabase db = DataStorageHelper.getDatabase();
int defaultValue = 0;
if(db == null) return defaultValue;
Cursor cursor = null;
try {
cursor = db.rawQuery("SELECT COUNT(1) FROM " + TABLE_NAME + " WHERE " + NETWORK_TYPE + "=" + type, null);
return (cursor == null || !cursor.moveToFirst()) ?
defaultValue : cursor.getInt(0);
} catch(Exception e) {
e.printStackTrace();
return defaultValue;
} finally {
if(cursor != null) {
cursor.close();
}
DataStorageHelper.closeDatabase();
}
}
public static void delete(long id) {
SQLiteDatabase db = DataStorageHelper.getDatabase();
if(db == null) return;
try {
db.delete(TABLE_NAME, "ROWID=" + id, null);
} catch(Exception e) {
e.printStackTrace();
} finally {
DataStorageHelper.closeDatabase();
}
}
public static NetworkAccount loadAccountById(long id) {
Cursor cursor = getAccountById(id);
if (cursor == null) {
return null;
}
try {
int idxId = cursor.getColumnIndex(Columns.ID);
int idxUserName = cursor.getColumnIndex(Columns.USER_NAME);
int idxAuthData = cursor.getColumnIndex(Columns.AUTH_DATA);
int idxNetworkType = cursor.getColumnIndex(Columns.NETWORK_TYPE);
while (cursor.moveToNext()) {
long accountId = cursor.getLong(idxId);
String user = cursor.getString(idxUserName);
String authData = cursor.getString(idxAuthData);
int networkType = cursor.getInt(idxNetworkType);
try {
return App.sInstance.getNetworkAccountManager().createNetworkAccount(accountId, user, authData, networkType);
} catch (Exception e) {
e.printStackTrace();
}
}
} finally {
cursor.close();
DataStorageHelper.closeDatabase();
}
return null;
}
}