package pl.llp.aircasting.storage.repository; import pl.llp.aircasting.model.Sensor; import pl.llp.aircasting.model.Session; import pl.llp.aircasting.storage.db.AirCastingDB; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.google.inject.Inject; import org.intellij.lang.annotations.Language; import java.util.UUID; import static pl.llp.aircasting.storage.DBHelper.*; import static pl.llp.aircasting.storage.db.DBConstants.*; /** * Created by ags on 03/14/13 at 23:44 */ public class SessionDAO { @Language("SQLite") public static final String SESSIONS_WITH_SENSOR_QUERY = "SELECT " + SESSION_TABLE_NAME + ".*" + " FROM " + SESSION_TABLE_NAME + " JOIN " + STREAM_TABLE_NAME + " ON " + SESSION_TABLE_NAME + "." + SESSION_ID + " = " + STREAM_TABLE_NAME + "." + STREAM_SESSION_ID + " WHERE " + STREAM_SENSOR_NAME + " = ?" + " AND " + SESSION_MARKED_FOR_REMOVAL + " = 0 " + " AND " + SESSION_TABLE_NAME + "." + SESSION_INCOMPLETE + " = 0 " + " ORDER BY " + SESSION_START + " DESC"; @Inject AirCastingDB dbAccessor; public Cursor notDeletedCursor(Sensor sensor, SQLiteDatabase readOnlyDatabase) { Cursor result; if (sensor == null) { result = readOnlyDatabase .query(SESSION_TABLE_NAME, null, SESSION_MARKED_FOR_REMOVAL + " = 0 AND " + SESSION_INCOMPLETE + " = 0 ", null, null, null, SESSION_START + " DESC"); } else { result = readOnlyDatabase.rawQuery(SESSIONS_WITH_SENSOR_QUERY, new String[]{sensor.getSensorName()}); } return result; } public void loadDetails(Cursor cursor, Session session) { session.setId(getLong(cursor, SESSION_ID)); session.setTitle(getString(cursor, SESSION_TITLE)); session.setDescription(getString(cursor, SESSION_DESCRIPTION)); session.setTags(getString(cursor, SESSION_TAGS)); session.setStart(getDate(cursor, SESSION_START)); session.setEnd(getDate(cursor, SESSION_END)); session.setUuid(UUID.fromString(getString(cursor, SESSION_UUID))); session.setLocation(getString(cursor, SESSION_LOCATION)); session.setCalibration(getInt(cursor, SESSION_CALIBRATION)); session.setOffset60DB(getInt(cursor, SESSION_OFFSET_60_DB)); session.setContribute(getBool(cursor, SESSION_CONTRIBUTE)); session.setOsVersion(getString(cursor, SESSION_OS_VERSION)); session.setPhoneModel(getString(cursor, SESSION_PHONE_MODEL)); session.setMarkedForRemoval(getBool(cursor, SESSION_MARKED_FOR_REMOVAL)); session.setSubmittedForRemoval(getBool(cursor, SESSION_SUBMITTED_FOR_REMOVAL)); session.setLocationless(getBool(cursor, SESSION_LOCAL_ONLY)); session.setType(getString(cursor, SESSION_TYPE)); session.setIndoor(getBool(cursor, SESSION_INDOOR)); session.setLatitude(getDouble(cursor, SESSION_LATITUDE)); session.setLongitude(getDouble(cursor, SESSION_LONGITUDE)); } public ContentValues asValues(Session session) { ContentValues values = new ContentValues(); values.put(SESSION_TITLE, session.getTitle()); values.put(SESSION_DESCRIPTION, session.getDescription()); values.put(SESSION_TAGS, session.getTags()); values.put(SESSION_LOCATION, session.getLocation()); values.put(SESSION_START, session.getStart().getTime()); values.put(SESSION_END, session.getEnd().getTime()); values.put(SESSION_UUID, session.getUUID().toString()); values.put(SESSION_CALIBRATION, session.getCalibration()); values.put(SESSION_CONTRIBUTE, session.getContribute()); values.put(SESSION_PHONE_MODEL, session.getPhoneModel()); values.put(SESSION_OS_VERSION, session.getOSVersion()); values.put(SESSION_OFFSET_60_DB, session.getOffset60DB()); values.put(SESSION_MARKED_FOR_REMOVAL, session.isMarkedForRemoval() ? 1 : 0); values.put(SESSION_SUBMITTED_FOR_REMOVAL, session.isSubmittedForRemoval() ? 1 : 0); values.put(SESSION_CALIBRATED, 1); values.put(SESSION_INCOMPLETE, 0); values.put(SESSION_LOCAL_ONLY, session.isLocationless() ? 1 : 0); values.put(SESSION_TYPE, session.getType()); values.put(SESSION_INDOOR, session.isIndoor() ? 1 : 0); values.put(SESSION_LATITUDE, session.getLatitude()); values.put(SESSION_LONGITUDE, session.getLongitude()); return values; } }