package com.pwittchen.eegreader.database; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Environment; import com.pwittchen.eegreader.database.controller.SignalTableController; import com.pwittchen.eegreader.database.model.Signal; import com.pwittchen.eegreader.generics.GenericApplication; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.List; import au.com.bytecode.opencsv.CSVWriter; import static com.pwittchen.eegreader.utils.LogUtils.LOGD; import static com.pwittchen.eegreader.utils.LogUtils.LOGE; import static com.pwittchen.eegreader.utils.LogUtils.LOGI; import static com.pwittchen.eegreader.utils.LogUtils.makeLogTag; public class DatabaseHandler extends SQLiteOpenHelper { private static final String TAG = makeLogTag(DatabaseHandler.class); private static final int DATABASE_VERSION = 1; public static final String DATABASE_NAME = "eeg_reader.db"; public static final String TABLE_SIGNALS = "signals"; public static final String KEY_ID = "_id"; public static final String KEY_TYPE = "type"; public static final String KEY_LEVEL = "level"; public static final String KEY_MILISECONDS = "miliseconds"; private SignalTableController signalTableController; public DatabaseHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, DATABASE_NAME, null, DATABASE_VERSION); signalTableController = new SignalTableController(this); } public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); signalTableController = new SignalTableController(this); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { String CREATE_TABLE_SIGNALS = "CREATE TABLE " + TABLE_SIGNALS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_TYPE + " INTEGER," + KEY_LEVEL + " INTEGER," + KEY_MILISECONDS + " INTEGER" + ");"; sqLiteDatabase.execSQL(CREATE_TABLE_SIGNALS); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) { sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_SIGNALS); onCreate(sqLiteDatabase); } public String getDatabasePath() { File dataBaseFile = GenericApplication.getContext().getDatabasePath(DatabaseHandler.DATABASE_NAME); return dataBaseFile.toString(); } public SignalTableController getSignalTableController() { return signalTableController; } public void logDebugInfo() { LOGI(TAG, "Database path: " + this.getDatabasePath()); LOGD(TAG, "Reading all signals..."); List<Signal> contacts = this.getSignalTableController().getAll(); String signalLog = ""; for (Signal signal : contacts) { signalLog = "Id: " + signal._id + " , Type: " + signal._type + " , Level: " + signal._level + " Miliseconds: " + signal._miliseconds; LOGD(TAG, signalLog); } } public boolean exportTableToCSVFile(Cursor csvCursor, String fileName) { File exportDir = new File(Environment.getExternalStorageDirectory(), ""); if (!exportDir.exists()) { exportDir.mkdirs(); } File file = new File(exportDir, fileName); try { file.createNewFile(); CSVWriter csvWriter = new CSVWriter(new FileWriter(file)); csvWriter.writeNext(csvCursor.getColumnNames()); if (csvCursor.getCount() > 0) { while (csvCursor.moveToNext()) { String arrayOfStrings[] = {csvCursor.getString(0), csvCursor.getString(1), csvCursor.getString(2), csvCursor.getString(3)}; csvWriter.writeNext(arrayOfStrings); } } else { return false; } csvWriter.close(); csvCursor.close(); return true; } catch (SQLException sqlException) { LOGE(TAG, sqlException.getMessage(), sqlException); return false; } catch (IOException ioException) { LOGE(TAG, ioException.getMessage(), ioException); return false; } } }