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 List<TreatmentModality> getTreatmentModalities() {
   return treatmentDao.getTreatmentModalities();
 }
 public TreatmentModality getTreatmentModality(long id) {
   return treatmentDao.getTreatmentModality(id);
 }
 public List<Treatment> getTreatmentsByRadarNumber(long radarNumber) {
   return treatmentDao.getTreatmentsByRadarNumber(radarNumber);
 }
 public Treatment getTreatment(long id) {
   return treatmentDao.getTreatment(id);
 }
 public void deleteTreatment(Treatment treatment) {
   treatmentDao.deleteTreatment(treatment);
 }