package nz.co.android.cowseye.database;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
/**
* This class lets the user query the local database
* @author Mitchell Lane
*
*/
public class DatabaseAdapter {
/* Table Names */
public static final String INCIDENT_TABLE_NAME = "Incident";
/* Database Attribute Names */
public static final String ATTRIBUTE_INCIDENT_ID = "id";
public static final String ATTRIBUTE_INCIDENT_THUMBNAIL_URL = "thumbnail_url";
public static final String ATTRIBUTE_INCIDENT_IMAGE_URL = "image_url";
public static final String ATTRIBUTE_INCIDENT_DESCRIPTION = "description";
public static final String ATTRIBUTE_INCIDENT_LATITUDE = "latitude";
public static final String ATTRIBUTE_INCIDENT_LONGITUDE = "longitude";
public static final String ATTRIBUTE_INCIDENT_PHYSICAL_LOCATION = "physical_location";
public static final String ATTRIBUTE_INCIDENT_LOCAL_THUMBNAIL_URL = "local_thumbnail_url";
public static final String ATTRIBUTE_INCIDENT_LOCAL_IMAGE_URL = "local_image_url";
public static final int COLUMN_INCIDENT_ID = 0;
public static final int COLUMN_INCIDENT_THUMBNAIL_URL = 1;
public static final int COLUMN_INCIDENT_IMAGE_URL = 2;
public static final int COLUMN_INCIDENT_DESCRIPTION = 3;
public static final int COLUMN_INCIDENT_LATITUDE = 4;
public static final int COLUMN_INCIDENT_LONGITUDE = 5;
public static final int COLUMN_INCIDENT_PHYSICAL_LOCATION = 6;
public static final int COLUMN_INCIDENT_LOCAL_THUMBNAIL_URL = 7;
public static final int COLUMN_INCIDENT_LOCAL_IMAGE_URL = 8;
private SQLiteDatabase database;
public DatabaseAdapter(DatabaseConstructor dbHelper){
database = dbHelper.getDatabase();
}
public boolean isDatabaseOpen() {
return database.isOpen();
}
public synchronized List<Incident> getAllIncidents() {
List<Incident> incidents = new ArrayList<Incident>();
Cursor c = database.query(INCIDENT_TABLE_NAME, null, null, null, null, null, ATTRIBUTE_INCIDENT_ID + " ASC");
if(c != null){
while(c.moveToNext()){
IncidentBuilder builder = new IncidentBuilder();
builder.setId(c.getInt(COLUMN_INCIDENT_ID))
.setThumbnailUrl(c.getString(COLUMN_INCIDENT_THUMBNAIL_URL))
.setImageUrl(c.getString(COLUMN_INCIDENT_IMAGE_URL))
.setDescription(c.getString(COLUMN_INCIDENT_DESCRIPTION))
.setLatitude(c.getFloat(COLUMN_INCIDENT_LATITUDE))
.setLongitude(c.getFloat(COLUMN_INCIDENT_LONGITUDE))
.setPhysicalLocation(c.getString(COLUMN_INCIDENT_PHYSICAL_LOCATION))
.setLocalThumbnailUrl(c.getString(COLUMN_INCIDENT_LOCAL_THUMBNAIL_URL))
.setLocalImageUrl(c.getString(COLUMN_INCIDENT_LOCAL_IMAGE_URL));
incidents.add(builder.build());
}
}
return incidents;
}
public synchronized Incident getIncident(String id) {
Incident incident = new Incident();
IncidentBuilder builder = new IncidentBuilder();
Cursor c = database.query(INCIDENT_TABLE_NAME, null, ATTRIBUTE_INCIDENT_ID+ " = ?", new String[]{id}, null, null, null);
if(c != null && c.moveToNext()){
builder.setId(c.getInt(COLUMN_INCIDENT_ID))
.setThumbnailUrl(c.getString(COLUMN_INCIDENT_THUMBNAIL_URL))
.setImageUrl(c.getString(COLUMN_INCIDENT_IMAGE_URL))
.setDescription(c.getString(COLUMN_INCIDENT_DESCRIPTION))
.setLatitude(c.getFloat(COLUMN_INCIDENT_LATITUDE))
.setLongitude(c.getFloat(COLUMN_INCIDENT_LONGITUDE))
.setPhysicalLocation(c.getString(COLUMN_INCIDENT_PHYSICAL_LOCATION))
.setLocalThumbnailUrl(c.getString(COLUMN_INCIDENT_LOCAL_THUMBNAIL_URL))
.setLocalImageUrl(c.getString(COLUMN_INCIDENT_LOCAL_IMAGE_URL));
incident = builder.build();
}
return incident;
}
/**
*
* Updates the incident with the given content values
* @param valuesToChange - values to be updated
* */
public synchronized void insertIncident(Incident incident) {
database.insert(INCIDENT_TABLE_NAME, null, incident.getContentValues());
}
/**
*
* Updates the incident with the given content values
* @param valuesToChange - values to be updated
* */
public synchronized void updateIncidentTable(String incidentId, ContentValues valuesToChange) {
database.update(INCIDENT_TABLE_NAME, valuesToChange, ATTRIBUTE_INCIDENT_ID+" = ?", new String[]{incidentId});
}
public ContentValues getLocalThumbPathNameContentValues(String newPathName){
ContentValues cv = new ContentValues();
cv.put(ATTRIBUTE_INCIDENT_LOCAL_THUMBNAIL_URL, newPathName);
return cv;
}
public ContentValues getLocalImagePathNameContentValues(String newPathName){
ContentValues cv = new ContentValues();
cv.put(ATTRIBUTE_INCIDENT_LOCAL_IMAGE_URL, newPathName);
return cv;
}
}