package pl.llp.aircasting.tracking;
import pl.llp.aircasting.event.session.NoteCreatedEvent;
import pl.llp.aircasting.model.Note;
import pl.llp.aircasting.model.Session;
import pl.llp.aircasting.storage.DatabaseTaskQueue;
import pl.llp.aircasting.storage.db.WritableDatabaseTask;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import com.google.common.eventbus.EventBus;
import static pl.llp.aircasting.storage.db.DBConstants.*;
/**
* Created by ags on 27/03/2013 at 00:42
*/
class ActualNoteTracker implements NoteTracker
{
final EventBus eventBus;
final DatabaseTaskQueue dbQueue;
ActualNoteTracker(EventBus eventBus, DatabaseTaskQueue taskQueue)
{
this.eventBus = eventBus;
this.dbQueue = taskQueue;
}
public void addNote(final Session session, final Note note)
{
session.add(note);
notifyNote(note);
dbQueue.add(new WritableDatabaseTask<Void>()
{
@Override
public Void execute(SQLiteDatabase writableDatabase)
{
ContentValues values = new ContentValues();
values.put(NOTE_SESSION_ID, session.getId());
values.put(NOTE_LATITUDE, note.getLatitude());
values.put(NOTE_LONGITUDE, note.getLongitude());
values.put(NOTE_TEXT, note.getText());
values.put(NOTE_DATE, note.getDate().getTime());
values.put(NOTE_PHOTO, note.getPhotoPath());
values.put(NOTE_NUMBER, note.getNumber());
writableDatabase.insertOrThrow(NOTE_TABLE_NAME, null, values);
return null;
}
});
}
@Override
public void deleteNote(final Session session, final Note note)
{
session.deleteNote(note);
dbQueue.add(new WritableDatabaseTask()
{
@Override
public Void execute(SQLiteDatabase writableDb)
{
writableDb.delete(NOTE_TABLE_NAME, NOTE_SESSION_ID + " = " + session.getId() + " " +
"AND " + NOTE_NUMBER + " = " + note.getNumber(), null);
return null;
}
});
}
private void notifyNote(Note note)
{
eventBus.post(new NoteCreatedEvent(note));
}
}