package com.liato.bankdroid.db;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import net.sf.andhsli.hotspotlogin.SimpleCrypto;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.liato.bankdroid.banking.Account;
import com.liato.bankdroid.banking.Bank;
import com.liato.bankdroid.banking.Transaction;
static final String TAG = "DBAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
static final String DATABASE_NAME = "data";
static final int DATABASE_VERSION = 10;
private final Context mCtx;
this.mCtx = ctx;
}
public DBAdapter
open()
throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
mDbHelper.close();
mDb.close();
}
return updateBank(bank);
}
int c = mDb.delete("banks", "_id=" + bankId, null);
c += this.deleteAccounts(bankId);
return c;
}
int c = mDb.delete("accounts", "bankid=" + bankId, null);
return c;
}
int c = mDb.delete("transactions", "account='" + account + "'", null);
return c;
}
return mDb.query("banks", new String[] {"_id", "balance", "banktype", "username", "password", "disabled", "custname", "updated", "sortorder", "currency", "extras"}, null, null, null, null, "_id asc");
}
return mDb.query("accounts", new String[] {"bankid", "balance", "name", "id", "acctype", "hidden", "notify", "currency", "aliasfor"}, "bankid="+bankId, null, null, null, null);
}
return mDb.query("transactions", new String[] {"transdate", "btransaction", "amount", "currency"}, "account='"+account+"'", null, null, null, null);
}
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ContentValues initialValues = new ContentValues();
initialValues.put("banktype", bank.getBanktypeId());
initialValues.put("username", bank.getUsername());
String password = "";
try {
password = SimpleCrypto.encrypt(Crypto.getKey(), bank.getPassword());
} catch (Exception e) {
Log.w(TAG, "SimpleCrypto error: "+e.getMessage());
}
initialValues.put("password", password);
initialValues.put("disabled", 0);
initialValues.put("balance", bank.getBalance().toPlainString());
initialValues.put("currency", bank.getCurrency());
initialValues.put("custname", bank.getCustomName());
initialValues.put("extras", bank.getExtras());
initialValues.put("updated", sdf.format(cal.getTime()));
long bankId = bank.getDbId();
if (bankId == -1) {
bankId = mDb.insert("banks", null, initialValues);
}
else {
mDb.update("banks", initialValues, "_id="+bankId, null);
deleteAccounts(bankId);
}
if (bankId != -1) {
ArrayList<Account> accounts = bank.getAccounts();
for(Account acc : accounts) {
ContentValues vals = new ContentValues();
vals.put("bankid", bankId);
vals.put("balance", acc.getBalance().toPlainString());
vals.put("name", acc.getName());
vals.put("id", new Long(bankId).toString()+"_"+acc.getId());
vals.put("hidden", acc.isHidden() ? 1 : 0);
vals.put("notify", acc.isNotify() ? 1 : 0);
vals.put("currency", acc.getCurrency());
vals.put("acctype", acc.getType());
vals.put("aliasfor", acc.getAliasfor());
mDb.insert("accounts", null, vals);
if (acc.getAliasfor() == null || acc.getAliasfor().length() == 0) {
ArrayList<Transaction> transactions = acc.getTransactions();
if (transactions != null && !transactions.isEmpty()) {
deleteTransactions(new Long(bankId).toString()+"_"+acc.getId());
for(Transaction transaction : transactions) {
ContentValues transvals = new ContentValues();
transvals.put("transdate", transaction.getDate());
transvals.put("btransaction", transaction.getTransaction());
transvals.put("amount", transaction.getAmount().toPlainString());
transvals.put("account", new Long(bankId).toString()+"_"+acc.getId());
transvals.put("currency", transaction.getCurrency());
mDb.insert("transactions", null, transvals);
}
}
}
}
}
return bankId;
}
if (bankId == -1) return;
ContentValues initialValues = new ContentValues();
initialValues.put("disabled", 1);
mDb.update("banks", initialValues, "_id="+bankId, null);
}
public Cursor
getBank(String bankId) {
Cursor c = mDb.query("banks", new String[] {"_id", "balance", "banktype", "username", "password", "disabled", "custname", "updated", "sortorder", "currency", "extras"}, "_id="+bankId, null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
public Cursor
getBank(
long bankId) {
return getBank(new Long(bankId).toString());
}
Cursor c = mDb.query("accounts", new String[] {"id", "balance", "name", "bankid", "acctype", "hidden", "notify", "currency", "aliasfor"}, "id='"+id+"'", null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
}