/* * 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.TreatmentDao; import org.patientview.radar.model.Treatment; import org.patientview.radar.model.TreatmentModality; import org.patientview.radar.model.exception.InvalidModelException; 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 TreatmentManagerImpl implements TreatmentManager { TreatmentDao treatmentDao; PatientManager patientManager; public void saveTreatment(Treatment treatment) throws InvalidModelException { // validation List<String> errors = new ArrayList<String>(); List<Treatment> treatmentsList = treatmentDao.getTreatmentsByRadarNumber(treatment.getRadarNumber()); // Cannot start a new treatment after a previous treatment start date which has not been closed for (Treatment existingTreatment : treatmentsList) { if (existingTreatment.getId().equals(treatment.getId())) { continue; } if (existingTreatment.getEndDate() == null && treatment.getStartDate().compareTo( existingTreatment.getStartDate()) > 0) { if (treatment.getEndDate() != null) { if (treatment.getEndDate().compareTo(existingTreatment.getStartDate()) > 0) { errors.add(TreatmentManager.PREVIOUS_TREATMENT_NOT_CLOSED_ERROR); break; } } } } // dates must not overlap for (Treatment existingTreatment : treatmentsList) { if (existingTreatment.getId().equals(treatment.getId())) { continue; } if (RadarUtility.isEventsOverlapping(existingTreatment.getStartDate(), existingTreatment.getEndDate(), treatment.getStartDate(), treatment.getEndDate())) { errors.add(TreatmentManager.OVERLAPPING_ERROR); break; } } List<Date> datesToCheck = Arrays.asList(treatment.getStartDate(), treatment.getEndDate()); // cannot be before date of birth Patient patient = patientManager.getPatientByRadarNumber(treatment.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("treatment model is not valid"); exception.setErrors(errors); throw exception; } treatmentDao.saveTreatment(treatment); } public void deleteTreatment(Treatment treatment) { treatmentDao.deleteTreatment(treatment); } public Treatment getTreatment(long id) { return treatmentDao.getTreatment(id); } public List<Treatment> getTreatmentsByRadarNumber(long radarNumber) { return treatmentDao.getTreatmentsByRadarNumber(radarNumber); } public TreatmentModality getTreatmentModality(long id) { return treatmentDao.getTreatmentModality(id); } public List<TreatmentModality> getTreatmentModalities() { return treatmentDao.getTreatmentModalities(); } public TreatmentDao getTreatmentDao() { return treatmentDao; } public void setTreatmentDao(TreatmentDao treatmentDao) { this.treatmentDao = treatmentDao; } public void setPatientManager(PatientManager patientManager) { this.patientManager = patientManager; } }