package com.maxiee.heartbeat.database.utils;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import com.maxiee.heartbeat.common.TimeUtils;
import com.maxiee.heartbeat.database.tables.EventLabelRelationTable;
import com.maxiee.heartbeat.database.tables.EventsTable;
import com.maxiee.heartbeat.model.Event;
import com.maxiee.heartbeat.model.Label;
import java.util.ArrayList;
/**
* Created by maxiee on 15/11/10.
*/
public class EventUtils {
public static final String TAG = EventUtils.class.getSimpleName();
public static Event addEvent(Context context, String content, long timestamp) {
ContentValues values = new ContentValues();
values.put(EventsTable.EVENT, content);
values.put(EventsTable.TIMESTAMP, timestamp);
long key = DatabaseUtils.add(context, EventsTable.NAME, values);
return new Event(key, content, timestamp);
}
public static void updateEvent(Context context, Event event) {
ContentValues values = new ContentValues();
values.put(EventsTable.EVENT, event.getEvent());
values.put(EventsTable.TIMESTAMP, event.getTimestamp());
DatabaseUtils.update(
context, EventsTable.NAME,
values, EventsTable.ID + "=?",
new String[] {String.valueOf(event.getId())});
}
private static long queryId(Cursor cursor) {
return DatabaseUtils.getLong(cursor, EventsTable.ID);
}
private static String queryContent(Cursor cursor) {
return DatabaseUtils.getString(cursor, EventsTable.EVENT);
}
private static long queryTimeStamp(Cursor cursor) {
return DatabaseUtils.getLong(cursor, EventsTable.TIMESTAMP);
}
private static Event queryEvent(Cursor cursor) {
return new Event(queryId(cursor), queryContent(cursor), queryTimeStamp(cursor));
}
public static Event getEvent(Context context, long id) {
Cursor cursor = DatabaseUtils.query(
context, EventsTable.NAME,
new String[]{EventsTable.ID, EventsTable.EVENT, EventsTable.TIMESTAMP},
EventsTable.ID + "=?",
new String[] {String.valueOf(id)});
if (cursor.getCount() < 1) {
cursor.close();
return null;
}
cursor.moveToFirst();
Event e = queryEvent(cursor);
cursor.close();
return e;
}
public static ArrayList<Event> getToday(Context context) {
Cursor cursor = DatabaseUtils.queryOrderDesc(
context, EventsTable.NAME,
new String[]{EventsTable.ID, EventsTable.EVENT, EventsTable.TIMESTAMP},
EventsTable.TIMESTAMP + ">?",
new String[] {String.valueOf(TimeUtils.getTodayMillis())},
EventsTable.TIMESTAMP);
ArrayList<Event> ret = new ArrayList<>();
if (cursor.getCount() < 1) {
cursor.close();
return ret;
}
while (cursor.moveToNext()) {
ret.add(queryEvent(cursor));
}
cursor.close();
return ret;
}
public static ArrayList<Event> getEvents(Context context, Label label) {
final String rawSQL =
"SELECT " + EventsTable.NAME + "." + EventsTable.ID + ", " + EventsTable.EVENT + ", " + EventsTable.TIMESTAMP + ", "
+ EventLabelRelationTable.LABEL_ID + " FROM " + EventsTable.NAME + " JOIN " + EventLabelRelationTable.NAME
+ " ON " + EventsTable.NAME + "." + EventsTable.ID + "=" + EventLabelRelationTable.NAME + "." + EventLabelRelationTable.EVENT_ID
+ " WHERE " + EventLabelRelationTable.LABEL_ID + "=?"
+ " ORDER BY " + EventsTable.TIMESTAMP + " DESC;";
Cursor cursor = DatabaseUtils.getReadableDatabase(context).rawQuery(
rawSQL,
new String[] { String.valueOf(label.getId())});
ArrayList<Event> ret = new ArrayList<>();
if (cursor.getCount() < 1) {
cursor.close();
return ret;
}
while (cursor.moveToNext()) {
ret.add(queryEvent(cursor));
}
cursor.close();
return ret;
}
public static ArrayList<Event> getAllEvents(Context context) {
Cursor cursor = DatabaseUtils.queryAllOrderDesc(
context, EventsTable.NAME,
new String[]{EventsTable.ID, EventsTable.EVENT, EventsTable.TIMESTAMP},
EventsTable.TIMESTAMP);
ArrayList<Event> eventList = new ArrayList<>();
if (cursor.getCount() < 1) {
cursor.close();
return eventList;
}
while (cursor.moveToNext()) {
eventList.add(queryEvent(cursor));
}
cursor.close();
return eventList;
}
public static void deleteEvent(Context context, long id) {
DatabaseUtils.delete(
context, EventsTable.NAME,
EventsTable.ID + "=?",
new String[] {String.valueOf(id)});
LabelUtils.deleteRelation(context, new Event(id, "", 0));
}
public static ArrayList<Event> searchEvent(Context context, String search) {
Cursor cursor = DatabaseUtils.query(
context, EventsTable.NAME,
new String[] {EventsTable.ID, EventsTable.EVENT, EventsTable.TIMESTAMP},
EventsTable.EVENT + " like ?",
new String[] {"%" + search + "%"});
ArrayList<Event> ret = new ArrayList<>();
if (cursor.getCount() < 1) {
cursor.close();
return ret;
}
while (cursor.moveToNext()) {
ret.add(0, queryEvent(cursor));
}
cursor.close();
return ret;
}
}