package au.id.teda.broadband.usage.database;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import au.id.teda.broadband.usage.util.HourlyVolumeUsage;
public class HourlyDataTableAdapter {
//private static final String DEBUG_TAG = BaseActivity.DEBUG_TAG;
// Set variables for adapter
public static final String KEY_ROWID = "_id";
public static final String ACCOUNT = "account";
public static final String DAY = "day";
public static final String HOUR = "hour";
public static final String ANYTIME = "anytime";
public static final String PEAK = "peak";
public static final String OFFPEAK = "offpeak";
public static final String UPLOADS = "uploads";
public static final String FREEZONE = "freezone";
public static final String TABLE_NAME = "hourly_volume_usage";
private SQLiteDatabase mDatabase;
private DatabaseHelper mDatabbaseHelper;
/**
* VolumeUsageDailyDbAdapter class constructor
* @param context
*/
public HourlyDataTableAdapter (Context context){
mDatabbaseHelper = new DatabaseHelper(context);
}
/**
* Open database. If it cannot be opened, try to create a new.
* If it cannot be created, throw an exception to signal the failure
* @throws SQLException
*/
public void open() throws SQLException {
mDatabase = mDatabbaseHelper.getWritableDatabase();
}
/**
* Close database
*/
public void close() {
mDatabbaseHelper.close();
}
/**
* Add entry or replace if exists
* @param userAccount
* @param hour
* @param day
* @param peak
* @param offpeak
* @param uploads
* @param freezone
* @return Row ID
*/
public Long addReplaceEntry (String userAccount, long hour, String day, long anytime, long peak, long offpeak, long uploads, long freezone){
String comma = ", ";
SQLiteStatement statement = null;
String INSERT_STATEMENT = "INSERT OR REPLACE INTO " + TABLE_NAME +
" (" + DAY + comma + ACCOUNT + comma + HOUR + comma
+ ANYTIME + comma + PEAK + comma + OFFPEAK + comma + UPLOADS + comma + FREEZONE + ")" +
" VALUES (?,?,?,?,?,?,?)";
statement = mDatabase.compileStatement(INSERT_STATEMENT);
statement.bindString(1, userAccount);
statement.bindString(2, day);
statement.bindString(3, Long.toString(hour));
statement.bindString(4, Long.toString(anytime));
statement.bindString(5, Long.toString(peak));
statement.bindString(6, Long.toString(offpeak));
statement.bindString(7, Long.toString(uploads));
statement.bindString(8, Long.toString(freezone));
// Insert the new row, returning the primary key value of the new row
long newRowId;
newRowId = statement.executeInsert();
statement.close();
return newRowId;
}
/**
* Return a cursor for a given period
* @param period : yyyyMM string to query database
* @return cursor with period values
* @throws SQLException
*/
public Cursor getPriodUsageCursor (String period) throws SQLException {
SQLiteDatabase database = mDatabbaseHelper.getWritableDatabase();
//Log.d(DEBUG_TAG, "DailyDataDBAdapter > fetchPeriodUsage(): " + period);
String dbQuery = "SELECT * FROM " + TABLE_NAME
+ " WHERE " + DAY
+ " = '" + period +"';";
Cursor cursor = database.rawQuery(dbQuery, null);
return cursor;
}
/**
* Get DailyVolumeUsage[] array for a given period(month)
* @param period
* @return DailyVolumeUsage[]
*/
public HourlyVolumeUsage[] getDailyVolumeUsage(String period){
// Open database connection
open();
// Get cursor of values from database
Cursor cursor = getPriodUsageCursor(period);
// Intiate lista array to store cursor
List<HourlyVolumeUsage> usage = new ArrayList<HourlyVolumeUsage>();
// Get column numbers for use with cursor
int COLUMN_INDEX_DAY = cursor.getColumnIndex(DAY);
int COLUMN_INDEX_HOUR = cursor.getColumnIndex(HOUR);
int COLUMN_INDEX_ANYTIME = cursor.getColumnIndex(ANYTIME);
int COLUMN_INDEX_PEAK = cursor.getColumnIndex(PEAK);
int COLUMN_INDEX_OFFPEAK = cursor.getColumnIndex(OFFPEAK);
int COLUMN_INDEX_UPLOADS = cursor.getColumnIndex(UPLOADS);
int COLUMN_INDEX_FREEZONE = cursor.getColumnIndex(FREEZONE);
// Iterate cursor and store values in array list
cursor.moveToFirst();
while (cursor.isAfterLast() == false) {
String day = cursor.getString(COLUMN_INDEX_DAY);
Long hour = cursor.getLong(COLUMN_INDEX_HOUR);
long anytime = cursor.getLong(COLUMN_INDEX_ANYTIME);
Long peak = cursor.getLong(COLUMN_INDEX_PEAK);
Long offpeak = cursor.getLong(COLUMN_INDEX_OFFPEAK);
Long uploads = cursor.getLong(COLUMN_INDEX_UPLOADS);
Long freezone = cursor.getLong(COLUMN_INDEX_FREEZONE);
usage.add(new HourlyVolumeUsage(day, hour, anytime, peak, offpeak, uploads, freezone));
cursor.moveToNext();
}
cursor.close();
// Close database connection
close();
// Convert list array to an array of DailyVolumeUsage
HourlyVolumeUsage volumeUsage[] = usage.toArray(new HourlyVolumeUsage[usage.size()]);
// Return volume dev array
return volumeUsage;
}
}