/** * */ package org.dodgybits.shuffle.android.persistence.provider; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dodgybits.shuffle.android.persistence.migrations.Migration; import org.dodgybits.shuffle.android.persistence.migrations.V10Migration; import org.dodgybits.shuffle.android.persistence.migrations.V11Migration; import org.dodgybits.shuffle.android.persistence.migrations.V12Migration; import org.dodgybits.shuffle.android.persistence.migrations.V13Migration; import org.dodgybits.shuffle.android.persistence.migrations.V1Migration; import org.dodgybits.shuffle.android.persistence.migrations.V9Migration; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; class DatabaseHelper extends SQLiteOpenHelper { private static final Map<Integer, Migration> migrations = new HashMap<Integer, Migration>(); static { migrations.put(1, new V1Migration()); migrations.put(9, new V9Migration()); migrations.put(10, new V10Migration()); migrations.put(11, new V11Migration()); migrations.put(12, new V12Migration()); migrations.put(13, new V13Migration()); } DatabaseHelper(Context context) { super(context, AbstractCollectionProvider.cDatabaseName, null, AbstractCollectionProvider.cDatabaseVersion); } @Override public void onCreate(SQLiteDatabase db) { Log.i(AbstractCollectionProvider.cTag, "Creating shuffle DB"); executeMigrations(db, allMigrationVersionsSorted()); } private void executeMigrations(SQLiteDatabase db, List<Integer> migrationVersions) { for (Integer version : migrationVersions) { Log.i(AbstractCollectionProvider.cTag, "Migrating to version " + version); try { migrations.get(version).migrate(db); } catch (Exception e) { Log.i(AbstractCollectionProvider.cTag, "Problem migrating to version " + version + ":\n" + e); break; } } } private List<Integer> allMigrationVersionsSorted() { ArrayList<Integer> migrationVersions = new ArrayList<Integer>(migrations .keySet()); Collections.sort(migrationVersions); return migrationVersions; } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i(AbstractCollectionProvider.cTag, "Upgrading database from version " + oldVersion + " to " + newVersion); List<Integer> migrationVersions = allMigrationVersionsSorted(); List<Integer> migrationsBetweenVersions = migrationVersions.subList(migrationVersions.indexOf(oldVersion), migrationVersions.indexOf(newVersion)); executeMigrations(db, migrationsBetweenVersions); } }