package com.maxiee.heartbeat.database.utils;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import com.maxiee.heartbeat.database.tables.EventImageRelationTable;
import com.maxiee.heartbeat.database.tables.ImageTable;
import com.maxiee.heartbeat.model.Image;
/**
* Created by maxiee on 15/11/10.
*/
public class ImageUtils {
private static long queryImageIdByRelation(Cursor cursor) {
return DatabaseUtils.getLong(cursor, EventImageRelationTable.IMAGE_ID);
}
private static long queryIamgeId(Cursor cursor) {
return DatabaseUtils.getLong(cursor, ImageTable.ID);
}
private static String queryPath(Cursor cursor) {
return DatabaseUtils.getString(cursor, ImageTable.URI);
}
public static Image queryImage(Cursor cursor) {
return new Image(queryIamgeId(cursor), queryPath(cursor));
}
private static void addRelation(Context context, long eventId, Image image) {
ContentValues values = new ContentValues();
values.put(EventImageRelationTable.EVENT_ID, eventId);
values.put(EventImageRelationTable.IMAGE_ID, image.getId());
DatabaseUtils.add(context, EventImageRelationTable.NAME, values);
}
private static long[] getRelation(Context context, long eventId) {
Cursor cursor = DatabaseUtils.query(
context, EventImageRelationTable.NAME,
new String[] {EventImageRelationTable.IMAGE_ID},
EventImageRelationTable.EVENT_ID + "=?",
new String[] {String.valueOf(eventId)});
if (cursor.getCount() < 1) {
cursor.close();
return new long[] {};
}
long[] imageIds = new long[cursor.getCount()];
while (cursor.moveToNext()) {
imageIds[cursor.getPosition()] = queryImageIdByRelation(cursor);
}
cursor.close();
return imageIds;
}
private static void deleteRelation(Context context, long imageId) {
DatabaseUtils.delete(
context, EventImageRelationTable.NAME,
EventImageRelationTable.IMAGE_ID + "=?",
new String[]{String.valueOf(imageId)});
}
public static Image addImage(Context context, long eventId, String path) {
ContentValues values = new ContentValues();
values.put(ImageTable.URI, path);
long imageID = DatabaseUtils.add(context, ImageTable.NAME, values);
Image image = new Image(imageID, path);
addRelation(context, eventId, image);
return image;
}
public static Image getImageByImageId(Context context, long imageId) {
Cursor cursor = DatabaseUtils.query(
context, ImageTable.NAME,
new String[]{ImageTable.ID, ImageTable.URI},
ImageTable.ID + "=?",
new String[]{String.valueOf(imageId)});
if (cursor.getCount() < 1) {
cursor.close();
return null;
}
cursor.moveToFirst();
Image i = queryImage(cursor);
cursor.close();
return i;
}
public static Image getImageByEventId(Context context, long eventId) {
long[] imageIds = getRelation(context, eventId);
if (imageIds.length < 1) {return null;}
return getImageByImageId(context, imageIds[0]);
}
public static void updateImageByImageId(Context context, long imageId, String path) {
ContentValues values = new ContentValues();
values.put(ImageTable.URI, path);
DatabaseUtils.update(
context, ImageTable.NAME, values,
ImageTable.ID + "=?", new String[] {String.valueOf(imageId)});
}
public static void updateImageByEventId(Context context, long eventId, String path) {
Image i = getImageByEventId(context, eventId);
if (i == null) return;
updateImageByImageId(context, i.getId(), path);
}
public static void deleteByImageId(Context context, long imageId) {
DatabaseUtils.delete(
context, ImageTable.NAME,
ImageTable.ID + "=?",
new String[]{String.valueOf(imageId)});
}
public static void deleteByEventId(Context context, long eventId) {
long[] imageIds = getRelation(context, eventId);
for (long imageId : imageIds) {
deleteRelation(context, imageId);
deleteByImageId(context, imageId);
}
}
}