package edu.hebtu.movingcampus.db; import java.util.ArrayList; import java.util.Map; import android.net.Uri; import android.provider.BaseColumns; public abstract class DatabaseColumn implements BaseColumns { /** * The identifier to indicate a specific ContentProvider */ public static final String AUTHORITY = "edu.hebtu.movingcampus.provider"; /** * The database's name */ public static final String DATABASE_NAME = "movingcampus.db"; /** * The version of current database */ public static final int DATABASE_VERSION = 1; /** * Classes's name extends from this class. */ public static final String[] SUBCLASSES = new String[] { "edu.hebtu.movingcampus.db.NewsColumn", "edu.hebtu.movingcampus.db.ImageCacheColumn", "edu.hebtu.movingcampus.db.RequestCacheColumn" }; public String getTableCreateor() { return getTableCreator(getTableName(), getTableMap()); } /** * Get sub-classes of this class. * * @return Array of sub-classes. */ @SuppressWarnings("unchecked") public static final Class<DatabaseColumn>[] getSubClasses() { ArrayList<Class<DatabaseColumn>> classes = new ArrayList<Class<DatabaseColumn>>(); Class<DatabaseColumn> subClass = null; for (int i = 0; i < SUBCLASSES.length; i++) { try { subClass = (Class<DatabaseColumn>) Class.forName(SUBCLASSES[i]); classes.add(subClass); } catch (ClassNotFoundException e) { e.printStackTrace(); continue; } } return classes.toArray(new Class[0]); } /** * Create a sentence to create a table by using a hash-map. * * @param tableName * The table's name to create. * @param map * A map to store table columns info. * @return */ private static final String getTableCreator(String tableName, Map<String, String> map) { String[] keys = map.keySet().toArray(new String[0]); String value = null; StringBuilder creator = new StringBuilder(); creator.append("CREATE TABLE ").append(tableName).append("( "); int length = keys.length; for (int i = 0; i < length; i++) { value = map.get(keys[i]); creator.append(keys[i]).append(" "); creator.append(value); if (i < length - 1) { creator.append(","); } } creator.append(")"); return creator.toString(); } abstract public String getTableName(); abstract public Uri getTableContent(); abstract protected Map<String, String> getTableMap(); }