/*
* PatientView
*
* Copyright (c) Worth Solutions Limited 2004-2013
*
* This file is part of PatientView.
*
* PatientView 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.
* PatientView 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 PatientView in a file
* titled COPYING. If not, see <http://www.gnu.org/licenses/>.
*
* @package PatientView
* @link http://www.patientview.org
* @author PatientView <info@patientview.org>
* @copyright Copyright (c) 2004-2013, Worth Solutions Limited
* @license http://www.gnu.org/licenses/gpl-3.0.html The GNU General Public License V3.0
*/
package org.patientview.radar.service.impl;
import org.patientview.model.Patient;
import org.patientview.radar.dao.ImmunosuppressionDao;
import org.patientview.radar.model.Immunosuppression;
import org.patientview.radar.model.ImmunosuppressionTreatment;
import org.patientview.radar.model.exception.InvalidModelException;
import org.patientview.radar.service.ImmunosuppressionManager;
import org.patientview.radar.service.PatientManager;
import org.patientview.radar.service.TreatmentManager;
import org.patientview.radar.util.RadarUtility;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
public class ImmunosuppressionManagerImpl implements ImmunosuppressionManager {
ImmunosuppressionDao immunosuppressionDao;
PatientManager patientManager;
public void saveImmunosuppressionTreatment(ImmunosuppressionTreatment immunosuppression) throws
InvalidModelException {
// validation
List<String> errors = new ArrayList<String>();
List<ImmunosuppressionTreatment> ummunosupressionList = immunosuppressionDao.
getImmunosuppressionTreatmentByRadarNumber(immunosuppression.getRadarNumber());
// must have finish date before you can start the same treatment again
for (ImmunosuppressionTreatment existingImmunosuppression : ummunosupressionList) {
if (existingImmunosuppression.getId().equals(immunosuppression.getId())) {
continue;
}
if (existingImmunosuppression.getEndDate() == null && existingImmunosuppression.getImmunosuppression().
getId().equals(immunosuppression.getImmunosuppression().getId())) {
errors.add(TreatmentManager.PREVIOUS_TREATMENT_NOT_CLOSED_ERROR);
break;
}
}
// dates must not overlap
for (ImmunosuppressionTreatment existingImmunosuppression : ummunosupressionList) {
if (existingImmunosuppression.getId().equals(immunosuppression.getId())) {
continue;
}
if (existingImmunosuppression.getEndDate() != null && existingImmunosuppression.getImmunosuppression().
getId().equals(immunosuppression.getImmunosuppression().getId())) {
if (RadarUtility.isEventsOverlapping(existingImmunosuppression.getStartDate(),
existingImmunosuppression.getEndDate(), immunosuppression.getStartDate(),
immunosuppression.getEndDate())) {
errors.add(TreatmentManager.OVERLAPPING_ERROR);
break;
}
}
}
List<Date> datesToCheck = Arrays.asList(immunosuppression.getStartDate(), immunosuppression.getEndDate());
// cannot be before date of birth
Patient patient = patientManager.getPatientByRadarNumber(
immunosuppression.getRadarNumber());
if (patient != null) {
Date dob = patient.getDob();
if (dob != null) {
for (Date date : datesToCheck) {
if (date != null) {
if (dob.compareTo(date) > 0) {
errors.add(TreatmentManager.BEFORE_DOB_ERROR);
break;
}
}
}
}
}
// cannot be after today
Date today = new Date();
for (Date date : datesToCheck) {
if (date != null) {
if (today.compareTo(date) < 0) {
errors.add(TreatmentManager.AFTER_TODAY_ERROR);
break;
}
}
}
if (!errors.isEmpty()) {
InvalidModelException exception = new InvalidModelException("immunosupression model is not valid");
exception.setErrors(errors);
throw exception;
}
immunosuppressionDao.saveImmunosuppressionTreatment(immunosuppression);
}
public void deleteImmunosuppressionTreatment(ImmunosuppressionTreatment immunosuppressionTreatment) {
immunosuppressionDao.deleteImmunosuppressionTreatment(immunosuppressionTreatment);
}
public ImmunosuppressionTreatment getImmunosuppressionTreatment(long id) {
return immunosuppressionDao.getImmunosuppressionTreatment(id);
}
public List<ImmunosuppressionTreatment> getImmunosuppressionTreatmentByRadarNumber(long radarNumber) {
return immunosuppressionDao.getImmunosuppressionTreatmentByRadarNumber(radarNumber);
}
public List<Immunosuppression> getImmunosuppressions() {
return immunosuppressionDao.getImmunosuppressions();
}
public Immunosuppression getImmunosuppression(long id) {
return immunosuppressionDao.getImmunosuppression(id);
}
public ImmunosuppressionDao getImmunosuppressionDao() {
return immunosuppressionDao;
}
public void setImmunosuppressionDao(ImmunosuppressionDao immunosuppressionDao) {
this.immunosuppressionDao = immunosuppressionDao;
}
public void setPatientManager(PatientManager patientManager) {
this.patientManager = patientManager;
}
}