/**
* Copyright (c) 2012 Vinayak Solutions Private Limited
* See the file license.txt for copying permission.
*/
package com.vinsol.expensetracker.helpers;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import com.vinsol.expensetracker.R;
import com.vinsol.expensetracker.models.Entry;
import com.vinsol.expensetracker.models.Favorite;
import com.vinsol.expensetracker.models.ListDatetimeAmount;
import com.vinsol.expensetracker.utils.Log;
public class ConvertCursorToListString {
private Context context;
private DatabaseAdapter adapter;
public ConvertCursorToListString(Context context) {
this.context = context;
adapter = new DatabaseAdapter(context);
}
public List<Favorite> getFavoriteList() {
adapter.open();
return getFavoriteList(adapter.getFavoriteTableComplete());
}
public List<Favorite> getFavoriteList(Cursor cursor) {
List<Favorite> mainlist = new ArrayList<Favorite>();
Favorite listFavorite;
if (cursor.getCount() >= 1) {
cursor.moveToFirst();
do {
listFavorite = new Favorite();
listFavorite.amount = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_AMOUNT));
listFavorite.id = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_ID));
listFavorite.description = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_TAG));
listFavorite.type = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_TYPE));
listFavorite.location = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_LOCATION));
listFavorite.myHash = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_MY_HASH));
listFavorite.updatedAt = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_UPDATED_AT));
listFavorite.deleted = cursor.getInt(cursor.getColumnIndex(DatabaseAdapter.KEY_DELETE_BIT))>0;
listFavorite.idFromServer = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_ID_FROM_SERVER));
listFavorite.fileUploaded = cursor.getInt(cursor.getColumnIndex(DatabaseAdapter.KEY_FILE_UPLOADED))>0;
listFavorite.fileToDownload = cursor.getInt(cursor.getColumnIndex(DatabaseAdapter.KEY_FILE_TO_DOWNLOAD))>0;
listFavorite.syncBit = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_SYNC_BIT));
listFavorite.fileUpdatedAt = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_FILE_UPDATED_AT));
if (listFavorite.description == null
|| listFavorite.description.equals("")) {
if (listFavorite.type.equals(context.getString(R.string.text))) {
listFavorite.description = context.getString(R.string.finished_textentry);
} else if (listFavorite.type.equals(context.getString(R.string.voice))) {
listFavorite.description = context.getString(R.string.finished_voiceentry);
} else if (listFavorite.type.equals(context.getString(R.string.camera))) {
listFavorite.description = context.getString(R.string.finished_cameraentry);
}
}
mainlist.add(listFavorite);
cursor.moveToNext();
} while (!cursor.isAfterLast());
}
cursor.close();
adapter.close();
return mainlist;
}
private String getValue(DisplayDate mDisplayDate, boolean isGraph,
String id, int type) {
if (isGraph == true) {
return mDisplayDate.getDisplayDateHeaderGraph();
} else {
return mDisplayDate.getHeaderFooterListDisplayDate(type);
}
}
public List<ListDatetimeAmount> getDateListString(boolean isAscending,
boolean isGraph, String id, int type) {
ListDatetimeAmount listDatetimeAmount = new ListDatetimeAmount();
adapter.open();
Cursor cursor;
if (!isAscending) {
cursor = getCursor(id, false);
} else {
cursor = getCursor(id, true);
}
StringProcessing mStringProcessing = new StringProcessing();
List<ListDatetimeAmount> mainlist = new ArrayList<ListDatetimeAmount>();
double temptotalAmount = 0;
String totalAmountString = null;
boolean isTempAmountNull = false;
if (cursor.getCount() >= 1) {
cursor.moveToFirst();
Calendar mTempCalendar = Calendar.getInstance();
mTempCalendar.setTimeInMillis(cursor.getLong(cursor.getColumnIndex(DatabaseAdapter.KEY_DATE_TIME)));
mTempCalendar.setFirstDayOfWeek(Calendar.MONDAY);
DisplayDate mDisplayDate = new DisplayDate(mTempCalendar);
if (!mDisplayDate.isCurrentWeek()) {
DisplayDate currentWeekDisplayDate = new DisplayDate(Calendar.getInstance());
listDatetimeAmount.dateTime = getValue(currentWeekDisplayDate,isGraph, id, type);
listDatetimeAmount.amount = "";
mainlist.add(listDatetimeAmount);
listDatetimeAmount = new ListDatetimeAmount();
}
do {
mTempCalendar.setTimeInMillis(cursor.getLong(cursor.getColumnIndex(DatabaseAdapter.KEY_DATE_TIME)));
mTempCalendar.setFirstDayOfWeek(Calendar.MONDAY);
mDisplayDate = new DisplayDate(mTempCalendar);
if (!mDisplayDate.isCurrentWeek()) {
DisplayDate currentWeekDisplayDate = new DisplayDate(Calendar.getInstance());
listDatetimeAmount.dateTime = getValue(currentWeekDisplayDate, isGraph, id, type);
}
listDatetimeAmount.dateTime = getValue(mDisplayDate, isGraph,id, type);
String tempAmount = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_AMOUNT));
if (tempAmount != null && !tempAmount.equals("")) {
try {
temptotalAmount += Double.parseDouble(tempAmount);
} catch (NumberFormatException e) {
e.printStackTrace();
}
} else {
isTempAmountNull = true;
}
cursor.moveToNext();
if (!cursor.isAfterLast()) {
Calendar mTempSubCalendar = Calendar.getInstance();
mTempSubCalendar.setTimeInMillis(cursor.getLong(cursor.getColumnIndex(DatabaseAdapter.KEY_DATE_TIME)));
mTempSubCalendar.setFirstDayOfWeek(Calendar.MONDAY);
DisplayDate mTempDisplayDate = new DisplayDate(mTempSubCalendar);
if (!listDatetimeAmount.dateTime.equals(getValue(mTempDisplayDate, isGraph, id, type))) {
totalAmountString = getTotalAmount(isTempAmountNull,temptotalAmount, totalAmountString);
isTempAmountNull = false;
totalAmountString = mStringProcessing.getStringDoubleDecimal(totalAmountString);
listDatetimeAmount.amount = totalAmountString;
temptotalAmount = 0;
}
} else {
cursor.moveToLast();
totalAmountString = getTotalAmount(isTempAmountNull,temptotalAmount, totalAmountString);
isTempAmountNull = false;
totalAmountString = mStringProcessing.getStringDoubleDecimal(totalAmountString);
listDatetimeAmount.amount = totalAmountString;
cursor.moveToNext();
}
if (totalAmountString != null) {
mainlist.add(listDatetimeAmount);
listDatetimeAmount = new ListDatetimeAmount();
totalAmountString = null;
}
} while (!cursor.isAfterLast());
}
cursor.close();
adapter.close();
return mainlist;
}
private String getTotalAmount(Boolean isTempAmountNull,
double temptotalAmount, String totalAmountString) {
if (isTempAmountNull) {
if (temptotalAmount != 0) {
totalAmountString = temptotalAmount + " ?";
} else {
totalAmountString = "?";
}
} else {
totalAmountString = temptotalAmount + "";
}
return totalAmountString;
}
public List<Entry> getEntryListFileNotUploaded() {
adapter.open();
return getEntryList(adapter.getEntryDataFileNotUploaded());
}
public List<Favorite> getFavoriteListFileNotUploaded() {
adapter.open();
return getFavoriteList(adapter.getFavoriteDataFileNotUploaded());
}
public List<Entry> getEntryListNotSyncedAndCreated() {
adapter.open();
return getEntryList(adapter.getEntryDataNotSyncedAndCreated());
}
public List<Entry> getEntryListNotSyncedAndUpdated() {
adapter.open();
return getEntryList(adapter.getEntryDataNotSyncedAndUpdated());
}
public List<Favorite> getFavoriteListNotSyncedAndUpdated() {
adapter.open();
return getFavoriteList(adapter.getFavoriteDataNotSyncedAndUpdated());
}
public List<Entry> getEntryListNotSyncedAndDeleted() {
adapter.open();
return getEntryList(adapter.getEntryDataNotSyncedAndDeleted());
}
public List<Favorite> getFavoriteListNotSyncedAndDeleted() {
adapter.open();
return getFavoriteList(adapter.getFavoriteDataNotSyncedAndDeleted());
}
public List<Favorite> getFavoriteListNotSyncedAndCreated() {
adapter.open();
return getFavoriteList(adapter.getFavoriteDataNotSyncedAndCreated());
}
public List<Entry> getEntryList(Boolean isAscending, String id) {
adapter.open();
return getEntryList(getCursor(id, isAscending));
}
public List<Entry> getEntryListFilesToDownload() {
adapter.open();
return getEntryList(adapter.getEntryDataFileToDownload());
}
public List<Favorite> getFavoriteListFilesToDownload() {
adapter.open();
return getFavoriteList(adapter.getFavoriteDataFileToDownload());
}
public Favorite getSingleFavoriteByHash(String hash) {
adapter.open();
List<Favorite> favorites = getFavoriteList(adapter.getFavoriteByHash(hash));
if(favorites.size() == 1) {
return favorites.get(0);
}
return null;
}
public Entry getSingleEntryByHash(String hash) {
adapter.open();
List<Entry> entries = getEntryList(adapter.getEntryByHash(hash));
if(entries.size() == 1) {
return entries.get(0);
}
return null;
}
public List<Entry> getEntryList(Cursor cursor) {
List<Entry> mainlist = new ArrayList<Entry>();
if (cursor.getCount() >= 1) {
cursor.moveToFirst();
do {
Entry mEntry = new Entry();
mEntry.id = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_ID));
mEntry.amount = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_AMOUNT));
mEntry.favorite = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_FAVORITE));
mEntry.location = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_LOCATION));
mEntry.description = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_TAG));
mEntry.type = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_TYPE));
mEntry.timeInMillis = cursor.getLong(cursor.getColumnIndex(DatabaseAdapter.KEY_DATE_TIME));
mEntry.myHash = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_MY_HASH));
mEntry.idFromServer = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_ID_FROM_SERVER));
mEntry.updatedAt = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_UPDATED_AT));
mEntry.deleted = cursor.getInt(cursor.getColumnIndex(DatabaseAdapter.KEY_DELETE_BIT))>0;
mEntry.fileUploaded = cursor.getInt(cursor.getColumnIndex(DatabaseAdapter.KEY_FILE_UPLOADED))>0;
mEntry.fileToDownload = cursor.getInt(cursor.getColumnIndex(DatabaseAdapter.KEY_FILE_TO_DOWNLOAD))>0;
mEntry.syncBit = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_SYNC_BIT));
mEntry.fileUpdatedAt = cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_FILE_UPDATED_AT));
mainlist.add(mEntry);
Log.d("*** "+mEntry.deleted);
cursor.moveToNext();
} while (!cursor.isAfterLast());
}
cursor.close();
adapter.close();
return mainlist;
}
private Cursor getCursor(String id, boolean isAscending) {
if (isAscending) {
if (id == null || id.equals("")) {
return adapter.getEntryTableDateDatabaseAscending();
} else {
return adapter.getEntryTableDateDatabaseAscending(id);
}
}
if (id == null || id.equals("")) {
return adapter.getEntryTableDateDatabaseDescending();
} else {
return adapter.getEntryTableDateDatabaseDescending(id);
}
}
}