Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.robustastudio.plugs.room_migrations;
- import android.arch.persistence.db.SupportSQLiteDatabase;
- import android.arch.persistence.room.migration.Migration;
- import android.database.Cursor;
- import android.support.annotation.NonNull;
- import android.util.Log;
- import com.robustastudio.plugs.data.model.Model;
- import com.robustastudio.plugs.utils.CameraModelUtil;
- import java.util.List;
- /**
- * Created by hanaa on 28/02/18.
- */
- public class MigrationToVersion13 extends Migration {
- private String OLD_CAMERA_TABLE_NAME = "CameraTable";
- private String CAMERA_TABLE_NAME = "camera";
- private String OLD_CAMERA_GROUP_TABLE_NAME = "cameraGroups";
- private String CAMERA_GROUP_TABLE_NAME = "CamerasGroup";
- private final static String MODEL_TABLE_NAME = "cameraModels";
- /**
- * Creates a new migration between {@code startVersion} and {@code endVersion}.
- *
- * @param startVersion The start version of the database.
- * @param endVersion The end version of the database after this migration is applied.
- */
- public MigrationToVersion13(int startVersion, int endVersion) {
- super(startVersion, endVersion);
- }
- @Override
- public void migrate(@NonNull SupportSQLiteDatabase database) {
- //CHECK WHETHER CAMERA MODEL TABLE EXIST OR NOT
- if (isTableExists(MODEL_TABLE_NAME, database)) {
- database.execSQL("DROP TABLE IF EXISTS " + MODEL_TABLE_NAME);
- createCameraModelsTable(database);
- } else createCameraModelsTable(database);
- if (isTableExists(OLD_CAMERA_TABLE_NAME, database)) {
- Cursor dbCursor = database.query("select * from " + OLD_CAMERA_TABLE_NAME);
- int videoColIndex = dbCursor.getColumnIndex("videoExtension");
- if (videoColIndex == -1) {
- Log.d("col", "videoExtension not found");
- cloneCameraTable(database, false);
- // database.delete(CAMERA_TABLE_NAME, null, null);
- // createCameraModelsTable(database);
- database.execSQL("ALTER TABLE " + CAMERA_TABLE_NAME + " ADD COLUMN videoExtension TEXT");
- String updateQuery = "UPDATE " + CAMERA_TABLE_NAME
- + " SET videoExtension = (SELECT videoUrl FROM " + MODEL_TABLE_NAME +
- " WHERE name = CameraTable.modelName)";
- database.execSQL(updateQuery);
- } else {
- //IF THE TABLE EXIST BUT WITH THE OLD DATA STRUCTURE RE CREATE IT AND DROP THE OLD ONE
- cloneCameraTable(database, true);
- }
- } else {
- createCameraTable(database, true);
- }
- //CHECK WHETHER CAMERA GROUP TABLE EXIST OR NOT
- if (isTableExists(OLD_CAMERA_GROUP_TABLE_NAME, database)) {
- cloneCameraGroupTable(database);
- } else createCameraGroupTable(database);
- }
- private static boolean isTableExists(String tableName, SupportSQLiteDatabase db) {
- boolean isExists = false;
- Cursor cursor = db.query("select DISTINCT tbl_name from sqlite_master where tbl_name = '"
- + tableName + "'", null);
- if (cursor != null) {
- if (cursor.getCount() > 0) {
- isExists = true;
- }
- cursor.close();
- }
- return isExists;
- }
- private static void createCameraModelsTable(SupportSQLiteDatabase db) {
- //CREATE CAMERA MODELS TABLE (Id, name, url)
- db.execSQL("CREATE TABLE IF NOT EXISTS " + MODEL_TABLE_NAME
- + " (id INTEGER PRIMARY KEY autoincrement, name TEXT, imageUrl TEXT" +
- ",videoUrl TEXT" +
- ")");
- List<Model> modelList = CameraModelUtil.getStaticModels();
- for (Model model : modelList) {
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(" + model.getId() +
- ", '" + model.getName() + "'," +
- " '" + model.getImageUrl() + "'," +
- "'" + model.getVideoUrl() + "')");
- }
- /* db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(1, 'Cisco WVC 201', '/img/'" +
- ",'/img/video.mjpeg'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(2, 'DCS 930', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(3, 'DCS 2103/2130', '/image/jpeg.cgi'" +
- ",'/video2.mjpg'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(4, 'DCS 2121', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(5, 'DCS 5020', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(6, 'DCS 5211/5222L', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(7, 'DCS 6010', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(8, 'DCS 6113', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(9, 'DCS 7010', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(10, 'DCS 7110', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(11, 'DCS 4703', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(12, 'DCS 4602', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- db.execSQL("INSERT OR IGNORE INTO " + MODEL_TABLE_NAME + " values(13, 'DCS 936', '/image/jpeg.cgi'" +
- ",'/video/mjpg.cgi'" +
- ")");
- */
- }
- /**
- * A method to migrate from sqlite to room since sqlite doesn't support altering any column's type or name
- * and room doesn't support varchar types so we need a new camera table with the new structure then clone
- * the old data into the new one.
- *
- * @param db database object
- */
- private void cloneCameraTable(SupportSQLiteDatabase db, boolean isVideoExtensionExist) {
- // CREATE A NEW TABLE WITH NEW STRUCTURE REPLACE EACH VARCHAR WITH TEXT
- createCameraTable(db, isVideoExtensionExist);
- db.execSQL("INSERT INTO " + CAMERA_TABLE_NAME + " SELECT * FROM " + OLD_CAMERA_TABLE_NAME + ";");
- //DROP THE OLD ONE
- db.execSQL("DROP TABLE IF EXISTS " + OLD_CAMERA_TABLE_NAME);
- }
- /**
- * A method to migrate from sqlite to room since sqlite doesn't support altering any column's type or name
- * and room doesn't support varchar types so we need a new camera table with the new structure then clone
- * the old data into the new one.
- *
- * @param db database object
- */
- private void cloneCameraGroupTable(SupportSQLiteDatabase db) {
- // CREATE A NEW TABLE WITH NEW STRUCTURE REPLACE EACH VARCHAR WITH TEXT
- createCameraGroupTable(db);
- //CLONE OLD CAMERA TABLE INTO THE NEW CAMERA TABLE
- db.execSQL("INSERT INTO " + CAMERA_GROUP_TABLE_NAME + " SELECT * FROM " + OLD_CAMERA_GROUP_TABLE_NAME + ";");
- //DROP THE OLD ONE
- db.execSQL("DROP TABLE IF EXISTS " + OLD_CAMERA_GROUP_TABLE_NAME);
- }
- private void createCameraTable(SupportSQLiteDatabase database, boolean addVideoExtensionColumn) {
- String cloningSql = "CREATE TABLE IF NOT EXISTS camera " +
- "(Id INTEGER PRIMARY KEY autoincrement, Alias TEXT, IP TEXT, Port TEXT, _Username TEXT"
- + ", _Password TEXT, imageExtension TEXT," +
- " modelName TEXT,camera_group_id INTEGER," +
- (addVideoExtensionColumn ? "videoExtension TEXT" : "") +
- " REFERENCES " + CAMERA_GROUP_TABLE_NAME + "(Id) ON DELETE SET NULL)";
- database.execSQL(cloningSql);
- }
- private void createCameraGroupTable(SupportSQLiteDatabase database) {
- database.execSQL("CREATE TABLE IF NOT EXISTS " + CAMERA_GROUP_TABLE_NAME
- + " (Id INTEGER PRIMARY KEY autoincrement, name TEXT)");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement