package br.com.while42.rpgcs.persist;
import java.util.List;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.util.Log;
import br.com.while42.rpgcs.model.character.RpgCharacter;
import br.com.while42.rpgcs.persist.dao.RpgCharacterDAO;
import br.com.while42.rpgcs.persist.table.RpgCharacterTable;
public class DataManager {
public static final int DATABASE_VERSION = 25;
private Context context;
private SQLiteDatabase db;
private boolean useDebugDb = false;
private RpgCharacterDAO rpgCharacterDao;
public DataManager(Context context) {
this(context, false);
}
public DataManager(Context context, boolean useDebugDb) {
this.context = context;
this.useDebugDb = useDebugDb;
}
private boolean isOpenDb() {
return (db != null && db.isOpen());
}
private boolean closeDb() {
if (isOpenDb()) {
try {
db.close();
db = null;
rpgCharacterDao = null;
return true;
} catch (SQLiteException e) {
// Log.w("DataManager", e.getMessage());
}
}
return false;
}
private boolean openDb() {
if (!isOpenDb()) {
db = new OpenHelper(context, useDebugDb).getWritableDatabase();
// since we pass db into DAO, have to recreate DAO if db is
// re-opened
rpgCharacterDao = new RpgCharacterDAO(db);
return true;
}
return false;
}
// Match operations
public Long saveRpgCharacter(RpgCharacter rpgCharacter) {
long matchId = 0L;
if (rpgCharacter == null) {
return matchId;
}
try {
openDb();
db.beginTransaction();
matchId = rpgCharacterDao.save(rpgCharacter);
db.setTransactionSuccessful();
} catch (SQLException e) {
Log.e("ERROR", "DataManager - saveRpgCharacter - Error saving match (" + rpgCharacter.toString() + ")", e);
matchId = 0L;
} finally {
db.endTransaction();
closeDb();
}
return matchId;
}
public RpgCharacter retrieveRpgCharacter(Long id) {
openDb();
RpgCharacter character = rpgCharacterDao.retrieve(id);
closeDb();
return character;
}
public List<RpgCharacter> retrieveAllRpgCharacters() {
openDb();
List<RpgCharacter> character = rpgCharacterDao.retrieveAll();
closeDb();
return character;
}
public boolean deleteRpgCharacter(RpgCharacter rpgCharacter) {
boolean result = false;
if (rpgCharacter == null) {
return result;
}
try {
openDb();
db.beginTransaction();
rpgCharacterDao.delete(rpgCharacter);
db.setTransactionSuccessful();
result = true;
} catch (SQLException e) {
Log.e("ERROR", "DataManager - deleteRpgCharacter - Error deleting match (" + rpgCharacter.toString() + ")", e);
result = false;
} finally {
db.endTransaction();
closeDb();
}
return result;
}
public void deleteAllRpgCharacter() {
try {
openDb();
RpgCharacterTable.clear(db);
} finally {
closeDb();
}
}
}