package com.jparkie.aizoban.controllers.databases; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import com.jparkie.aizoban.AizobanApplication; import com.jparkie.aizoban.models.Manga; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import nl.qbusict.cupboard.Cupboard; import nl.qbusict.cupboard.CupboardBuilder; public class LibrarySQLiteOpenHelper extends SQLiteOpenHelper { private static LibrarySQLiteOpenHelper sInstance; public LibrarySQLiteOpenHelper(Context context) { super(context, LibraryContract.DATABASE_NAME, null, LibraryContract.DATABASE_VERSION); initializeLibraryDatabase(); } public static synchronized LibrarySQLiteOpenHelper getInstance() { if (sInstance == null) { sInstance = new LibrarySQLiteOpenHelper(AizobanApplication.getInstance()); } return sInstance; } @Override public void onCreate(SQLiteDatabase db) { Cupboard libraryCupboard = constructCustomCupboard(); libraryCupboard.withDatabase(db).createTables(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Do Nothing. } private Cupboard constructCustomCupboard() { Cupboard customCupboard = new CupboardBuilder().build(); customCupboard.register(Manga.class); return customCupboard; } private void initializeLibraryDatabase() { final File libraryDatabasePath = AizobanApplication.getInstance().getDatabasePath(LibraryContract.DATABASE_NAME); if (libraryDatabasePath.exists()){ SQLiteDatabase libraryDatabase = SQLiteDatabase.openDatabase(libraryDatabasePath.getPath(), null, 0); int currentVersion = libraryDatabase.getVersion(); libraryDatabase.close(); libraryDatabase = null; if (currentVersion == LibraryContract.DATABASE_VERSION) { return; } } final File parentPath = libraryDatabasePath.getParentFile(); if (parentPath.exists()) { String[] databaseList = AizobanApplication.getInstance().databaseList(); for (String databaseName : databaseList) { if (!databaseName.contains(ApplicationContract.DATABASE_NAME)) { AizobanApplication.getInstance().deleteDatabase(databaseName); } } } else { parentPath.mkdirs(); } if (parentPath.exists()) { InputStream inputStream = null; OutputStream outputStream = null; try { inputStream = AizobanApplication.getInstance().getAssets().open(LibraryContract.DATABASE_NAME); outputStream = new FileOutputStream(libraryDatabasePath); byte[] fileBuffer = new byte[8192]; for (int counter = 0; counter != -1; counter = inputStream.read(fileBuffer, 0, 8192)) { outputStream.write(fileBuffer, 0, counter); } outputStream.flush(); } catch (IOException e) { // Do Nothing. } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { // Do Nothing. } } if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { // Do Nothing. } } } } } }