package pl.llp.aircasting.storage; import pl.llp.aircasting.storage.db.DBConstants; import pl.llp.aircasting.storage.db.WritableDatabaseTask; import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; /** * Created by ags on 02/04/2013 at 21:36 */ public class SessionPropertySetter { DatabaseTaskQueue dbQueue; public SessionPropertySetter(DatabaseTaskQueue dbQueue) { this.dbQueue = dbQueue; } public NeedsFirstKey forSession(long sessionId) { return new Builder(sessionId); } public void set(final long sessionId, final ContentValues toSet) { dbQueue.add(new WritableDatabaseTask<Void >() { @Override public Void execute(SQLiteDatabase writableDatabase) { writableDatabase.update(DBConstants.SESSION_TABLE_NAME, toSet, DBConstants.SESSION_ID + " = " + sessionId, null); return null; } @Override public String toString() { return String.format("Session [%d] set [%s]", sessionId, toSet.toString()); } }); } class Builder implements NeedsFirstKey, NeedsKeyOrFinish, NeedsValue { ContentValues values = new ContentValues(); String key; private long sessionId; public Builder(long sessionId) { this.sessionId = sessionId; } @Override public NeedsValue key(String key) { this.key = key; return this; } @Override public void doSet() { set(sessionId, values); } @Override public NeedsKeyOrFinish value(Long value) { values.put(key, value); return this; } @Override public NeedsKeyOrFinish value(String value) { values.put(key, value); return this; } @Override public NeedsKeyOrFinish value(boolean value) { values.put(key, value); return this; } } public interface NeedsFirstKey { NeedsValue key(String key); } public interface NeedsKeyOrFinish { NeedsValue key(String key); void doSet(); } public interface NeedsValue { NeedsKeyOrFinish value(Long value); NeedsKeyOrFinish value(String value); NeedsKeyOrFinish value(boolean shouldContribute); } }