package com.echo5bravo.govre.DAL;
import java.util.ArrayList;
import com.echo5bravo.govre.INFO.Schedule;
import android.content.Context;
import android.database.Cursor;
public abstract class BusinessBaseSchedule{
// LOCAL VARIABLES AND PROPERTIES
private static final String TAG = BusinessBaseSchedule.class.getSimpleName();
Schedule currentSchedule = new Schedule();
static SQLiteFactoryAdapter dbAdapter;
// DATABASE
/** Keep track of context so that we can load SQL from string resources */
private final Context myContext;
public final Schedule getCurrentSchedule()
{
return currentSchedule;
}
public final void setCurrentPerson(Schedule value)
{
currentSchedule = value;
}
public BusinessBaseSchedule(Context context) {
this.myContext = context;
SQLiteFactoryAdapter dbAdapter = SQLiteFactoryAdapter.getSQLiteFactoryAdapterInstance(myContext);
try
{
dbAdapter.createOrUseDataBase();
}
catch (Exception e) {
//Log.e(TAG, "Error " + e.toString());
}
}
/***
* Public Function: getAllSchedules()
*
* @return ArrayList<Schedule> : All Schedules
*/
public static synchronized ArrayList<Schedule> getAllSchedules(Context context, String todaysScheduleType)
{
//Create SQLFactoryAdapter instance
SQLiteFactoryAdapter dbAdapter = SQLiteFactoryAdapter.getSQLiteFactoryAdapterInstance(context);
//Logic to create or use the existing database
try
{
dbAdapter.createOrUseDataBase();
}
catch (Exception e) {
//Log.e(TAG, "Error " + e.toString());
}
//Populate SQL
String sql = "SELECT DISTINCT " +
" trips.route_id " +
" , trips.service_id " +
" , trips.trip_id " +
" , trips.trip_headsign " +
" , trips.trip_short_name " +
" , trips.direction_id " +
" , trips.block_id " +
" , trips.shape_id " +
" , CASE WHEN (SUBSTR([service_id], LENGTH([service_id])-1, 2) = '-S') THEN 'SPECIAL' ELSE 'REGULAR' END AS SCHEDULE_TYPE " +
" , stop_times.arrival_time " +
" , stop_times.departure_time " +
" , stop_times.stop_id " +
" , stop_times.stop_sequence " +
" , stop_times.stop_headsign " +
" , stop_times.pickup_type " +
" , stop_times.drop_off_type " +
" , stop_times.shape_dist_traveled " +
" FROM " +
" trips INNER JOIN stop_times ON trips.trip_id = stop_times.trip_id " +
" WHERE SCHEDULE_TYPE = '" + todaysScheduleType + "' " +
" ORDER BY stop_times.arrival_time ASC; ";
//Open Database
dbAdapter.openDataBase();
//Log.e(TAG, "BusinessBaseSchedule: getAllSchedules() database OPEN");
//Create SQLite Cursor
Cursor cur = dbAdapter.selectRecordsFromDB(sql, null);
//Our container objects
ArrayList<Schedule> curScheduleList = new ArrayList<Schedule>();
Schedule currentSchedule = new Schedule();
//If anything returned, LOOP through cursor and populate our container objects
try
{
while (cur.moveToNext())
{
//Initiate local variables
Integer _ROUTE_ID = cur.getInt(cur.getColumnIndex("route_id"));
String _SERVICE_ID = cur.getString(cur.getColumnIndex("service_id"));
String _TRIP_ID = cur.getString(cur.getColumnIndex("trip_id"));
String _TRIP_HEADSIGN = cur.getString(cur.getColumnIndex("trip_headsign"));
String _TRIP_SHORT_NAME = cur.getString(cur.getColumnIndex("trip_short_name"));
Integer _TRIP_DIRECTION_ID = cur.getInt(cur.getColumnIndex("direction_id"));
String _TRIP_BLOCK_ID = cur.getString(cur.getColumnIndex("block_id"));
Integer _TRIP_SHAPE_ID = cur.getInt(cur.getColumnIndex("shape_id"));
String _SCHEDULE_TYPE = cur.getString(cur.getColumnIndex("SCHEDULE_TYPE"));
String _SCHEDULE_ARRIVAL_TIME = cur.getString(cur.getColumnIndex("arrival_time"));
String _SCHEDULE_DEPARTURE_TIME = cur.getString(cur.getColumnIndex("departure_time"));
String _SCHEDULE_STOP_ID = cur.getString(cur.getColumnIndex("stop_id"));
Integer _SCHEDULE_STOP_SEQUENCE = cur.getInt(cur.getColumnIndex("stop_sequence"));
String _SCHEDULE_STOP_HEADSIGN = cur.getString(cur.getColumnIndex("stop_headsign"));
Integer _SCHEDULE_STOP_PICK_TYPE = cur.getInt(cur.getColumnIndex("pickup_type"));
Integer _SCHEDULE_STOP_DROP_TYPE = cur.getInt(cur.getColumnIndex("drop_off_type"));
String _SCHEDULE_STOP_DIST_TRAV = cur.getString(cur.getColumnIndex("shape_dist_traveled"));
//Create new instance of object
currentSchedule = new Schedule();
currentSchedule.ROUTE_ID(_ROUTE_ID);
currentSchedule.SERVICE_ID(_SERVICE_ID);
currentSchedule.TRIP_ID(_TRIP_ID);
currentSchedule.TRIP_HEADSIGN(_TRIP_HEADSIGN);
currentSchedule.TRIP_SHORT_NAME(_TRIP_SHORT_NAME);
currentSchedule.TRIP_DIRECTION_ID(_TRIP_DIRECTION_ID);
currentSchedule.TRIP_BLOCK_ID(_TRIP_BLOCK_ID);
currentSchedule.TRIP_SHAPE_ID(_TRIP_SHAPE_ID);
currentSchedule.SCHEDULE_TYPE(_SCHEDULE_TYPE);
currentSchedule.SCHEDULE_ARRIVAL_TIME(_SCHEDULE_ARRIVAL_TIME);
currentSchedule.SCHEDULE_DEPARTURE_TIME(_SCHEDULE_DEPARTURE_TIME);
currentSchedule.SCHEDULE_STOP_ID(_SCHEDULE_STOP_ID);
currentSchedule.SCHEDULE_STOP_SEQUENCE(_SCHEDULE_STOP_SEQUENCE);
currentSchedule.SCHEDULE_STOP_HEADSIGN(_SCHEDULE_STOP_HEADSIGN);
currentSchedule.SCHEDULE_STOP_PICK_TYPE(_SCHEDULE_STOP_PICK_TYPE);
currentSchedule.SCHEDULE_STOP_DROP_TYPE(_SCHEDULE_STOP_DROP_TYPE);
currentSchedule.SCHEDULE_STOP_DIST_TRAV(_SCHEDULE_STOP_DIST_TRAV);
//Add newly populated object to ArrayList
curScheduleList.add(currentSchedule);
}
}
catch (Exception e) {
//Log.e(TAG, "Error " + e.toString());
}
finally{
//House Keeping
cur.close();
cur.deactivate();
dbAdapter.close();
//Log.e(TAG, "BusinessBaseSchedule: getAllSchedules() database CLOSED");
}
return curScheduleList;
}
}