package com.cafejeunesse.android.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.widget.Toast;
import com.cafejeunesse.android.structure.Service;
import java.util.ArrayList;
import java.util.List;
/**
* Created by David Levayer on 21/03/15.
*/
public class ServiceDataSource {
// TODO généraliser ce code pour gérer plusieurs tables dans la BD
// (je m'en occupe je pense)
private Context mContext;
private int mCurrentVersion;
public final static String NEWDB_FILEPATH = Environment.getExternalStorageDirectory().getPath()+"/cafeDB.sqlite";
// Database fields
private SQLiteDatabase database;
private DatabaseOpenHelper dbHelper;
private String[] allColumns = {
DatabaseOpenHelper.COLUMN_ID,
DatabaseOpenHelper.COLUMN_NAME,
DatabaseOpenHelper.COLUMN_PHONE,
DatabaseOpenHelper.COLUMN_INFO,
DatabaseOpenHelper.COLUMN_SERVICES,
DatabaseOpenHelper.COLUMN_PRICE,
DatabaseOpenHelper.COLUMN_WEBSITE,
DatabaseOpenHelper.COLUMN_FACEBOOK,
DatabaseOpenHelper.COLUMN_ADDRESS,
DatabaseOpenHelper.COLUMN_CATEGORIES,
DatabaseOpenHelper.COLUMN_KEYWORDS,
DatabaseOpenHelper.COLUMN_LAT,
DatabaseOpenHelper.COLUMN_LON};
public ServiceDataSource(Context context) {
dbHelper = new DatabaseOpenHelper(context);
mContext = context;
mCurrentVersion = 0;
}
public void open() {
database = dbHelper.getWritableDatabase();
}
public void close() {
dbHelper.close();
}
public void importDataFromAsset(String filePath){
//todo: télécharger la base de données distante
try {
// Retire les services de la base de données
dbHelper.onUpgrade(database,mCurrentVersion,mCurrentVersion+1);
mCurrentVersion++;
SQLiteDatabase newDatabase = SQLiteDatabase.openDatabase(
filePath,
null,
SQLiteDatabase.OPEN_READONLY);
List<Service> newServices = getAllServices(newDatabase);
for(Service s: newServices)
createService(s);
newDatabase.close();
} catch (Exception e) {
Toast.makeText(mContext, "Erreur bdd services: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
public void createService(Service service) {
ContentValues values = new ContentValues();
values.put(DatabaseOpenHelper.COLUMN_NAME, service.getServiceName());
values.put(DatabaseOpenHelper.COLUMN_PHONE, (String)service.getInfo(Service.TAG_PHONENUMBER));
values.put(DatabaseOpenHelper.COLUMN_INFO, (String)service.getServiceDescription());
//values.put(DatabaseOpenHelper.COLUMN_SERVICES, (String)service.getInfo(Service.TAG_PHONENUMBER));
values.put(DatabaseOpenHelper.COLUMN_PRICE, (String)service.getInfo(Service.TAG_PRICE));
values.put(DatabaseOpenHelper.COLUMN_WEBSITE, (String)service.getInfo(Service.TAG_WEBSITE));
values.put(DatabaseOpenHelper.COLUMN_FACEBOOK, (String)service.getInfo(Service.TAG_FACEBOOK));
values.put(DatabaseOpenHelper.COLUMN_ADDRESS, (String)service.getInfo(Service.TAG_ADDRESS));
//values.put(DatabaseOpenHelper.COLUMN_CATEGORIES, (String)service.getInfo(Service.TAG_CATEGORIES));
//values.put(DatabaseOpenHelper.COLUMN_KEYWORDS, (String)service.getInfo(Service.TAG_KEYWORDS));
values.put(DatabaseOpenHelper.COLUMN_LAT, service.getLat());
values.put(DatabaseOpenHelper.COLUMN_LON, service.getLon());
database.insert(DatabaseOpenHelper.TABLE_SERVICES, null, values);
}
private Service cursorToService(Cursor cursor) {
if(cursor != null){
// TODO Utiliser des chaines dans String.xml plutôt que de récupérer les tags
// dans Service
Service service = new Service();
service.setId(cursor.getLong(0));
service.setServiceName(cursor.getString(1));
service.addInfo(Service.TAG_PHONENUMBER,cursor.getString(2));
service.setServiceDescription(cursor.getString(3));
//service.addInfo(Service.TAG_SERVICES,cursor.getString(4));
service.addInfo(Service.TAG_PRICE,cursor.getString(5));
service.addInfo(Service.TAG_WEBSITE,cursor.getString(6));
service.addInfo(Service.TAG_FACEBOOK,cursor.getString(7));
service.addInfo(Service.TAG_ADDRESS,cursor.getString(8));
//service.addInfo(Service.TAG_CATEGORIES,cursor.getString(9));
service.addInfo(Service.TAG_KEYWORDS, cursor.getString(10));
service.setLat(cursor.getFloat(11));
service.setLon(cursor.getFloat(12));
return service;
}
return null;
}
public void deleteService(Service service) {
long id = service.getId();
database.delete(DatabaseOpenHelper.TABLE_SERVICES, DatabaseOpenHelper.COLUMN_ID
+ " = " + id, null);
}
public void deleteAllServices(){
database.delete(DatabaseOpenHelper.TABLE_SERVICES, null, null);
}
public List<Service> getAllServices() {
return getAllServices(database);
}
private List<Service> getAllServices(SQLiteDatabase db){
List<Service> services = new ArrayList<Service>();
Cursor cursor = db.query(DatabaseOpenHelper.TABLE_SERVICES,
allColumns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Service comment = cursorToService(cursor);
services.add(comment);
cursor.moveToNext();
}
// make sure to close the cursor
cursor.close();
return services;
}
}