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 StudyMetadataRequestValidator implements Validator {
DataSource dataSource;
StudyDAO studyDAO;
StudySubjectDAO studySubjectDAO;
StudyEventDefinitionDAO studyEventDefinitionDAO;
UserAccountDAO userAccountDAO;
BaseVSValidatorImplementation helper;
public StudyMetadataRequestValidator(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 studyMetadataRequest = (BaseStudyDefinitionBean) obj;
if (studyMetadataRequest.getStudyUniqueId() == null ){//&& studyMetadataRequest.getSiteUniqueId() == null) {
e.reject("studyEventDefinitionRequestValidator.study_does_not_exist");
return;
}
StudyBean study = helper.verifyStudy(getStudyDAO(), studyMetadataRequest.getStudyUniqueId(), null, e);
if (study == null) return;
int site_id = -1;StudyBean site;
if (studyMetadataRequest.getSiteUniqueId() != null) {
site = helper.verifySite(getStudyDAO(), studyMetadataRequest.getStudyUniqueId(), studyMetadataRequest.getSiteUniqueId(), null, e);
if ( site!=null){site_id = site.getId();}
}
helper.verifyUser(studyMetadataRequest.getUser(), getUserAccountDAO(), study.getId(), site_id, e) ;
//
// StudyUserRoleBean studySur = getUserAccountDAO().findRoleByUserNameAndStudyId(studyMetadataRequest.getUser().getName(), study.getId());
// if (studySur.getStatus() != Status.AVAILABLE) {
// e.reject("studyEventDefinitionRequestValidator.insufficient_permissions",
// "You do not have sufficient privileges to proceed with this operation.");
// return;
// }
// if (studyMetadataRequest.getStudyUniqueId() != null && studyMetadataRequest.getSiteUniqueId() == null) {
// StudyBean study = getStudyDAO().findByUniqueIdentifier(studyMetadataRequest.getStudyUniqueId());
// if (study == null) {
// e.reject("subjectTransferValidator.study_does_not_exist", new Object[] { studyMetadataRequest.getStudyUniqueId() }, "Study identifier you specified "
// + studyMetadataRequest.getStudyUniqueId() + " does not correspond to a valid study.");
// return;
// }
//
// StudyUserRoleBean studySur = getUserAccountDAO().findRoleByUserNameAndStudyId(studyMetadataRequest.getUser().getName(), study.getId());
// if (studySur.getStatus() != Status.AVAILABLE) {
// e.reject("studyEventDefinitionRequestValidator.insufficient_permissions",
// "You do not have sufficient privileges to proceed with this operation.");
// return;
// }
// }
// if (studyMetadataRequest.getStudyUniqueId() != null && studyMetadataRequest.getSiteUniqueId() != null) {
// StudyBean study = getStudyDAO().findByUniqueIdentifier(studyMetadataRequest.getStudyUniqueId());
// StudyBean site = getStudyDAO().findByUniqueIdentifier(studyMetadataRequest.getSiteUniqueId());
// if (study == null || site == null || site.getParentStudyId() != study.getId()) {
// e.reject("studyEventDefinitionRequestValidator.invalid_study_identifier_site_identifier");
// return;
// }
// StudyUserRoleBean siteSur = getUserAccountDAO().findRoleByUserNameAndStudyId(studyMetadataRequest.getUser().getName(), site.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);
}
}