// Path: DataAccessLayer/dal/src/main/java/com/erc/dal/SQLiteDatabaseManager.java
// public class SQLiteDatabaseManager extends SQLiteOpenHelper {
// 
//     private static Map<String, UpgradeListener> upgradeableMap = new HashMap<>();
//     private static SQLiteDatabaseManager sqLiteDatabaseManager;
//     private Context context;
//     private DBConfig dbConfig;
// 
//     private SQLiteDatabaseManager(DBConfig dbConfigs) {
//         super(dbConfigs.getContext(), dbConfigs.getDataBaseName(), null, dbConfigs.getVersion());
//         this.dbConfig = dbConfigs;
//     }
// 
//     @Override
//     public void onCreate(SQLiteDatabase db) {
//     }
// 
//     @Override
//     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//     }
// 
//     private static SQLiteDatabaseManager getInstance(DBConfig dbConfig) {
//         if (sqLiteDatabaseManager == null) {
//             sqLiteDatabaseManager = new SQLiteDatabaseManager(dbConfig);
//         }
//         return sqLiteDatabaseManager;
//     }
// 
//     public static SQLiteDatabase open(DBConfig dbConfig) {
//         SQLiteDatabase db = null;
//         try {
//             if (Util.isNullOrEmpty(dbConfig.getUrl())) {
//                 db = getInstance(dbConfig).getWritableDatabase();
//                 db.setLockingEnabled(false);
//             } else {
//                 db = SQLiteDatabase.openDatabase(getFullDatabaseName(dbConfig), null, SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
//             }
//             if (CreatorHelper.createTables(dbConfig, db)) {
//                 return open(dbConfig);
//             }
//             UpgradeHelper.verifyUpgrade(dbConfig, db);
//         } catch (Exception e) {
//             Log.e("Opening database", e);
//         }
//         return db;
//     }
// 
//     public static SQLiteDatabase openReadOnly(DBConfig dbConfig) {
//         SQLiteDatabase db = null;
//         try {
//             if (Util.isNullOrEmpty(dbConfig.getUrl())) {
//                 db = getInstance(dbConfig).getReadableDatabase();
//                 db.setLockingEnabled(false);
//             } else {
//                 db = SQLiteDatabase.openDatabase(getFullDatabaseName(dbConfig), null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
//             }
//             if (CreatorHelper.createTables(dbConfig, db)) {
//                 return openReadOnly(dbConfig);
//             }
//             UpgradeHelper.verifyUpgrade(dbConfig, db);
//         } catch (Exception e) {
//             Log.e("Opening database", e);
//         }
//         return db;
//     }
// 
//     public static void closeDb() {
//         try {
//             if (sqLiteDatabaseManager != null) {
//                 sqLiteDatabaseManager.close();
//             }
//         } catch (Exception e) {
//             Log.e("Closing data base", e);
//         }
//     }
// 
//     public static String getDataBaseName(Context context) {
//         String dataBaseName = RegEx.match(context.getPackageName(), RegEx.PATTERN_EXTENSION);
//         dataBaseName = dataBaseName.replace(".", "");
//         return dataBaseName;
//     }
// 
//     private static String getFullDatabaseName(DBConfig dbConfig) {
//         return dbConfig.getUrl() + "/" + dbConfig.getDataBaseName();
//     }
// }


import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.erc.dal.SQLiteDatabaseManager;
package com.erc.dal.upgrade;



public class UpgradeHelper {

    public static void verifyUpgrade(DBConfig dbConfig, SQLiteDatabase db) {
        if (dbConfig.getUpgradeListener() != null) {
            int currentVersion = UpgradeHelper.getCurrentVersion(db, dbConfig);

            if (dbConfig.getVersion() != currentVersion) {
                if (db.isReadOnly()) {
// Path: DataAccessLayer/dal/src/main/java/com/erc/dal/SQLiteDatabaseManager.java
// public class SQLiteDatabaseManager extends SQLiteOpenHelper {
// 
//     private static Map<String, UpgradeListener> upgradeableMap = new HashMap<>();
//     private static SQLiteDatabaseManager sqLiteDatabaseManager;
//     private Context context;
//     private DBConfig dbConfig;
// 
//     private SQLiteDatabaseManager(DBConfig dbConfigs) {
//         super(dbConfigs.getContext(), dbConfigs.getDataBaseName(), null, dbConfigs.getVersion());
//         this.dbConfig = dbConfigs;
//     }
// 
//     @Override
//     public void onCreate(SQLiteDatabase db) {
//     }
// 
//     @Override
//     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//     }
// 
//     private static SQLiteDatabaseManager getInstance(DBConfig dbConfig) {
//         if (sqLiteDatabaseManager == null) {
//             sqLiteDatabaseManager = new SQLiteDatabaseManager(dbConfig);
//         }
//         return sqLiteDatabaseManager;
//     }
// 
//     public static SQLiteDatabase open(DBConfig dbConfig) {
//         SQLiteDatabase db = null;
//         try {
//             if (Util.isNullOrEmpty(dbConfig.getUrl())) {
//                 db = getInstance(dbConfig).getWritableDatabase();
//                 db.setLockingEnabled(false);
//             } else {
//                 db = SQLiteDatabase.openDatabase(getFullDatabaseName(dbConfig), null, SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
//             }
//             if (CreatorHelper.createTables(dbConfig, db)) {
//                 return open(dbConfig);
//             }
//             UpgradeHelper.verifyUpgrade(dbConfig, db);
//         } catch (Exception e) {
//             Log.e("Opening database", e);
//         }
//         return db;
//     }
// 
//     public static SQLiteDatabase openReadOnly(DBConfig dbConfig) {
//         SQLiteDatabase db = null;
//         try {
//             if (Util.isNullOrEmpty(dbConfig.getUrl())) {
//                 db = getInstance(dbConfig).getReadableDatabase();
//                 db.setLockingEnabled(false);
//             } else {
//                 db = SQLiteDatabase.openDatabase(getFullDatabaseName(dbConfig), null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY);
//             }
//             if (CreatorHelper.createTables(dbConfig, db)) {
//                 return openReadOnly(dbConfig);
//             }
//             UpgradeHelper.verifyUpgrade(dbConfig, db);
//         } catch (Exception e) {
//             Log.e("Opening database", e);
//         }
//         return db;
//     }
// 
//     public static void closeDb() {
//         try {
//             if (sqLiteDatabaseManager != null) {
//                 sqLiteDatabaseManager.close();
//             }
//         } catch (Exception e) {
//             Log.e("Closing data base", e);
//         }
//     }
// 
//     public static String getDataBaseName(Context context) {
//         String dataBaseName = RegEx.match(context.getPackageName(), RegEx.PATTERN_EXTENSION);
//         dataBaseName = dataBaseName.replace(".", "");
//         return dataBaseName;
//     }
// 
//     private static String getFullDatabaseName(DBConfig dbConfig) {
//         return dbConfig.getUrl() + "/" + dbConfig.getDataBaseName();
//     }
// }


// Path: DataAccessLayer/dal/src/main/java/com/erc/dal/upgrade/UpgradeHelper.java
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.erc.dal.SQLiteDatabaseManager;

package com.erc.dal.upgrade;



public class UpgradeHelper {

    public static void verifyUpgrade(DBConfig dbConfig, SQLiteDatabase db) {
        if (dbConfig.getUpgradeListener() != null) {
            int currentVersion = UpgradeHelper.getCurrentVersion(db, dbConfig);

            if (dbConfig.getVersion() != currentVersion) {
                if (db.isReadOnly()) {
                    SQLiteDatabaseManager.open(dbConfig);