/* * 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.bean.rule.XmlSchemaValidationHelper; import org.akaza.openclinica.control.SpringServletAccess; import org.akaza.openclinica.control.core.SecureController; import org.akaza.openclinica.core.form.StringUtil; import org.akaza.openclinica.domain.rule.RuleBulkExecuteContainer; import org.akaza.openclinica.domain.rule.RuleBulkExecuteContainerTwo; import org.akaza.openclinica.i18n.core.LocaleResolver; import org.akaza.openclinica.logic.rulerunner.ExecutionMode; import org.akaza.openclinica.service.rule.RuleSetServiceInterface; import org.akaza.openclinica.service.rule.RulesPostImportContainerService; import org.akaza.openclinica.view.Page; import org.akaza.openclinica.web.InsufficientPermissionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.mail.javamail.JavaMailSenderImpl; import java.util.HashMap; import java.util.Locale; import java.util.Set; /** * Run Rules Using this Servlet * * @author Krikor krumlian */ public class RunRuleServlet extends SecureController { private static final long serialVersionUID = 9116068126651934226L; protected final Logger log = LoggerFactory.getLogger(RunRuleServlet.class); Locale locale; XmlSchemaValidationHelper schemaValidator = new XmlSchemaValidationHelper(); RuleSetServiceInterface ruleSetService; RulesPostImportContainerService rulesPostImportContainerService; @Override public void processRequest() throws Exception { String action = request.getParameter("action"); String crfId = request.getParameter("crfId"); String ruleSetRuleId = request.getParameter("ruleSetRuleId"); String versionId = request.getParameter("versionId"); if (StringUtil.isBlank(action)) { // TODO : if someone tampers with URL catch here and forwar to correct place forwardPage(Page.MENU_SERVLET); } //Boolean dryRun = action == null || "dryRun".equalsIgnoreCase(action) ? true : false; ExecutionMode executionMode = action == null || "dryRun".equalsIgnoreCase(action) ? ExecutionMode.DRY_RUN : ExecutionMode.SAVE; String submitLinkParams = ""; HashMap<RuleBulkExecuteContainer, HashMap<RuleBulkExecuteContainerTwo, Set<String>>> result = null; if (ruleSetRuleId != null && versionId != null) { submitLinkParams = "ruleSetRuleId=" + ruleSetRuleId + "&versionId=" + versionId + "&action=no"; result = getRuleSetService().runRulesInBulk(ruleSetRuleId, versionId, executionMode, currentStudy, ub); } else { submitLinkParams = "crfId=" + crfId + "&action=no"; result = getRuleSetService().runRulesInBulk(crfId, executionMode, currentStudy, ub); } request.setAttribute("result", result); request.setAttribute("submitLinkParams", submitLinkParams); if (executionMode == ExecutionMode.SAVE) { forwardPage(Page.LIST_RULE_SETS_SERVLET); } else { forwardPage(Page.VIEW_EXECUTED_RULES_FROM_CRF); } } private RuleSetServiceInterface getRuleSetService() { ruleSetService = this.ruleSetService != null ? ruleSetService : (RuleSetServiceInterface) SpringServletAccess.getApplicationContext(context).getBean( "ruleSetService"); ruleSetService.setMailSender((JavaMailSenderImpl) SpringServletAccess.getApplicationContext(context).getBean("mailSender")); ruleSetService.setContextPath(getContextPath()); ruleSetService.setRequestURLMinusServletPath(getRequestURLMinusServletPath()); return ruleSetService; } @Override protected String getAdminServlet() { if (ub.isSysAdmin()) { return SecureController.ADMIN_SERVLET_CODE; } else { return ""; } } @Override public void mayProceed() throws InsufficientPermissionException { locale = LocaleResolver.getLocale(request); 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"); } }