package com.gettingmobile.google.reader.db; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import com.gettingmobile.google.reader.Element; import com.gettingmobile.google.reader.ElementId; import java.util.HashSet; import java.util.Set; public abstract class ElementDatabaseAdapter<T extends Element> extends AbstractDatabaseAdapter<T> { public ElementDatabaseAdapter(String tableName) { super(tableName); } public Set<ElementId> readAllIds(SQLiteDatabase db) { final Cursor c = db.query(getTableName(), new String[] { ElementTable.ID }, null, null, null, null, null); try { final Set<ElementId> ids = new HashSet<ElementId>(c.getCount()); if (c.moveToFirst()) { do { ids.add(new ElementId(c.getString(0))); } while (c.moveToNext()); } return ids; } finally { c.close(); } } @Override public long getRowKey(Cursor c) { return getRowKey(c, ElementTable.KEY); } @Override protected void setRowValues(SQLiteDatabase db, ContentValues columns, T entity, Bundle parameters) { columns.put(ElementTable.ID, entity.getId().getId()); columns.put(ElementTable.TITLE, entity.getTitle()); } @Override protected void attachRowId(T entity, long id) { entity.setKey(id); } @Override public T readCurrent(Cursor c) { final T entity = super.readCurrent(c); entity.setKey(getRowKey(c)); entity.setId(new ElementId(c.getString(c.getColumnIndex(ElementTable.ID)))); entity.setTitle(c.getString(c.getColumnIndex(ElementTable.TITLE))); return entity; } }