/**
** Copyright (c) 2010 Ushahidi Inc
** All rights reserved
** Contact: team@ushahidi.com
** Website: http://www.ushahidi.com
**
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: http://www.gnu.org/licenses/lgpl.html.
**
**
** If you have questions regarding the use of this file, please contact
** Ushahidi developers at team@ushahidi.com.
**
**/
package com.ushahidi.android.app.database;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.ushahidi.android.app.entities.MediaEntity;
/**
* @author eyedol
*/
public class MediaDao extends DbContentProvider implements IMediaDao,
IMediaSchema {
private Cursor cursor;
private List<MediaEntity> listMedia;
private ContentValues initialValues;
/**
* @param db
*/
public MediaDao(SQLiteDatabase db) {
super(db);
}
@Override
public List<MediaEntity> fetchCheckinPhoto(int checkinId) {
listMedia = new ArrayList<MediaEntity>();
final String selectionArgs[] = { String.valueOf(checkinId),
String.valueOf(IMAGE) };
final String selection = CHECKIN_ID + " =? AND " + TYPE + " =?";
cursor = super.query(TABLE, MEDIA_COLUMNS, selection, selectionArgs,
null);
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
MediaEntity media = cursorToEntity(cursor);
listMedia.add(media);
cursor.moveToNext();
}
cursor.close();
}
return listMedia;
}
@Override
public List<MediaEntity> fetchReportPhoto(int reportId) {
listMedia = new ArrayList<MediaEntity>();
final String selection = REPORT_ID + " = " + reportId + " AND " + TYPE
+ " =" + IMAGE;
cursor = super.query(TABLE, MEDIA_COLUMNS, selection, null, null);
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
MediaEntity media = cursorToEntity(cursor);
listMedia.add(media);
cursor.moveToNext();
}
cursor.close();
}
return listMedia;
}
@Override
public List<MediaEntity> fetchPendingCheckinPhoto(int checkinId) {
listMedia = new ArrayList<MediaEntity>();
final String selection = CHECKIN_ID + " = " + checkinId + " AND " + TYPE
+ " =" + IMAGE;
cursor = super.query(TABLE, MEDIA_COLUMNS, selection, null, null);
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
MediaEntity media = cursorToEntity(cursor);
listMedia.add(media);
cursor.moveToNext();
}
cursor.close();
}
return listMedia;
}
@Override
public List<MediaEntity> fetchPendingReportPhoto(int reportId) {
listMedia = new ArrayList<MediaEntity>();
final String selection = REPORT_ID + " = " + reportId + " AND " + TYPE
+ " =" + IMAGE;
cursor = super.query(TABLE, MEDIA_COLUMNS, selection, null, null);
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
MediaEntity media = cursorToEntity(cursor);
listMedia.add(media);
cursor.moveToNext();
}
cursor.close();
}
return listMedia;
}
@Override
public List<MediaEntity> fetchReportVideo(int reportId) {
listMedia = new ArrayList<MediaEntity>();
final String selection = REPORT_ID + " = " + reportId + " AND " + TYPE
+ " =" + VIDEO;
cursor = super.query(TABLE, MEDIA_COLUMNS, selection, null, null);
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
MediaEntity media = cursorToEntity(cursor);
listMedia.add(media);
cursor.moveToNext();
}
cursor.close();
}
return listMedia;
}
@Override
public List<MediaEntity> fetchReportAudio(int reportId) {
listMedia = new ArrayList<MediaEntity>();
final String selection = REPORT_ID + " = " + reportId + " AND " + TYPE
+ " =" + AUDIO;
cursor = super.query(TABLE, MEDIA_COLUMNS, selection, null, null);
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
MediaEntity media = cursorToEntity(cursor);
listMedia.add(media);
cursor.moveToNext();
}
cursor.close();
}
return listMedia;
}
@Override
public List<MediaEntity> fetchReportNews(int reportId) {
listMedia = new ArrayList<MediaEntity>();
final String selection = REPORT_ID + " = " + reportId + " AND " + TYPE
+ " =" + NEWS;
cursor = super.query(TABLE, MEDIA_COLUMNS, selection, null, null);
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
MediaEntity media = cursorToEntity(cursor);
listMedia.add(media);
cursor.moveToNext();
}
cursor.close();
}
return listMedia;
}
@Override
public List<MediaEntity> fetchMedia(String itemType, int itemId, int mediaType,
int limit) {
listMedia = new ArrayList<MediaEntity>();
final String selection = itemType + " =" + itemId + " AND " + TYPE
+ " =" + mediaType;
cursor = super.query(TABLE, MEDIA_COLUMNS, selection, null, null,
String.valueOf(limit));
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
MediaEntity media = cursorToEntity(cursor);
listMedia.add(media);
cursor.moveToNext();
}
cursor.close();
}
return listMedia;
}
/**
* (non-Javadoc)
*
* @see com.ushahidi.android.app.database.IMediaDao#deleteAllMedia()
*/
@Override
public boolean deleteAllMedia() {
return super.delete(TABLE, null, null) > 0;
}
/**
* Delete all media attached to a report
*
* @param reportId
* The report id
*/
public boolean deleteMediaByReportId(int reportId) {
final String selectionArgs[] = { String.valueOf(reportId) };
final String selection = ID + " =?";
return super.delete(TABLE, selection, selectionArgs) > 0;
}
/**
* Delete all media attached to this checkin
*/
public boolean deleteMediaByCheckinId(int checkinId) {
final String selectionArgs[] = { String.valueOf(checkinId) };
final String selection = ID + " =?";
return super.delete(TABLE, selection, selectionArgs) > 0;
}
/**
* Update media by report Id
*
* @param reportId
* The report id
*/
public boolean updateMediaByReportId(int reportId) {
return false;
}
/**
* Update media by checkin id
*
* @param checkinId
* The checkin id
*/
public boolean updateMediaByCheckinId(int checkinId) {
return false;
}
public boolean deleteReportMediaByIdAndLink(int reportId, String link) {
final String selectionArgs[] = { String.valueOf(reportId), link };
final String selection = ID + " =? AND " + LINK + " =?";
return super.delete(TABLE, selection, selectionArgs) > 0;
}
/*
* (non-Javadoc)
*
* @see com.ushahidi.android.app.database.IMediaDao#addMedia(java.util.List)
*/
@Override
public boolean addMedia(List<MediaEntity> sMedia) {
try {
mDb.beginTransaction();
for (MediaEntity media : sMedia) {
addMedia(media);
}
mDb.setTransactionSuccessful();
} finally {
mDb.endTransaction();
}
return true;
}
/*
* (non-Javadoc)
*
* @see
* com.ushahidi.android.app.database.IMediaDao#addMedia(com.ushahidi.android
* .app.entities.Media)
*/
@Override
public boolean addMedia(MediaEntity media) {
// set values
setContentValue(media);
return super.insert(TABLE, getContentValue()) > 0;
}
/*
* (non-Javadoc)
*
* @see
* com.ushahidi.android.app.database.DbContentProvider#cursorToEntity(android
* .database.Cursor)
*/
@SuppressWarnings("unchecked")
@Override
protected MediaEntity cursorToEntity(Cursor cursor) {
MediaEntity media = new MediaEntity();
int idIndex;
int reportIdIndex;
int checkinIdIndex;
int typeIndex;
int linkIndex;
if (cursor != null) {
if (cursor.getColumnIndex(ID) != -1) {
idIndex = cursor.getColumnIndexOrThrow(ID);
media.setDbId(cursor.getInt(idIndex));
}
if (cursor.getColumnIndex(REPORT_ID) != -1) {
reportIdIndex = cursor.getColumnIndexOrThrow(REPORT_ID);
media.setReportId(cursor.getInt(reportIdIndex));
}
if (cursor.getColumnIndex(CHECKIN_ID) != -1) {
checkinIdIndex = cursor.getColumnIndexOrThrow(CHECKIN_ID);
media.setCheckinId(cursor.getInt(checkinIdIndex));
}
if (cursor.getColumnIndex(TYPE) != -1) {
typeIndex = cursor.getColumnIndexOrThrow(TYPE);
media.setType(cursor.getInt(typeIndex));
}
if (cursor.getColumnIndex(LINK) != -1) {
linkIndex = cursor.getColumnIndexOrThrow(LINK);
media.setLink(cursor.getString(linkIndex));
}
}
return media;
}
private void setContentValue(MediaEntity media) {
initialValues = new ContentValues();
initialValues.put(MEDIA_ID, media.getMediaId());
initialValues.put(REPORT_ID, media.getReportId());
initialValues.put(CHECKIN_ID, media.getCheckinId());
initialValues.put(TYPE, media.getType());
initialValues.put(LINK, media.getLink());
}
private ContentValues getContentValue() {
return initialValues;
}
public boolean deleteReportNews(int reportId) {
final String selectionArgs[] = { String.valueOf(reportId), String.valueOf(IMediaSchema.NEWS) };
final String selection = REPORT_ID + " =? AND " + TYPE + " =?";
return super.delete(TABLE, selection, selectionArgs) > 0 ;
}
public boolean deleteReportPhoto(int reportId) {
final String selectionArgs[] = { String.valueOf(reportId), String.valueOf(IMediaSchema.IMAGE) };
final String selection = REPORT_ID + " =? AND " + TYPE + " =?";
return super.delete(TABLE, selection, selectionArgs) > 0 ;
}
public boolean deleteCheckinPhoto(int checkinId) {
final String selectionArgs[] = { String.valueOf(checkinId), String.valueOf(IMediaSchema.IMAGE) };
final String selection = CHECKIN_ID + " =? AND " + TYPE + " =?";
return super.delete(TABLE, selection, selectionArgs) > 0 ;
}
}