package id.ac.itats.skripsi.databuilder; import id.ac.itats.skripsi.astarku.RoutingEngine; import id.ac.itats.skripsi.orm.DaoMaster; import id.ac.itats.skripsi.orm.DaoMaster.DevOpenHelper; import id.ac.itats.skripsi.orm.DaoSession; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.util.Log; public class DataBaseHelper { private static String TAG = "DataBaseHelper"; private static DataBaseHelper instance; private static String DB_NAME = "graphdb"; private static String DB_PATH = ""; private static SQLiteDatabase dataBase; private Context context = RoutingEngine.getAppContext(); private static DevOpenHelper openHelper; private DaoMaster daoMaster; private DataBaseHelper() { prepareConnection(); } public static synchronized DataBaseHelper getInstance() { if (instance == null) { instance = new DataBaseHelper(); } return instance; } private void prepareConnection() { // prepareDatabase DB_PATH = context.getApplicationInfo().dataDir + "/databases/"; openHelper = new DevOpenHelper(context, DB_NAME, null); boolean databaseExist = checkDataBase(); if (!databaseExist) { openHelper.getReadableDatabase(); openHelper.close(); try { // copyDatabase copyDatabase(); Log.i(TAG, "Database connected"); } catch (IOException e) { throw new Error("Database connection failure !", e); } } dataBase = openHelper.getReadableDatabase(); daoMaster = new DaoMaster(dataBase); } private void copyDatabase() throws IOException{ InputStream mInput = context.getAssets().open(DB_NAME); String outFileName = DB_PATH + DB_NAME; OutputStream mOutput = new FileOutputStream(outFileName); byte[] mBuffer = new byte[1024]; int mLength; while ((mLength = mInput.read(mBuffer)) > 0) { mOutput.write(mBuffer, 0, mLength); } mOutput.flush(); mOutput.close(); mInput.close(); } private boolean checkDataBase() { File dbFile = new File(DB_PATH + DB_NAME); return dbFile.exists(); } public DaoSession openSession() { return daoMaster.newSession(); } public static void closeSession() { if (dataBase != null) dataBase.close(); openHelper.close(); } }