package com.openerp.orm;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.openerp.base.ir.Ir_AttachmentDBHelper;
import com.openerp.base.ir.Ir_model;
import com.openerp.base.mail.MailFollowers;
import com.openerp.base.res.ResCompanyDB;
import com.openerp.base.res.ResPartnerDB;
import com.openerp.config.ModulesConfig;
import com.openerp.support.Module;
import com.openerp.support.fragment.FragmentHelper;
import java.util.ArrayList;
import java.util.List;
public class OESQLiteHelper extends SQLiteOpenHelper {
public static final String TAG = OESQLiteHelper.class.getSimpleName();
public static final String DATABASE_NAME = "OpenERPSQLite.db";
public static final int DATABASE_VERSION = 2;
Context mContext = null;
ModulesConfig mModuleConfig = null;
List<String> mDBTables = new ArrayList<String>();
public OESQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mContext = context;
mModuleConfig = new ModulesConfig();
}
public List<OEDBHelper> baseModels() {
List<OEDBHelper> baseModels = new ArrayList<OEDBHelper>();
baseModels.add(new ResPartnerDB(mContext));
baseModels.add(new ResCompanyDB(mContext));
//baseModels.add(new Ir_model(mContext));
//baseModels.add(new Ir_AttachmentDBHelper(mContext));
//baseModels.add(new MailFollowers(mContext));
return baseModels;
}
@Override
public void onCreate(SQLiteDatabase db) {
SQLHelper sqlHelper = new SQLHelper();
for (OEDBHelper db_helper : baseModels()) {
List<String> sqlQueries = sqlHelper.createTable(db_helper);
for (String query : sqlQueries) {
db.execSQL(query);
}
}
for (Module module : mModuleConfig.modules()) {
FragmentHelper model = (FragmentHelper) module.getModuleInstance();
OEDBHelper model_db = (OEDBHelper) model.databaseHelper(mContext);
List<String> sqlQueries = sqlHelper.createTable(model_db);
for (String query : sqlQueries) {
db.execSQL(query);
}
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
SQLHelper sqlHelper = new SQLHelper();
for (Module module : mModuleConfig.modules()) {
FragmentHelper model = (FragmentHelper) module.getModuleInstance();
OEDBHelper model_db = (OEDBHelper) model.databaseHelper(mContext);
List<String> sqlQueries = sqlHelper.dropTable(model_db);
for (String query : sqlQueries) {
db.execSQL(query);
}
}
}
private void setDBTables() {
SQLiteDatabase db = getReadableDatabase();
Cursor cr = db.query("sqlite_master", new String[]{"name"},
"type = ?", new String[]{"table"}, null, null, null);
if (cr.moveToFirst()) {
do {
String table = cr.getString(0);
if (!table.equals("android_metadata")
&& !table.equals("sqlite_sequence")) {
mDBTables.add(table);
}
} while (cr.moveToNext());
}
cr.close();
db.close();
}
public boolean hasTable(String table_or_model) {
if (mDBTables.size() == 0)
setDBTables();
String table = table_or_model;
if (table_or_model.contains(".")) {
table = table_or_model.replaceAll("\\.", "_");
}
if (mDBTables.contains(table)) {
return true;
}
return false;
}
public boolean cleanUserRecords(String account_name) {
Log.d(TAG, "cleanUserRecords()");
if (mDBTables.size() == 0)
setDBTables();
SQLiteDatabase db = getWritableDatabase();
for (String table : mDBTables) {
int total = 0;
total = db.delete(table, "oea_name = ?",
new String[]{account_name});
Log.v(TAG, total + " cleaned from " + table);
}
db.close();
Log.i(TAG, account_name + " records cleaned");
return true;
}
}