/*
* OpenClinica is distributed under the
* GNU Lesser General Public License (GNU LGPL).
* For details see: http://www.openclinica.org/license
* copyright 2003-2005 Akaza Research
*/
package org.akaza.openclinica.control.managestudy;
import org.akaza.openclinica.bean.core.NumericComparisonOperator;
import org.akaza.openclinica.bean.core.Role;
import org.akaza.openclinica.bean.core.Status;
import org.akaza.openclinica.bean.login.UserAccountBean;
import org.akaza.openclinica.bean.managestudy.InterventionBean;
import org.akaza.openclinica.bean.managestudy.StudyBean;
import org.akaza.openclinica.bean.service.StudyParameterValueBean;
import org.akaza.openclinica.control.core.SecureController;
import org.akaza.openclinica.control.form.FormProcessor;
import org.akaza.openclinica.control.form.Validator;
import org.akaza.openclinica.core.form.StringUtil;
import org.akaza.openclinica.dao.managestudy.StudyDAO;
import org.akaza.openclinica.dao.service.StudyConfigService;
import org.akaza.openclinica.dao.service.StudyParameterValueDAO;
import org.akaza.openclinica.view.Page;
import org.akaza.openclinica.web.InsufficientPermissionException;
import org.apache.commons.lang.StringUtils;
import org.akaza.openclinica.dao.core.CoreResources;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
public class UpdateStudyServletNew extends SecureController {
public static final String INPUT_START_DATE = "startDate";
public static final String INPUT_END_DATE = "endDate";
public static final String INPUT_VER_DATE = "protocolDateVerification";
public static StudyBean study;
private CoreResources core;
/**
*
*/
@Override
public void mayProceed() throws InsufficientPermissionException {
if (ub.isSysAdmin()) {
return;
}
Role r = currentRole.getRole();
if (r.equals(Role.STUDYDIRECTOR) || r.equals(Role.COORDINATOR)) {
return;
}
addPageMessage(respage.getString("no_have_correct_privilege_current_study") + respage.getString("change_study_contact_sysadmin"));
throw new InsufficientPermissionException(Page.MENU_SERVLET, resexception.getString("may_not_submit_data"), "1");
}
@Override
public void processRequest() throws Exception {
resetPanel();
FormProcessor fp = new FormProcessor(request);
Validator v = new Validator(request);
int studyId = fp.getInt("id");
studyId = studyId == 0 ? fp.getInt("studyId") : studyId;
String action = fp.getString("action");
StudyDAO sdao = new StudyDAO(sm.getDataSource());
boolean isInterventional = false;
study = (StudyBean) sdao.findByPK(studyId);
if (study.getId() != currentStudy.getId()) {
addPageMessage(respage.getString("not_current_study") + respage.getString("change_study_contact_sysadmin"));
forwardPage(Page.MENU_SERVLET);
return;
}
study.setId(studyId);
StudyConfigService scs = new StudyConfigService(sm.getDataSource());
study = scs.setParametersForStudy(study);
request.setAttribute("studyToView", study);
request.setAttribute("studyId", studyId + "");
request.setAttribute("studyPhaseMap", CreateStudyServlet.studyPhaseMap);
ArrayList statuses = Status.toStudyUpdateMembersList();
statuses.add(Status.PENDING);
request.setAttribute("statuses", statuses);
String interventional = resadmin.getString("interventional");
isInterventional = interventional.equalsIgnoreCase(study.getProtocolType());
request.setAttribute("isInterventional", isInterventional ? "1" : "0");
String protocolType = study.getProtocolTypeKey();
// A. Hamid. 5001
if (study.getParentStudyId() > 0) {
StudyBean parentStudy = (StudyBean) sdao.findByPK(study.getParentStudyId());
request.setAttribute("parentStudy", parentStudy);
}
ArrayList interventionArray = new ArrayList();
if (isInterventional) {
interventionArray = parseInterventions(study);
setMaps(isInterventional, interventionArray);
} else {
setMaps(isInterventional, interventionArray);
}
if (!action.equals("submit")) {
// First Load First Form
if (study.getDatePlannedStart() != null) {
fp.addPresetValue(INPUT_START_DATE, local_df.format(study.getDatePlannedStart()));
}
if (study.getDatePlannedEnd() != null) {
fp.addPresetValue(INPUT_END_DATE, local_df.format(study.getDatePlannedEnd()));
}
if (study.getProtocolDateVerification() != null) {
fp.addPresetValue(INPUT_VER_DATE, local_df.format(study.getProtocolDateVerification()));
}
setPresetValues(fp.getPresetValues());
// first load 2nd form
}
if (study == null) {
addPageMessage(respage.getString("please_choose_a_study_to_edit"));
forwardPage(Page.STUDY_LIST_SERVLET);
return;
}
if (action.equals("submit")) {
validateStudy1(fp, v);
validateStudy2(fp, new Validator(request));
validateStudy3(isInterventional, new Validator(request), fp);
validateStudy4(fp, new Validator(request));
validateStudy5(fp, new Validator(request));
validateStudy6(fp, new Validator(request));
confirmWholeStudy(fp);
request.setAttribute("studyToView", study);
if (!errors.isEmpty()) {
logger.error("found errors : " + errors.toString());
request.setAttribute("formMessages", errors);
forwardPage(Page.UPDATE_STUDY_NEW);
} else {
study.setProtocolType(protocolType);
submitStudy(study);
addPageMessage(respage.getString("the_study_has_been_updated_succesfully"));
ArrayList pageMessages = (ArrayList) request.getAttribute(PAGE_MESSAGE);
session.setAttribute("pageMessages", pageMessages);
response.sendRedirect(request.getContextPath() + "/pages/studymodule");
// forwardPage(Page.MANAGE_STUDY_MODULE);
}
} else {
forwardPage(Page.UPDATE_STUDY_NEW);
}
}
private void validateStudy1(FormProcessor fp, Validator v) {
v.addValidation("name", Validator.NO_BLANKS);
v.addValidation("uniqueProId", Validator.NO_BLANKS);
v.addValidation("description", Validator.NO_BLANKS);
v.addValidation("prinInvestigator", Validator.NO_BLANKS);
v.addValidation("sponsor", Validator.NO_BLANKS);
v.addValidation("secondProId", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("collaborators", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 1000);
v.addValidation("protocolDescription", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 1000);
errors = v.validate();
if (fp.getString("name").trim().length() > 100) {
Validator.addError(errors, "name", resexception.getString("maximum_lenght_name_100"));
}
if (fp.getString("uniqueProId").trim().length() > 30) {
Validator.addError(errors, "uniqueProId", resexception.getString("maximum_lenght_unique_protocol_30"));
}
if (fp.getString("description").trim().length() > 255) {
Validator.addError(errors, "description", resexception.getString("maximum_lenght_brief_summary_255"));
}
if (fp.getString("prinInvestigator").trim().length() > 255) {
Validator.addError(errors, "prinInvestigator", resexception.getString("maximum_lenght_principal_investigator_255"));
}
if (fp.getString("sponsor").trim().length() > 255) {
Validator.addError(errors, "sponsor", resexception.getString("maximum_lenght_sponsor_255"));
}
if (fp.getString("officialTitle").trim().length() > 255) {
Validator.addError(errors, "officialTitle", resexception.getString("maximum_lenght_official_title_255"));
}
study = createStudyBean(fp);
}
private void validateStudy2(FormProcessor fp, Validator v) {
v.addValidation(INPUT_START_DATE, Validator.IS_A_DATE);
if (!StringUtils.isBlank(fp.getString(INPUT_END_DATE))) {
v.addValidation(INPUT_END_DATE, Validator.IS_A_DATE);
// validation for end >= start should be provided here, but outside the scope
// it would be great to write all validation as one function, the solution provided now is a bad patch
// Date end = fp.getDateTime(INPUT_END_DATE);
// Date start = fp.getDateTime(INPUT_START_DATE);
// if (end.before(start)) {
// Validator.addError(errors, INPUT_END_DATE,
// resexception.getString("input_provided_not_occure_after_previous_start_date_time"));
// }
}
if (!StringUtils.isBlank(fp.getString(INPUT_VER_DATE))) {
v.addValidation(INPUT_VER_DATE, Validator.IS_A_DATE);
}
HashMap vStudy2 = v.validate();
if (vStudy2 != null && vStudy2.size() > 0) {
errors.putAll(vStudy2);
}
vStudy2 = null;
logger.info("has validation errors");
if (!StringUtils.isBlank(fp.getString(INPUT_START_DATE))) {
fp.addPresetValue(INPUT_START_DATE, fp.getString(INPUT_START_DATE));
}
if (!StringUtils.isBlank(fp.getString(INPUT_VER_DATE))) {
fp.addPresetValue(INPUT_VER_DATE, fp.getString(INPUT_VER_DATE));
}
if (!StringUtils.isBlank(fp.getString(INPUT_END_DATE))) {
fp.addPresetValue(INPUT_END_DATE, fp.getString(INPUT_END_DATE));
}
updateStudy2(fp);
setPresetValues(fp.getPresetValues());
}
private void validateStudy3(boolean isInterventional, Validator v, FormProcessor fp) {
v.addValidation("purpose", Validator.NO_BLANKS);
for (int i = 0; i < 10; i++) {
String type = fp.getString("interType" + i);
String name = fp.getString("interName" + i);
if (!StringUtil.isBlank(type) && StringUtil.isBlank(name)) {
v.addValidation("interName", Validator.NO_BLANKS);
request.setAttribute("interventionError", respage.getString("name_cannot_be_blank_if_type"));
break;
}
if (!StringUtil.isBlank(name) && StringUtil.isBlank(type)) {
v.addValidation("interType", Validator.NO_BLANKS);
request.setAttribute("interventionError", respage.getString("name_cannot_be_blank_if_name"));
break;
}
}
updateStudy3(isInterventional, fp);
}
private void validateStudy4(FormProcessor fp, Validator v) {
v.addValidation("conditions", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 500);
v.addValidation("keywords", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("eligibility", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 500);
HashMap vStudy4 = v.validate();
if (vStudy4 != null && vStudy4.size() > 0) {
errors.putAll(vStudy4);
}
vStudy4 = null;
if (fp.getInt("expectedTotalEnrollment") <= 0) {
Validator.addError(errors, "expectedTotalEnrollment", respage.getString("expected_total_enrollment_must_be_a_positive_number"));
}
study.setConditions(fp.getString("conditions"));
study.setKeywords(fp.getString("keywords"));
study.setEligibility(fp.getString("eligibility"));
study.setGender(fp.getString("gender"));
if (fp.getString("ageMax").length() > 3) {
Validator.addError(errors, "ageMax", respage.getString("condition_eligibility_3"));
}
study.setAgeMax(fp.getString("ageMax"));
study.setAgeMin(fp.getString("ageMin"));
study.setHealthyVolunteerAccepted(fp.getBoolean("healthyVolunteerAccepted"));
study.setExpectedTotalEnrollment(fp.getInt("expectedTotalEnrollment"));
request.setAttribute("facRecruitStatusMap", CreateStudyServlet.facRecruitStatusMap);
}
private void validateStudy5(FormProcessor fp, Validator v) {
if (!StringUtil.isBlank(fp.getString("facConEmail"))) {
v.addValidation("facConEmail", Validator.IS_A_EMAIL);
}
v.addValidation("facName", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("facCity", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("facState", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 20);
v.addValidation("facZip", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 64);
v.addValidation("facCountry", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 64);
v.addValidation("facConName", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("facConDegree", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("facConPhone", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("facConEmail", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
HashMap vStudy5 = v.validate();
if (vStudy5 != null && vStudy5.size() > 0) {
errors.putAll(vStudy5);
}
vStudy5 = null;
study.setFacilityCity(fp.getString("facCity"));
study.setFacilityContactDegree(fp.getString("facConDrgree"));
study.setFacilityName(fp.getString("facName"));
study.setFacilityContactEmail(fp.getString("facConEmail"));
study.setFacilityContactPhone(fp.getString("facConPhone"));
study.setFacilityContactName(fp.getString("facConName"));
study.setFacilityCountry(fp.getString("facCountry"));
study.setFacilityContactDegree(fp.getString("facConDegree"));
// newStudy.setFacilityRecruitmentStatus(fp.getString("facRecStatus"));
study.setFacilityState(fp.getString("facState"));
study.setFacilityZip(fp.getString("facZip"));
if (!errors.isEmpty()) {
request.setAttribute("formMessages", errors);
request.setAttribute("facRecruitStatusMap", CreateStudyServlet.facRecruitStatusMap);
}
}
private void validateStudy6(FormProcessor fp, Validator v) {
v.addValidation("medlineIdentifier", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("url", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
v.addValidation("urlDescription", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 255);
HashMap vStudy6 = v.validate();
if (vStudy6 != null && vStudy6.size() > 0) {
errors.putAll(vStudy6);
}
vStudy6 = null;
study.setMedlineIdentifier(fp.getString("medlineIdentifier"));
study.setResultsReference(fp.getBoolean("resultsReference"));
study.setUrl(fp.getString("url"));
study.setUrlDescription(fp.getString("urlDescription"));
// request.setAttribute("interventions",session.getAttribute(
// "interventions"));
if (!errors.isEmpty()) {
request.setAttribute("formMessages", errors);
}
}
private void confirmWholeStudy(FormProcessor fp) {
if (study.getStatus().isLocked()) {
study.getStudyParameterConfig().setDiscrepancyManagement("false");
} else {
study.getStudyParameterConfig().setDiscrepancyManagement(fp.getString("discrepancyManagement"));
}
study.getStudyParameterConfig().setCollectDob(fp.getString("collectDob"));
study.getStudyParameterConfig().setGenderRequired(fp.getString("genderRequired"));
study.getStudyParameterConfig().setInterviewerNameRequired(fp.getString("interviewerNameRequired"));
study.getStudyParameterConfig().setInterviewerNameDefault(fp.getString("interviewerNameDefault"));
study.getStudyParameterConfig().setInterviewDateEditable(fp.getString("interviewDateEditable"));
study.getStudyParameterConfig().setInterviewDateRequired(fp.getString("interviewDateRequired"));
study.getStudyParameterConfig().setInterviewerNameEditable(fp.getString("interviewerNameEditable"));
study.getStudyParameterConfig().setInterviewDateDefault(fp.getString("interviewDateDefault"));
study.getStudyParameterConfig().setSubjectIdGeneration(fp.getString("subjectIdGeneration"));
study.getStudyParameterConfig().setSubjectPersonIdRequired(fp.getString("subjectPersonIdRequired"));
study.getStudyParameterConfig().setSubjectIdPrefixSuffix(fp.getString("subjectIdPrefixSuffix"));
study.getStudyParameterConfig().setPersonIdShownOnCRF(fp.getString("personIdShownOnCRF"));
study.getStudyParameterConfig().setSecondaryLabelViewable(fp.getString("secondaryLabelViewable"));
study.getStudyParameterConfig().setAdminForcedReasonForChange(fp.getString("adminForcedReasonForChange"));
study.getStudyParameterConfig().setEventLocationRequired(fp.getString("eventLocationRequired"));
if (!errors.isEmpty()) {
request.setAttribute("formMessages", errors);
}
}
private StudyBean createStudyBean(FormProcessor fp) {
StudyBean newStudy = study;
newStudy.setId(fp.getInt("studyId"));
newStudy.setName(fp.getString("name"));
newStudy.setOfficialTitle(fp.getString("officialTitle"));
newStudy.setIdentifier(fp.getString("uniqueProId"));
newStudy.setSecondaryIdentifier(fp.getString("secondProId"));
newStudy.setPrincipalInvestigator(fp.getString("prinInvestigator"));
newStudy.setSummary(fp.getString("description"));
newStudy.setProtocolDescription(fp.getString("protocolDescription"));
newStudy.setSponsor(fp.getString("sponsor"));
newStudy.setCollaborators(fp.getString("collaborators"));
return newStudy;
}
private boolean updateStudy2(FormProcessor fp) {
study.setOldStatus(study.getStatus());
study.setStatus(Status.get(fp.getInt("status")));
if (StringUtil.isBlank(fp.getString(INPUT_VER_DATE))) {
study.setProtocolDateVerification(null);
} else {
study.setProtocolDateVerification(fp.getDate(INPUT_VER_DATE));
}
study.setDatePlannedStart(fp.getDate(INPUT_START_DATE));
if (StringUtil.isBlank(fp.getString(INPUT_END_DATE))) {
study.setDatePlannedEnd(null);
} else {
study.setDatePlannedEnd(fp.getDate(INPUT_END_DATE));
}
study.setPhase(fp.getString("phase"));
if (fp.getInt("genetic") == 1) {
study.setGenetic(true);
} else {
study.setGenetic(false);
}
String interventional = resadmin.getString("interventional");
return interventional.equalsIgnoreCase(study.getProtocolType());
}
private void updateStudy3(boolean isInterventional, FormProcessor fp) {
study.setPurpose(fp.getString("purpose"));
ArrayList interventionArray = new ArrayList();
if (isInterventional) {
study.setAllocation(fp.getString("allocation"));
study.setMasking(fp.getString("masking"));
study.setControl(fp.getString("control"));
study.setAssignment(fp.getString("assignment"));
study.setEndpoint(fp.getString("endpoint"));
StringBuffer interventions = new StringBuffer();
for (int i = 0; i < 10; i++) {
String type = fp.getString("interType" + i);
String name = fp.getString("interName" + i);
if (!StringUtil.isBlank(type) && !StringUtil.isBlank(name)) {
InterventionBean ib = new InterventionBean(fp.getString("interType" + i), fp.getString("interName" + i));
interventionArray.add(ib);
interventions.append(ib.toString()).append(",");
}
}
study.setInterventions(interventions.toString());
} else {// type = observational
study.setDuration(fp.getString("duration"));
study.setSelection(fp.getString("selection"));
study.setTiming(fp.getString("timing"));
}
request.setAttribute("interventions", interventionArray);
}
private ArrayList parseInterventions(StudyBean sb) {
ArrayList inters = new ArrayList();
String interventions = sb.getInterventions();
try {
if (!StringUtil.isBlank(interventions)) {
StringTokenizer st = new StringTokenizer(interventions, ",");
while (st.hasMoreTokens()) {
String s = st.nextToken();
StringTokenizer st1 = new StringTokenizer(s, "/");
String type = st1.nextToken();
String name = st1.nextToken();
InterventionBean ib = new InterventionBean(type, name);
inters.add(ib);
}
}
} catch (NoSuchElementException nse) {
return new ArrayList();
}
return inters;
}
private void setMaps(boolean isInterventional, ArrayList interventionArray) {
if (isInterventional) {
request.setAttribute("interPurposeMap", CreateStudyServlet.interPurposeMap);
request.setAttribute("allocationMap", CreateStudyServlet.allocationMap);
request.setAttribute("maskingMap", CreateStudyServlet.maskingMap);
request.setAttribute("controlMap", CreateStudyServlet.controlMap);
request.setAttribute("assignmentMap", CreateStudyServlet.assignmentMap);
request.setAttribute("endpointMap", CreateStudyServlet.endpointMap);
request.setAttribute("interTypeMap", CreateStudyServlet.interTypeMap);
session.setAttribute("interventions", interventionArray);
} else {
request.setAttribute("obserPurposeMap", CreateStudyServlet.obserPurposeMap);
request.setAttribute("selectionMap", CreateStudyServlet.selectionMap);
request.setAttribute("timingMap", CreateStudyServlet.timingMap);
}
}
private void submitStudy(StudyBean newStudy) {
StudyDAO sdao = new StudyDAO(sm.getDataSource());
StudyParameterValueDAO spvdao = new StudyParameterValueDAO(sm.getDataSource());
StudyBean study1 = newStudy;
logger.info("study bean to be updated:" + study1.getName());
study1.setUpdatedDate(new Date());
study1.setUpdater((UserAccountBean) session.getAttribute("userBean"));
sdao.update(study1);
ArrayList siteList = (ArrayList) sdao.findAllByParent(newStudy.getId());
if (siteList.size() > 0) {
sdao.updateSitesStatus(study1);
}
StudyParameterValueBean spv = new StudyParameterValueBean();
spv.setStudyId(study1.getId());
spv.setParameter("collectDob");
spv.setValue(new Integer(study1.getStudyParameterConfig().getCollectDob()).toString());
updateParameter(spvdao, spv);
spv.setParameter("discrepancyManagement");
spv.setValue(study1.getStudyParameterConfig().getDiscrepancyManagement());
updateParameter(spvdao, spv);
spv.setParameter("genderRequired");
spv.setValue(study1.getStudyParameterConfig().getGenderRequired());
updateParameter(spvdao, spv);
spv.setParameter("subjectPersonIdRequired");
spv.setValue(study1.getStudyParameterConfig().getSubjectPersonIdRequired());
updateParameter(spvdao, spv);
spv.setParameter("interviewerNameRequired");
spv.setValue(study1.getStudyParameterConfig().getInterviewerNameRequired());
updateParameter(spvdao, spv);
spv.setParameter("interviewerNameDefault");
spv.setValue(study1.getStudyParameterConfig().getInterviewerNameDefault());
updateParameter(spvdao, spv);
spv.setParameter("interviewerNameEditable");
spv.setValue(study1.getStudyParameterConfig().getInterviewerNameEditable());
updateParameter(spvdao, spv);
// BWP 1/12/2009 3169 Update interviewerNameEditable and
// interviewDateEditable parameters for all sites>>
List<StudyBean> sites = new ArrayList<StudyBean>();
sites = (ArrayList) sdao.findAllByParent(newStudy.getId());
if (sites != null && !sites.isEmpty()) {
updateInterviewerForSites(newStudy, sites, spvdao, "interviewerNameEditable");
}
// >>
spv.setParameter("interviewDateRequired");
spv.setValue(study1.getStudyParameterConfig().getInterviewDateRequired());
updateParameter(spvdao, spv);
spv.setParameter("interviewDateDefault");
spv.setValue(study1.getStudyParameterConfig().getInterviewDateDefault());
updateParameter(spvdao, spv);
spv.setParameter("interviewDateEditable");
spv.setValue(study1.getStudyParameterConfig().getInterviewDateEditable());
updateParameter(spvdao, spv);
// BWP 1/12/2009 3169>>
if (sites != null && !sites.isEmpty()) {
updateInterviewerForSites(newStudy, sites, spvdao, "interviewDateEditable");
}
// >>
spv.setParameter("subjectIdGeneration");
spv.setValue(study1.getStudyParameterConfig().getSubjectIdGeneration());
updateParameter(spvdao, spv);
spv.setParameter("subjectIdPrefixSuffix");
spv.setValue(study1.getStudyParameterConfig().getSubjectIdPrefixSuffix());
updateParameter(spvdao, spv);
spv.setParameter("personIdShownOnCRF");
spv.setValue(study1.getStudyParameterConfig().getPersonIdShownOnCRF());
updateParameter(spvdao, spv);
spv.setParameter("secondaryLabelViewable");
spv.setValue(study1.getStudyParameterConfig().getSecondaryLabelViewable());
updateParameter(spvdao, spv);
// tbh, 06/04/2009 3684>>
spv.setParameter("adminForcedReasonForChange");
spv.setValue(study1.getStudyParameterConfig().getAdminForcedReasonForChange());
updateParameter(spvdao, spv);
// >>
// AH 08/26/2010 5732
spv.setParameter("eventLocationRequired");
spv.setValue(study1.getStudyParameterConfig().getEventLocationRequired());
updateParameter(spvdao, spv);
StudyBean curStudy = (StudyBean) session.getAttribute("study");
if (curStudy != null && study1.getId() == curStudy.getId()) {
super.currentStudy = study1;
session.setAttribute("study", study1);
}
// update manage_pedigrees for all sites
ArrayList children = (ArrayList) sdao.findAllByParent(study1.getId());
for (int i = 0; i < children.size(); i++) {
StudyBean child = (StudyBean) children.get(i);
child.setType(study1.getType());// same as parent's type
child.setUpdatedDate(new Date());
child.setUpdater(ub);
sdao.update(child);
// YW << update "collectDob" and "genderRequired" for sites
StudyParameterValueBean childspv = new StudyParameterValueBean();
childspv.setStudyId(child.getId());
childspv.setParameter("collectDob");
childspv.setValue(new Integer(study1.getStudyParameterConfig().getCollectDob()).toString());
updateParameter(spvdao, childspv);
childspv.setParameter("genderRequired");
childspv.setValue(study1.getStudyParameterConfig().getGenderRequired());
updateParameter(spvdao, childspv);
}
}
@Override
protected String getAdminServlet() {
return SecureController.ADMIN_SERVLET_CODE;
}
private void updateParameter(StudyParameterValueDAO spvdao, StudyParameterValueBean spv) {
StudyParameterValueBean spv1 = spvdao.findByHandleAndStudy(spv.getStudyId(), spv.getParameter());
logger.debug("found parameter: " + spv.getParameter());
if (spv1.getId() > 0) {
spvdao.update(spv);
logger.debug("updating");
} else {
spvdao.create(spv);
logger.debug("creating");
}
}
private void updateInterviewerForSites(StudyBean studyBean, List<StudyBean> sites, StudyParameterValueDAO studyParameterValueDAO, String parameterType) {
StudyParameterValueBean studyParameterValueBean = new StudyParameterValueBean();
if ("interviewerNameEditable".equalsIgnoreCase(parameterType)) {
studyParameterValueBean.setParameter("interviewerNameEditable");
studyParameterValueBean.setValue(studyBean.getStudyParameterConfig().getInterviewerNameEditable());
} else {
studyParameterValueBean.setParameter("interviewDateEditable");
studyParameterValueBean.setValue(studyBean.getStudyParameterConfig().getInterviewDateEditable());
}
for (StudyBean siteBean : sites) {
studyParameterValueBean.setStudyId(siteBean.getId());
updateParameter(studyParameterValueDAO, studyParameterValueBean);
}
}
}