/**
* Copyright (c) 2013 by CDAC Chennai
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @File LocationDBHelper
* @Created: 18.11.2013
* @author: Prasenjit
* Last Change: 18.11.2013 by Prasenjit
*
*/
package com.contextawareframework.dbmanager;
import java.util.ArrayList;
import java.util.List;
import com.contextawareframework.globalvariable.CAFConfig;
import com.contextawareframework.sensors.motionsensors.Accelerometer;
import com.contextawareframework.sensors.positionsensors.LocationPojo;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
/**
* This is a database helper class for all CRUD operation on GPS / Location Sensor in Android
*/
public class LocationDbHelper{
// Database fields
private SQLiteDatabase database;
private ContextAwareSQLiteHelper dbHelper;
private static LocationDbHelper locationDbHelper;
private static boolean enableDebugging = CAFConfig.isEnableDebugging();
private String TAG = "LocationDbHelper" ;
private String[] allColumns = {
ContextAwareSQLiteHelper.COLUMN_LOCATION_ID,
ContextAwareSQLiteHelper.COLUMN_LOCATION_TIMESTAMP, ContextAwareSQLiteHelper.COLUMN_LOCATION_LATITUDE, ContextAwareSQLiteHelper.COLUMN_LOCATION_LONGINTUDE, ContextAwareSQLiteHelper.COLUMN_LOCATION_PLACENAME,
ContextAwareSQLiteHelper.COLUMN_LOCATION_PLACEINFO };
/**
* Method to enable debugging
* @param boolean
*/
public void setEnableDebugging(boolean value)
{
enableDebugging = value;
}
/**
* Method to get the present value of enableDebugging
* @return boolean
*/
public boolean getEnableDebugging()
{
return enableDebugging;
}
/**
* Private Constructor to implement Singleton pattern.
*/
private LocationDbHelper(Context context) {
dbHelper = new ContextAwareSQLiteHelper(context);
}
public static synchronized LocationDbHelper getInstance(Context context)
{
if (locationDbHelper == null)
locationDbHelper = new LocationDbHelper(context);
return locationDbHelper;
}
/**
* Method to open the database for writing
*/
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
/**
* Method to open the database in read only mode
*/
public void openReadOnly()
{
try
{
database = dbHelper.getReadableDatabase();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
/**
* Method to close the database connection
*/
public void close() {
dbHelper.close();
}
/**
* Method to create a row of Location Table
* @param timestamp Store the timestamp in long
* @param latitude Latitude of the place
* @param longitude Longitude of the place
* @param place Name of the place
* @param placeInfo Information about the place
* @return newLocationRow LocationPojo Class object with lat, long, time, place and placeinfo
*/
public LocationPojo createLocationRowData(String timestamp,String latitude, String longitude, String place, String placeInfo)
{
ContentValues values = new ContentValues();
values.put(ContextAwareSQLiteHelper.COLUMN_LOCATION_TIMESTAMP, timestamp);
values.put(ContextAwareSQLiteHelper.COLUMN_LOCATION_LATITUDE,latitude);
values.put(ContextAwareSQLiteHelper.COLUMN_LOCATION_LONGINTUDE, longitude);
values.put(ContextAwareSQLiteHelper.COLUMN_LOCATION_PLACENAME, place);
values.put(ContextAwareSQLiteHelper.COLUMN_LOCATION_PLACEINFO, placeInfo);
long insertId = database.insert(ContextAwareSQLiteHelper.TABLE_LOCATION, null, values);
Cursor cursor = database.query(ContextAwareSQLiteHelper.TABLE_LOCATION,
allColumns, ContextAwareSQLiteHelper.COLUMN_LOCATION_ID + " = " + insertId, null,
null, null, null);
cursor.moveToFirst();
LocationPojo newLocationRow = cursorToLocationRow(cursor);
cursor.close();
if(enableDebugging)
{
Log.d(TAG,"createLocationRowData Method");
}
return newLocationRow;
}
/**
* Method to delete a row from database.
*/
public void deleteRow(LocationPojo location) {
long id = location.getId();
System.out.println("Comment deleted with id: " + id);
database.delete(ContextAwareSQLiteHelper.TABLE_LOCATION, ContextAwareSQLiteHelper.COLUMN_LOCATION_ID
+ " = " + id, null);
}
/**
* Method to list all row of the Location table
*/
public List<LocationPojo> getAllRows() {
List<LocationPojo> locationRow = new ArrayList<LocationPojo>();
Cursor cursor = database.query(ContextAwareSQLiteHelper.TABLE_LOCATION,
allColumns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
LocationPojo location = cursorToLocationRow(cursor);
locationRow.add(location);
cursor.moveToNext();
}
// Make sure to close the cursor
cursor.close();
if(enableDebugging)
{
Log.d(TAG,"getAllRows");
}
return locationRow;
}
/**
* Method to initialize a Location POJO object
*/
private LocationPojo cursorToLocationRow(Cursor cursor)
{
LocationPojo location = new LocationPojo();
// Set the Time-stamp
location.setTimestamp(cursor.getLong(0));
// Set the Latitude Value
location.setLatitude(cursor.getFloat(1));
// Set the Longitude Value
location.setLongitude(cursor.getFloat(2));
// To get the location name using Geolocation if possible
location.setPlaceName(cursor.getString(3));
// To get the place info
location.setPlaceInfo(cursor.getString(4));
if(enableDebugging)
{
Log.d(TAG,"cursorToLocationRow");
}
return location;
}
}