/*
* OpenClinica is distributed under the
* GNU Lesser General Public License (GNU LGPL).
* For details see: http://www.openclinica.org/license
*
* Copyright 2003-2008 Akaza Research
*/
package org.akaza.openclinica.control.submit;
import org.akaza.openclinica.bean.core.Role;
import org.akaza.openclinica.control.SpringServletAccess;
import org.akaza.openclinica.control.core.SecureController;
import org.akaza.openclinica.domain.rule.RuleSetBasedViewContainer;
import org.akaza.openclinica.domain.rule.RuleSetBean;
import org.akaza.openclinica.service.rule.RuleSetServiceInterface;
import org.akaza.openclinica.view.Page;
import org.akaza.openclinica.web.InsufficientPermissionException;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import java.util.ArrayList;
import java.util.List;
/**
* @author Krikor Krumlian
*/
public class RunRuleSetServlet extends SecureController {
private static String RULESET_ID = "ruleSetId";
private static String RULE_ID = "ruleId";
private static String RULESET = "ruleSet";
private static String RULESET_RESULT = "ruleSetResult";
private RuleSetServiceInterface ruleSetService;
/**
*
*/
@Override
public void mayProceed() throws InsufficientPermissionException {
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") + respage.getString("change_study_contact_sysadmin"));
throw new InsufficientPermissionException(Page.MENU_SERVLET, resexception.getString("not_study_director"), "1");
}
@Override
public void processRequest() throws Exception {
String ruleSetId = request.getParameter(RULESET_ID);
String ruleId = request.getParameter(RULE_ID);
String dryRun = request.getParameter("dryRun");
RuleSetBean ruleSetBean = getRuleSetBean(ruleSetId, ruleId);
if (ruleSetBean != null) {
List<RuleSetBean> ruleSets = new ArrayList<RuleSetBean>();
ruleSets.add(ruleSetBean);
if (dryRun != null && dryRun.equals("no")) {
List<RuleSetBasedViewContainer> resultOfRunningRules = getRuleSetService().runRulesInBulk(ruleSets, false, currentStudy, ub ,false);
addPageMessage(respage.getString("actions_successfully_taken"));
forwardPage(Page.LIST_RULE_SETS_SERVLET);
} else {
List<RuleSetBasedViewContainer> resultOfRunningRules = getRuleSetService().runRulesInBulk(ruleSets, true, currentStudy, ub,false);
request.setAttribute(RULESET, ruleSetBean);
request.setAttribute(RULESET_RESULT, resultOfRunningRules);
if (resultOfRunningRules.size() > 0) {
addPageMessage(resword.getString("view_executed_rules_affected_subjects"));
} else {
addPageMessage(resword.getString("view_executed_rules_no_affected_subjects"));
}
forwardPage(Page.VIEW_EXECUTED_RULES);
}
} else {
addPageMessage("RuleSet not found");
forwardPage(Page.LIST_RULE_SETS_SERVLET);
}
}
private RuleSetBean getRuleSetBean(String ruleSetId, String ruleId) {
RuleSetBean ruleSetBean = null;
if (ruleId != null && ruleSetId != null && ruleId.length() > 0 && ruleSetId.length() > 0) {
ruleSetBean = getRuleSetService().getRuleSetById(currentStudy, ruleSetId);
ruleSetBean = ruleSetService.filterByRules(ruleSetBean, Integer.valueOf(ruleId));
} else if (ruleSetId != null && ruleSetId.length() > 0) {
// getRuleSetService().getRuleSetById(currentStudy, ruleSetId);
// ruleSetBean = getRuleSetService().getRuleSetById(currentStudy, ruleSetId, null);
ruleSetBean = getRuleSetService().getRuleSetById(currentStudy, ruleSetId);
}
return ruleSetBean;
}
@Override
protected String getAdminServlet() {
if (ub.isSysAdmin()) {
return SecureController.ADMIN_SERVLET_CODE;
} else {
return "";
}
}
private RuleSetServiceInterface getRuleSetService() {
ruleSetService =
this.ruleSetService != null ? ruleSetService : (RuleSetServiceInterface) SpringServletAccess.getApplicationContext(context).getBean(
"ruleSetService");
ruleSetService.setContextPath(getContextPath());
ruleSetService.setMailSender((JavaMailSenderImpl) SpringServletAccess.getApplicationContext(context).getBean("mailSender"));
ruleSetService.setRequestURLMinusServletPath(getRequestURLMinusServletPath());
return ruleSetService;
}
}