package it.fdev.unisaconnect.data;
import it.fdev.utils.Utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
public class DatabaseHelper {
private String databaseName;
private static final int DATABASE_VERSION = 3;
private String SP_KEY_DB_VER = "db_ver";
private final Context mContext;
public DatabaseHelper(Context context, String databaseName) {
this.databaseName = databaseName;
SP_KEY_DB_VER += databaseName;
mContext = context;
initialize();
}
/**
* Initializes database. Creates database if doesn't exist.
*/
private void initialize() {
if (databaseExists()) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
int dbVersion = prefs.getInt(SP_KEY_DB_VER, 1);
if (DATABASE_VERSION != dbVersion) {
Log.d(Utils.TAG, "Database "+ databaseName +" will be updated");
File dbFile = mContext.getDatabasePath(databaseName);
if (!dbFile.delete()) {
Log.w(Utils.TAG, "Unable to update database "+ databaseName);
}
}
}
if (!databaseExists()) {
createDatabase();
}
}
/**
* Returns true if database file exists, false otherwise.
* @return
*/
private boolean databaseExists() {
File dbFile = mContext.getDatabasePath(databaseName);
return dbFile.exists();
}
/**
* Creates database by copying it from assets directory.
*/
private void createDatabase() {
String parentPath = mContext.getDatabasePath(databaseName).getParent();
String path = mContext.getDatabasePath(databaseName).getPath();
File file = new File(parentPath);
if (!file.exists()) {
if (!file.mkdir()) {
Log.w(Utils.TAG, "Unable to create database directory for: "+ databaseName);
return;
}
}
InputStream is = null;
OutputStream os = null;
try {
is = mContext.getAssets().open(databaseName);
os = new FileOutputStream(path);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.flush();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(SP_KEY_DB_VER, DATABASE_VERSION);
editor.commit();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}