package org.akaza.openclinica.ws.validator; import org.akaza.openclinica.bean.core.Role; import org.akaza.openclinica.bean.core.Status; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean; import org.akaza.openclinica.bean.managestudy.StudySubjectBean; import org.akaza.openclinica.bean.service.StudyParameterValueBean; import org.akaza.openclinica.dao.managestudy.StudyDAO; import org.akaza.openclinica.dao.managestudy.StudyEventDefinitionDAO; import org.akaza.openclinica.dao.managestudy.StudySubjectDAO; import org.akaza.openclinica.dao.service.StudyParameterValueDAO; import org.akaza.openclinica.ws.bean.StudyEventTransferBean; import org.springframework.validation.Errors; import org.springframework.validation.Validator; import javax.sql.DataSource; public class StudyEventTransferValidator implements Validator { DataSource dataSource; StudyDAO studyDAO; StudySubjectDAO studySubjectDAO; StudyEventDefinitionDAO studyEventDefinitionDAO; BaseVSValidatorImplementation helper; private StudyParameterValueDAO studyParameterValueDAO; private static String TRUE ="true"; private static String REQUIRED ="required"; public StudyEventTransferValidator(DataSource dataSource) { this.dataSource = dataSource; helper = new BaseVSValidatorImplementation(); } @SuppressWarnings("rawtypes") public boolean supports(Class clazz) { return StudyEventTransferBean.class.equals(clazz); } public void validate(Object obj, Errors e) { StudyEventTransferBean studyEventTransferBean = (StudyEventTransferBean) obj; // Non Business Validation if (studyEventTransferBean.getStudyUniqueId() == null || studyEventTransferBean.getStudyUniqueId().length() < 1) { e.reject("studyEventTransferValidator.invalid_study_identifier"); return; } // Business Validation Status[] included_status= new Status[]{Status.AVAILABLE , Status.PENDING}; StudyBean study = helper.verifyStudy( getStudyDAO(), studyEventTransferBean.getStudyUniqueId(), included_status, e); if (study == null) {return; } studyEventTransferBean.setStudy(study); StudyBean site=null; int site_id = -1; if (studyEventTransferBean.getSiteUniqueId() != null) { site = helper.verifySite(getStudyDAO(), studyEventTransferBean.getStudyUniqueId(), studyEventTransferBean.getSiteUniqueId(), included_status, e); if (site == null){return;} site_id = site.getId(); studyEventTransferBean.setStudy(site); } boolean isRoleVerified = helper.verifyRole(studyEventTransferBean.getUser(), study.getId(), site_id, Role.MONITOR, e); if ( !isRoleVerified ) return; // // StudyBean study = getStudyDAO().findByUniqueIdentifier(studyEventTransferBean.getStudyUniqueId()); // if (study == null) { // e.reject("studyEventTransferValidator.study_does_not_exist", new Object[] { studyEventTransferBean.getStudyUniqueId() }, // "Study identifier you specified " + studyEventTransferBean.getStudyUniqueId() + " does not correspond to a valid study."); // return;} // //validate study status // if (study != null && !( study.getStatus().isAvailable() || study.getStatus().isPending()) ){ // e.reject("subjectTransferValidator.study_status_wrong", new Object[] { studyEventTransferBean.getStudyUniqueId() }, "Study " // + studyEventTransferBean.getStudyUniqueId() +" has wrong status."); // return; // } // else // { // studyEventTransferBean.setStudy(study); // } // if (studyEventTransferBean.getSiteUniqueId() != null) { // study = getStudyDAO().findSiteByUniqueIdentifier(studyEventTransferBean.getStudyUniqueId(), studyEventTransferBean.getSiteUniqueId()); // // verification // // go from here : study should be available or in design - verify // if ( study == null){ // e.reject("subjectTransferValidator.site_does_not_exist", new Object[] { studyEventTransferBean.getSiteUniqueId() }, // "Site identifier you specified does not correspond to a valid site."); // return; // } // //validate site status // if (study != null && !study.getStatus().isAvailable()) { // // e.reject("subjectTransferValidator.site_status_wrong", new Object[] { studyEventTransferBean.getSiteUniqueId() }, "Site " // + study.getName() +" has wrong status. Subject can be added to an 'AVAILABLE' site only."); // return; // } // studyEventTransferBean.setStudy(study); // } // //by study or site // StudyUserRoleBean role = studyEventTransferBean.getUser().getRoleByStudy(studyEventTransferBean.getStudy().getId()); // if (role.getId() == 0 || role.getRole().equals(Role.MONITOR)) { // e.reject("studyEventTransferValidator.insufficient_permissions", "You do not have sufficient privileges to proceed with this operation."); // return; // } // Non Business Validation if (studyEventTransferBean.getSubjectLabel() == null ) { e.reject("studyEventTransferValidator.studySubjectId_required"); return; } StudySubjectBean studySubject = getStudySubjectDAO().findByLabelAndStudy(studyEventTransferBean.getSubjectLabel(), studyEventTransferBean.getStudy()); //it is not null but label null if (studySubject == null || studySubject.getOid()== null) { e.reject("studyEventTransferValidator.study_subject_does_not_exist", new Object[] { studyEventTransferBean.getSubjectLabel(), studyEventTransferBean.getStudy().getName() }, "StudySubject label you specified " + studyEventTransferBean.getSubjectLabel() + " does not correspond to a study "+studyEventTransferBean.getStudy().getName()); return; } // Non Business Validation if (studyEventTransferBean.getEventDefinitionOID() == null || studyEventTransferBean.getEventDefinitionOID().length() < 1) { e.reject("studyEventTransferValidator.eventDefinitionOID_required"); return; } if (studyEventTransferBean.getStartDateTime() == null) { e.reject("studyEventTransferValidator.startDateTime_required"); return; } StudyParameterValueBean eventLocationRequiredSetting = getStudyParameterValueDAO().findByHandleAndStudy(studyEventTransferBean.getStudy().getId(), "eventLocationRequired"); // if ("true".equals(eventLocationRequiredSetting.getValue()) && (studyEventTransferBean.getLocation() == null || studyEventTransferBean.getLocation().length() < 1)) { if (REQUIRED.equals(eventLocationRequiredSetting.getValue()) && (studyEventTransferBean.getLocation() == null || studyEventTransferBean.getLocation().length() < 1)) { e.reject("studyEventTransferValidator.location_required"); return; } if ( studyEventTransferBean.getEndDateTime() != null && studyEventTransferBean.getStartDateTime() != null){ if (studyEventTransferBean.getEndDateTime().compareTo(studyEventTransferBean.getStartDateTime())== -1) { e.reject("studyEventTransferValidator.start_date_after_end_date", new Object[] { studyEventTransferBean.getStartDateTime(),studyEventTransferBean.getEndDateTime() }, "Start date "+studyEventTransferBean.getStartDateTime()+" after end date ("+studyEventTransferBean.getEndDateTime()+")."); return; } } int parentStudyId = study.getParentStudyId(); StudyEventDefinitionBean studyEventDefinition = getStudyEventDefinitionDAO().findByOidAndStudy(studyEventTransferBean.getEventDefinitionOID(), study.getId(), parentStudyId); if (studyEventDefinition == null) { e.reject("studyEventTransferValidator.invalid_eventDefinitionOID", new Object[] { studyEventTransferBean.getEventDefinitionOID() }, "EventDefinitionOID you specified " + studyEventTransferBean.getEventDefinitionOID() + " is not valid."); return; } } public StudyDAO getStudyDAO() { return this.studyDAO != null ? studyDAO : new StudyDAO(dataSource); } public StudySubjectDAO getStudySubjectDAO() { return this.studySubjectDAO != null ? studySubjectDAO : new StudySubjectDAO(dataSource); } public StudyEventDefinitionDAO getStudyEventDefinitionDAO() { return this.studyEventDefinitionDAO != null ? studyEventDefinitionDAO : new StudyEventDefinitionDAO(dataSource); } public StudyParameterValueDAO getStudyParameterValueDAO() { return this.studyParameterValueDAO != null ? studyParameterValueDAO : new StudyParameterValueDAO(dataSource); } }