package co.mwater.clientapp.dbsync; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Database helper that should be subclassed for specific database. If this will * be used by multiple classes, for example a content provider and a * synchronizer, it should contain a static getter. * * @author Clayton * */ public abstract class SyncDatabaseHelper extends SQLiteOpenHelper { SyncTable[] syncTables; public SyncDatabaseHelper(Context context, String name, int version, SyncTable[] syncTables) { super(context, name, null, version); this.syncTables = syncTables; } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); if (!db.isReadOnly()) { // Enable foreign key constraints db.execSQL("PRAGMA foreign_keys=ON;"); } } public SyncTable[] getSyncTables() { return syncTables; } @Override public void onCreate(SQLiteDatabase db) { new DataSlicesTable().onCreate(db); new SyncChangesTable().onCreate(db); // Create sync tables for (SyncTable syncTable : syncTables) syncTable.onCreate(db); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { new DataSlicesTable().onUpgrade(db, oldVersion, newVersion); new SyncChangesTable().onUpgrade(db, oldVersion, newVersion); // Upgrade sync tables for (SyncTable syncTable : syncTables) syncTable.onUpgrade(db, oldVersion, newVersion); } }