package org.akaza.openclinica.ws.validator;
import org.akaza.openclinica.bean.managestudy.StudyBean;
import org.akaza.openclinica.dao.login.UserAccountDAO;
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.ws.bean.BaseStudyDefinitionBean;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import javax.sql.DataSource;
public class StudyEventDefinitionRequestValidator implements Validator {
DataSource dataSource;
StudyDAO studyDAO;
StudySubjectDAO studySubjectDAO;
StudyEventDefinitionDAO studyEventDefinitionDAO;
UserAccountDAO userAccountDAO;
BaseVSValidatorImplementation helper;
public StudyEventDefinitionRequestValidator(DataSource dataSource) {
this.dataSource = dataSource;
helper = new BaseVSValidatorImplementation();
}
@SuppressWarnings("rawtypes")
public boolean supports(Class clazz) {
return BaseStudyDefinitionBean.class.equals(clazz);
}
public void validate(Object obj, Errors e) {
BaseStudyDefinitionBean studyEventDefinitionRequestBean = (BaseStudyDefinitionBean) obj;
if (studyEventDefinitionRequestBean.getStudyUniqueId() == null && studyEventDefinitionRequestBean.getSiteUniqueId() == null) {
e.reject("studyEventDefinitionRequestValidator.invalid_study_identifier");
return;
}
StudyBean study;int study_id = -1;
if (studyEventDefinitionRequestBean.getStudyUniqueId() != null ) {
study = helper.verifyStudy(getStudyDAO(), studyEventDefinitionRequestBean.getStudyUniqueId(),
null, e);
if ( study == null){ return; }
study_id = study.getId();
}
StudyBean site;int site_id = -1;
if ( studyEventDefinitionRequestBean.getSiteUniqueId() != null) {
site = helper.verifySite(getStudyDAO(), studyEventDefinitionRequestBean.getStudyUniqueId(),
studyEventDefinitionRequestBean.getSiteUniqueId(), null, e);
if (site == null){return;}
site_id = site.getId();
}
boolean isRoleVerified = helper.verifyRole(studyEventDefinitionRequestBean.getUser(), study_id, site_id, e);
// //verify study ID
// if (studyEventDefinitionRequestBean.getStudyUniqueId() != null ) {
// StudyBean study = getStudyDAO().findByUniqueIdentifier(studyEventDefinitionRequestBean.getStudyUniqueId());
// if (study == null) {
// e.reject("studyEventDefinitionRequestValidator.invalid_study_identifier");
// return;
// }
// studyEventDefinitionRequestBean.setStudy(study);
// }
// if ( studyEventDefinitionRequestBean.getSiteUniqueId() != null) {
// StudyBean site = getStudyDAO().findSiteByUniqueIdentifier(studyEventDefinitionRequestBean.getStudyUniqueId(), studyEventDefinitionRequestBean.getSiteUniqueId());
//
// if ( site == null ) {
// e.reject("studyEventDefinitionRequestValidator.invalid_study_identifier_site_identifier");
// return;
// }
// studyEventDefinitionRequestBean.setStudy(site);
// }
// StudyUserRoleBean siteSur = getUserAccountDAO().findRoleByUserNameAndStudyId(studyEventDefinitionRequestBean.getUser().getName(), studyEventDefinitionRequestBean.getStudy().getId());
// if (siteSur.getStatus() != Status.AVAILABLE) {
// e.reject("studyEventDefinitionRequestValidator.insufficient_permissions",
// "You do not have sufficient privileges to proceed with this operation.");
// 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 UserAccountDAO getUserAccountDAO() {
return this.userAccountDAO != null ? userAccountDAO : new UserAccountDAO(dataSource);
}
}