/*
* 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.GroupClassType;
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.managestudy.StudyGroupBean;
import org.akaza.openclinica.bean.managestudy.StudyGroupClassBean;
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.StudyGroupClassDAO;
import org.akaza.openclinica.dao.managestudy.StudyGroupDAO;
import org.akaza.openclinica.exception.OpenClinicaException;
import org.akaza.openclinica.view.Page;
import org.akaza.openclinica.web.InsufficientPermissionException;
import java.util.ArrayList;
import java.util.Date;
/**
* @author jxu
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class UpdateSubjectGroupClassServlet extends SecureController {
@Override
public void mayProceed() throws InsufficientPermissionException {
checkStudyLocked(Page.SUBJECT_GROUP_CLASS_LIST_SERVLET, respage.getString("current_study_locked"));
if (ub.isSysAdmin()) {
return;
}
if (currentRole.getRole().equals(Role.STUDYDIRECTOR) || currentRole.getRole().equals(Role.COORDINATOR)) {
return;
}
addPageMessage(respage.getString("no_have_correct_privilege_current_study") + "\n" + respage.getString("change_study_contact_sysadmin"));
throw new InsufficientPermissionException(Page.SUBJECT_GROUP_CLASS_LIST_SERVLET, resexception.getString("not_study_director"), "1");
}
@Override
public void processRequest() throws Exception {
String action = request.getParameter("action");
FormProcessor fp = new FormProcessor(request);
int classId = fp.getInt("id");
if (classId == 0) {
addPageMessage(respage.getString("please_choose_a_subject_group_class_to_edit"));
forwardPage(Page.SUBJECT_GROUP_CLASS_LIST_SERVLET);
} else {
StudyGroupClassDAO sgcdao = new StudyGroupClassDAO(sm.getDataSource());
StudyGroupDAO sgdao = new StudyGroupDAO(sm.getDataSource());
if (!fp.isSubmitted()) {
StudyGroupClassBean sgcb = (StudyGroupClassBean) sgcdao.findByPK(classId);
ArrayList groups = sgdao.findAllByGroupClass(sgcb);
request.setAttribute("groupTypes", GroupClassType.toArrayList());
session.setAttribute("group", sgcb);
session.setAttribute("studyGroups", groups);
forwardPage(Page.UPDATE_SUBJECT_GROUP_CLASS);
} else {
if (action.equalsIgnoreCase("confirm")) {
confirmGroup();
} else if (action.equalsIgnoreCase("submit")) {
submitGroup();
} else {
addPageMessage(respage.getString("no_action_specified"));
forwardPage(Page.SUBJECT_GROUP_CLASS_LIST_SERVLET);
}
}
}
}
/**
* Validates the first section of study and save it into study bean
*
* @param request
* @param response
* @throws Exception
*/
private void confirmGroup() throws Exception {
Validator v = new Validator(request);
FormProcessor fp = new FormProcessor(request);
v.addValidation("name", Validator.NO_BLANKS);
// v.addValidation("groupClassTypeId", Validator.IS_AN_INTEGER);
v.addValidation("subjectAssignment", Validator.NO_BLANKS);
v.addValidation("name", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 30);
v.addValidation("subjectAssignment", Validator.LENGTH_NUMERIC_COMPARISON, NumericComparisonOperator.LESS_THAN_OR_EQUAL_TO, 30);
ArrayList studyGroups = new ArrayList();
for (int i = 0; i < 10; i++) {
String name = fp.getString("studyGroup" + i);
int studyGroupId = fp.getInt("studyGroupId" + i);
String description = fp.getString("studyGroupDescription" + i);
if (!StringUtil.isBlank(name)) {
StudyGroupBean g = new StudyGroupBean();
g.setName(name);
g.setDescription(description);
g.setId(studyGroupId);
studyGroups.add(g);
if (name.length() > 255) {
request.setAttribute("studyGroupError", resexception.getString("group_name_cannot_be_more_255"));
break;
}
if (description.length() > 1000) {
request.setAttribute("studyGroupError", resexception.getString("group_description_cannot_be_more_100"));
break;
}
}
}
errors = v.validate();
if (fp.getInt("groupClassTypeId") == 0) {
Validator.addError(errors, "groupClassTypeId", "Group Class Type is required.");
}
StudyGroupClassBean group = (StudyGroupClassBean) session.getAttribute("group");
group.setName(fp.getString("name"));
group.setGroupClassTypeId(fp.getInt("groupClassTypeId"));
group.setSubjectAssignment(fp.getString("subjectAssignment"));
session.setAttribute("group", group);
session.setAttribute("studyGroups", studyGroups);
if (errors.isEmpty()) {
logger.info("no errors in the first section");
group.setGroupClassTypeName(GroupClassType.get(group.getGroupClassTypeId()).getName());
forwardPage(Page.UPDATE_SUBJECT_GROUP_CLASS_CONFIRM);
} else {
logger.info("has validation errors in the first section");
request.setAttribute("formMessages", errors);
request.setAttribute("groupTypes", GroupClassType.toArrayList());
forwardPage(Page.UPDATE_SUBJECT_GROUP_CLASS);
}
}
private void submitGroup() throws OpenClinicaException {
StudyGroupClassBean group = (StudyGroupClassBean) session.getAttribute("group");
ArrayList studyGroups = (ArrayList) session.getAttribute("studyGroups");
ArrayList newStudyGroups = (ArrayList) session.getAttribute("newStudyGroups");
StudyGroupClassDAO sgcdao = new StudyGroupClassDAO(sm.getDataSource());
group.setUpdater(ub);
group.setUpdatedDate(new Date());
group = (StudyGroupClassBean) sgcdao.update(group);
if (!group.isActive()) {
addPageMessage(respage.getString("the_subject_group_class_no_updated_database"));
} else {
StudyGroupDAO sgdao = new StudyGroupDAO(sm.getDataSource());
for (int i = 0; i < studyGroups.size(); i++) {
StudyGroupBean sg = (StudyGroupBean) studyGroups.get(i);
sg.setStudyGroupClassId(group.getId());
if (sg.getId() == 0) {
sg.setOwner(ub);
sg.setStatus(Status.AVAILABLE);
sgdao.create(sg);
} else {
sg.setUpdater(ub);
sg.setStatus(Status.AVAILABLE);
sgdao.update(sg);
}
}
addPageMessage(respage.getString("the_subject_group_class_updated_succesfully"));
}
forwardPage(Page.SUBJECT_GROUP_CLASS_LIST_SERVLET);
}
}