/*
* Calendula - An assistant for personal medication management.
* Copyright (C) 2016 CITIUS - USC
*
* Calendula is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software. If not, see <http://www.gnu.org/licenses/>.
*/
package es.usc.citius.servando.calendula.database;
import android.content.Context;
import android.preference.PreferenceManager;
import com.j256.ormlite.dao.Dao;
import java.sql.SQLException;
import es.usc.citius.servando.calendula.CalendulaApp;
import es.usc.citius.servando.calendula.events.PersistenceEvents;
import es.usc.citius.servando.calendula.persistence.Medicine;
import es.usc.citius.servando.calendula.persistence.Patient;
import es.usc.citius.servando.calendula.persistence.Routine;
/**
* Created by joseangel.pineiro on 3/26/15.
*/
public class PatientDao extends GenericDao<Patient, Long> {
public static final String PREFERENCE_ACTIVE_PATIENT = "active_patient";
public static final String TAG = "PatientDao";
public PatientDao(DatabaseHelper db) {
super(db);
}
@Override
public Dao<Patient, Long> getConcreteDao() {
try {
return dbHelper.getPatientDao();
} catch (SQLException e) {
throw new RuntimeException("Error creating patients dao", e);
}
}
@Override
public void saveAndFireEvent(Patient p) {
Object event = p.id() == null ? new PersistenceEvents.UserCreateEvent(p) : new PersistenceEvents.UserUpdateEvent(p);
save(p);
CalendulaApp.eventBus().post(event);
}
/// Mange active patient through preferences
public boolean isActive(Patient p, Context ctx){
Long activeId = PreferenceManager.getDefaultSharedPreferences(ctx).getLong(PREFERENCE_ACTIVE_PATIENT,-1);
return activeId.equals(p.id());
}
public Patient getActive(Context ctx){
long id = PreferenceManager.getDefaultSharedPreferences(ctx).getLong(PREFERENCE_ACTIVE_PATIENT,-1);
Patient p;
if(id != -1){
p = findById(id);
if(p == null) {
p = getDefault();
setActive(p,ctx);
}
return p;
}else{
return getDefault();
}
}
public Patient getDefault() {
return findOneBy(Patient.COLUMN_DEFAULT, true);
}
public void setActive(Patient patient, Context ctx) {
PreferenceManager.getDefaultSharedPreferences(ctx).edit()
.putLong(PREFERENCE_ACTIVE_PATIENT,patient.id())
.commit();
CalendulaApp.eventBus().post(new PersistenceEvents.ActiveUserChangeEvent(patient));
}
public void setActiveById(Long id, Context ctx) {
Patient patient = findById(id);
PreferenceManager.getDefaultSharedPreferences(ctx).edit()
.putLong(PREFERENCE_ACTIVE_PATIENT, patient.id())
.commit();
CalendulaApp.eventBus().post(new PersistenceEvents.ActiveUserChangeEvent(patient));
}
public void removeCascade(Patient p) {
// remove all data
removeAllStuff(p);
// remove patient
DB.patients().remove(p);
}
public void removeAllStuff(Patient p) {
for(Medicine m : DB.medicines().findAll()){
if(m.patient().id() == p.id()){
// this also remove schedules
DB.medicines().deleteCascade(m, true);
}
}
// remove routines
for(Routine r: DB.routines().findAll()) {
if (r.patient().id() == p.id()) {
DB.routines().remove(r);
}
}
}
}