package com.gettingmobile.google.reader.db; import android.database.sqlite.SQLiteDatabase; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; public abstract class Table { public static long INVALID_ID = -1; private final String tableName; public Table(String tableName) { this.tableName = tableName; } public String getTableName() { return tableName; } protected abstract void defineColumns(Map<String, String> columns); protected void postCommands(SQLiteDatabase db) { // do nothing by default } public void upgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // do nothing by default } public void create(SQLiteDatabase db) { drop(db); final Map<String, String> columns = new LinkedHashMap<String, String>(); defineColumns(columns); final StringBuilder createStmt = new StringBuilder("CREATE TABLE " + getTableName() + " (\n"); for (final Iterator<Entry<String, String>> it = columns.entrySet().iterator(); it.hasNext(); ) { final Entry<String, String> column = it.next(); createStmt.append(column.getKey()).append(' ').append(column.getValue()); createStmt.append(it.hasNext() ? ",\n" : "\n"); } createStmt.append(')'); db.execSQL(createStmt.toString()); postCommands(db); init(db); } public void drop(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + getTableName()); } public void delete(SQLiteDatabase db) { db.delete(tableName, null, null); } public void clean(SQLiteDatabase db) { delete(db); init(db); } public void init(SQLiteDatabase db) { // do nothing by default } }