package com.mirhoseini.marvel.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
import com.mirhoseini.marvel.R;
import com.mirhoseini.marvel.database.model.CharacterModel;
import java.sql.SQLException;
import java.util.List;
import javax.inject.Inject;
/**
* Created by Mohsen on 20/10/2016.
*/
public class DatabaseHelperImpl extends OrmLiteSqliteOpenHelper implements DatabaseHelper {
private static final String DATABASE_NAME = "marvel.db";
private static final int DATABASE_VERSION = 1;
private Dao<CharacterModel, Integer> characterDao;
@Inject
public DatabaseHelperImpl(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
}
@Override
public void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) {
try {
// Create tables. This onCreate() method will be invoked only once of the application life time i.e. the first time when the application starts.
TableUtils.createTable(connectionSource, CharacterModel.class);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(), "Unable to create database", e);
}
}
@Override
public void onUpgrade(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource, int oldVer, int newVer) {
try {
TableUtils.dropTable(connectionSource, CharacterModel.class, true);
onCreate(sqliteDatabase, connectionSource);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(), "Unable to upgrade database from version " + oldVer + " to new "
+ newVer, e);
}
}
public Dao<CharacterModel, Integer> getCharacterDao() throws SQLException {
if (characterDao == null) {
characterDao = getDao(CharacterModel.class);
}
return characterDao;
}
@Override
public int addCharacter(CharacterModel character) throws SQLException {
CharacterModel result = getCharacterDao().queryForFirst(getCharacterDao()
.queryBuilder()
.where()
.like(CharacterModel.FIELD_CHARACTER_NAME, character.getName())
.prepare());
if (null != result)
getCharacterDao().delete(result);
return getCharacterDao().create(character);
}
@Override
public List<CharacterModel> selectLast5Characters() throws SQLException {
return getCharacterDao().query(getCharacterDao().queryBuilder().orderBy(CharacterModel.FIELD_CHARACTER_ID, false).limit(5L).prepare());
}
@Override
public List<CharacterModel> selectAllCharacters() throws SQLException {
return getCharacterDao().query(getCharacterDao().queryBuilder().prepare());
}
// Close the database connections and clear any cached DAOs.
@Override
public void close() {
super.close();
characterDao = null;
}
}