package org.wordpress.android.datasets; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import org.wordpress.android.WordPress; import org.wordpress.android.models.CategoryModel; import org.wordpress.android.models.SiteSettingsModel; import java.util.HashMap; import java.util.Map; public final class SiteSettingsTable { public static final String CATEGORIES_TABLE_NAME = "site_categories"; private static final String CREATE_CATEGORIES_TABLE_SQL = "CREATE TABLE IF NOT EXISTS " + CATEGORIES_TABLE_NAME + " (" + CategoryModel.ID_COLUMN_NAME + " INTEGER PRIMARY KEY, " + CategoryModel.NAME_COLUMN_NAME + " TEXT, " + CategoryModel.SLUG_COLUMN_NAME + " TEXT, " + CategoryModel.DESC_COLUMN_NAME + " TEXT, " + CategoryModel.PARENT_ID_COLUMN_NAME + " INTEGER, " + CategoryModel.POST_COUNT_COLUMN_NAME + " INTEGER" + ");"; public static void createTable(SQLiteDatabase db) { if (db != null) { db.execSQL(SiteSettingsModel.CREATE_SETTINGS_TABLE_SQL); db.execSQL(CREATE_CATEGORIES_TABLE_SQL); } } public static void addOptimizedImageToSiteSettingsTable(SQLiteDatabase db) { if (db != null) { db.execSQL(SiteSettingsModel.ADD_OPTIMIZED_IMAGE); } } public static void addImageResizeWidthAndQualityToSiteSettingsTable(SQLiteDatabase db) { if (db != null) { db.execSQL(SiteSettingsModel.ADD_IMAGE_RESIZE_WIDTH); db.execSQL(SiteSettingsModel.ADD_IMAGE_COMPRESSION_QUALITY); } } public static Map<Integer, CategoryModel> getAllCategories() { String sqlCommand = sqlSelectAllCategories() + ";"; Cursor cursor = WordPress.wpDB.getDatabase().rawQuery(sqlCommand, null); if (cursor == null || !cursor.moveToFirst() || cursor.getCount() == 0) return null; Map<Integer, CategoryModel> models = new HashMap<>(); for (int i = 0; i < cursor.getCount(); ++i) { CategoryModel model = new CategoryModel(); model.deserializeFromDatabase(cursor); models.put(model.id, model); cursor.moveToNext(); } return models; } public static Cursor getCategory(long id) { if (id < 0) return null; String sqlCommand = sqlSelectAllCategories() + sqlWhere(CategoryModel.ID_COLUMN_NAME, Long.toString(id)) + ";"; return WordPress.wpDB.getDatabase().rawQuery(sqlCommand, null); } public static Cursor getSettings(long id) { if (id < 0) return null; String sqlCommand = sqlSelectAllSettings() + sqlWhere(SiteSettingsModel.ID_COLUMN_NAME, Long.toString(id)) + ";"; return WordPress.wpDB.getDatabase().rawQuery(sqlCommand, null); } public static void saveCategory(CategoryModel category) { if (category == null) return; ContentValues values = category.serializeToDatabase(); category.isInLocalTable = WordPress.wpDB.getDatabase().insertWithOnConflict( CATEGORIES_TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE) != -1; } public static void saveCategories(CategoryModel[] categories) { if (categories == null) return; for (CategoryModel category : categories) { saveCategory(category); } } public static void saveSettings(SiteSettingsModel settings) { if (settings == null) return; ContentValues values = settings.serializeToDatabase(); settings.isInLocalTable = WordPress.wpDB.getDatabase().insertWithOnConflict( SiteSettingsModel.SETTINGS_TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE) != -1; saveCategories(settings.categories); } private static String sqlSelectAllCategories() { return "SELECT * FROM " + CATEGORIES_TABLE_NAME + " "; } private static String sqlSelectAllSettings() { return "SELECT * FROM " + SiteSettingsModel.SETTINGS_TABLE_NAME + " "; } private static String sqlWhere(String variable, String value) { return "WHERE " + variable + "=\"" + value + "\" "; } }