/** ** 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.Checkin; /** * @author eyedol */ public class CheckinDao extends DbContentProvider implements ICheckinDao, ICheckinSchema { /** * @param db */ public CheckinDao(SQLiteDatabase db) { super(db); } private Cursor cursor; private List<Checkin> listCheckin; private ContentValues initialValues; @Override public List<Checkin> fetchAllCheckins() { listCheckin = new ArrayList<Checkin>(); final String sortOrder = CHECKIN_DATE + " DESC"; cursor = super.query(CHECKINS_TABLE, CHECKINS_COLUMNS, null, null, sortOrder); if (cursor != null) { cursor.moveToFirst(); while (!cursor.isAfterLast()) { Checkin checkin = cursorToEntity(cursor); listCheckin.add(checkin); cursor.moveToNext(); } cursor.close(); } return listCheckin; } @Override public List<Checkin> fetchAllPendingCheckins() { listCheckin = new ArrayList<Checkin>(); final String sortOrder = CHECKIN_DATE + " DESC"; final String selection = CHECKIN_PENDING + " = ?"; final String selectionArgs[] = { String.valueOf(1) }; cursor = super.query(CHECKINS_TABLE, CHECKINS_COLUMNS, selection, selectionArgs, sortOrder); if (cursor != null) { cursor.moveToFirst(); while (!cursor.isAfterLast()) { Checkin checkin = cursorToEntity(cursor); listCheckin.add(checkin); cursor.moveToNext(); } cursor.close(); } return listCheckin; } @Override public Checkin fetchPendingCheckinById(int checkinId) { listCheckin = new ArrayList<Checkin>(); final String sortOrder = CHECKIN_DATE + " DESC"; final String selection = CHECKIN_PENDING + " = ? AND " + ID + " =?"; final String selectionArgs[] = { String.valueOf(1), String.valueOf(checkinId) }; Checkin checkin = new Checkin(); cursor = super.query(CHECKINS_TABLE, CHECKINS_COLUMNS, selection, selectionArgs, sortOrder); if (cursor != null) { cursor.moveToFirst(); while (!cursor.isAfterLast()) { checkin = cursorToEntity(cursor); cursor.moveToNext(); } cursor.close(); } return checkin; } @SuppressWarnings("unchecked") @Override protected Checkin cursorToEntity(Cursor cursor) { Checkin checkin = new Checkin(); int idIndex; int checkinIdIndex; int userIdIndex; int dateIndex; int messageIndex; int locationIndex; int latitudeIndex; int longitudeIndex; if (cursor != null) { if (cursor.getColumnIndex(ID) != -1) { idIndex = cursor.getColumnIndexOrThrow(ID); checkin.setDbId(cursor.getInt(idIndex)); } if (cursor.getColumnIndex(CHECKIN_ID) != -1) { checkinIdIndex = cursor.getColumnIndexOrThrow(CHECKIN_ID); checkin.setCheckinId(cursor.getInt(checkinIdIndex)); } if (cursor.getColumnIndex(CHECKIN_USER_ID) != -1) { userIdIndex = cursor.getColumnIndexOrThrow(CHECKIN_USER_ID); checkin.setUserId(cursor.getInt(userIdIndex)); } if (cursor.getColumnIndex(CHECKIN_DATE) != -1) { dateIndex = cursor.getColumnIndexOrThrow(CHECKIN_DATE); checkin.setDate(cursor.getString(dateIndex)); } if (cursor.getColumnIndex(CHECKIN_MESG) != -1) { messageIndex = cursor.getColumnIndexOrThrow(CHECKIN_MESG); checkin.setMessage(cursor.getString(messageIndex)); } if (cursor.getColumnIndex(CHECKIN_LOC_NAME) != -1) { locationIndex = cursor.getColumnIndexOrThrow(CHECKIN_LOC_NAME); checkin.setLocationName(cursor.getString(locationIndex)); } if (cursor.getColumnIndex(CHECKIN_LOC_LATITUDE) != -1) { latitudeIndex = cursor .getColumnIndexOrThrow(CHECKIN_LOC_LATITUDE); checkin.setLocationLatitude(cursor.getString(latitudeIndex)); } if (cursor.getColumnIndex(CHECKIN_LOC_LONGITUDE) != -1) { longitudeIndex = cursor .getColumnIndexOrThrow(CHECKIN_LOC_LONGITUDE); checkin.setLocationLongitude(cursor.getString(longitudeIndex)); } } return checkin; } @Override public List<Checkin> fetchCheckinsByUserId(int userId) { listCheckin = new ArrayList<Checkin>(); final String sortOrder = CHECKIN_DATE + " DESC"; final String selectionArgs[] = { String.valueOf(userId), String.valueOf(0) }; final String selection = CHECKIN_USER_ID + " = ? AND " + CHECKIN_PENDING + " =? "; cursor = super.query(CHECKINS_TABLE, CHECKINS_COLUMNS, selection, selectionArgs, sortOrder); if (cursor != null) { cursor.moveToFirst(); while (!cursor.isAfterLast()) { Checkin checkin = cursorToEntity(cursor); listCheckin.add(checkin); cursor.moveToNext(); } cursor.close(); } return listCheckin; } @Override public boolean deleteAllCheckins() { return super.delete(CHECKINS_TABLE, null, null) > 0; } @Override public boolean addCheckin(Checkin checkin) { // set values setContentValue(checkin); return super.insert(CHECKINS_TABLE, getContentValue()) > 0; } @Override public boolean addCheckins(List<Checkin> checkins) { try { mDb.beginTransaction(); for (Checkin checkin : checkins) { addCheckin(checkin); } mDb.setTransactionSuccessful(); } finally { mDb.endTransaction(); } return true; } /** * Create table for checkins * * @return */ private void setContentValue(Checkin checkins) { initialValues = new ContentValues(); initialValues.put(CHECKIN_ID, checkins.getCheckinId()); initialValues.put(CHECKIN_USER_ID, checkins.getUserId()); initialValues.put(CHECKIN_MESG, checkins.getMessage()); initialValues.put(CHECKIN_DATE, checkins.getDate()); initialValues.put(CHECKIN_LOC_NAME, checkins.getLocationName()); initialValues.put(CHECKIN_LOC_LATITUDE, checkins.getLocationLatitude()); initialValues.put(CHECKIN_LOC_LONGITUDE, checkins.getLocationLongitude()); initialValues.put(CHECKIN_PENDING, checkins.getPending()); } private ContentValues getContentValue() { return initialValues; } @Override public List<Checkin> fetchPendingCheckinsByUserId(int userId) { listCheckin = new ArrayList<Checkin>(); final String sortOrder = CHECKIN_DATE + " DESC"; final String selectionArgs[] = { String.valueOf(userId), String.valueOf(1) }; final String selection = CHECKIN_USER_ID + " = ? AND " + CHECKIN_PENDING + " =? "; cursor = super.query(CHECKINS_TABLE, CHECKINS_COLUMNS, selection, selectionArgs, sortOrder); if (cursor != null) { cursor.moveToFirst(); while (!cursor.isAfterLast()) { Checkin checkin = cursorToEntity(cursor); listCheckin.add(checkin); cursor.moveToNext(); } cursor.close(); } return listCheckin; } @Override public boolean deletePendingCheckinById(int checkinId) { final String selectionArgs[] = { String.valueOf(checkinId), String.valueOf(1) }; final String selection = ID + " = ? AND " + CHECKIN_PENDING + " = ?"; return super.delete(CHECKINS_TABLE, selection, selectionArgs) > 0; } public boolean deleteCheckinById(int checkinId) { final String selectionArgs[] = { String.valueOf(checkinId), String.valueOf(0) }; final String selection = ID + " = ? AND " + CHECKIN_PENDING + " = ?"; return super.delete(CHECKINS_TABLE, selection, selectionArgs) > 0; } @Override public boolean updatePendingCheckin(int checkinId, Checkin checkin) { boolean status = false; try { mDb.beginTransaction(); final String selectionArgs[] = { String.valueOf(checkinId), String.valueOf(1) }; final String selection = ID + " = ? AND " + CHECKIN_PENDING + " = ?"; setContentValue(checkin); super.update(CHECKINS_TABLE, getContentValue(), selection, selectionArgs); mDb.setTransactionSuccessful(); status = true; } finally { mDb.endTransaction(); } return status; } @Override public int fetchPendingCheckinIdByDate(String date) { final String sortOrder = ID + " DESC"; final String selectionArgs[] = { date, String.valueOf(1) }; final String selection = CHECKIN_DATE + " =? AND " + CHECKIN_PENDING + " =? "; int id = 0; listCheckin= new ArrayList<Checkin>(); cursor = super.query(CHECKINS_TABLE, null, selection, selectionArgs, sortOrder); if (cursor != null) { cursor.moveToFirst(); while (!cursor.isAfterLast()) { Checkin checkin = cursorToEntity(cursor); id = checkin.getDbId(); cursor.moveToNext(); } cursor.close(); } return id; } }