package org.akaza.openclinica.domain.rule.action;
import org.akaza.openclinica.bean.login.UserAccountBean;
import org.akaza.openclinica.bean.managestudy.StudyBean;
import org.akaza.openclinica.bean.submit.ItemDataBean;
import org.akaza.openclinica.dao.hibernate.RuleActionRunLogDao;
import org.akaza.openclinica.domain.rule.RuleSetRuleBean;
import org.akaza.openclinica.logic.rulerunner.ExecutionMode;
import org.akaza.openclinica.logic.rulerunner.RuleRunner.RuleRunnerMode;
import org.akaza.openclinica.service.managestudy.DiscrepancyNoteService;
import javax.sql.DataSource;
public class DiscrepancyNoteActionProcessor implements ActionProcessor {
DataSource ds;
DiscrepancyNoteService discrepancyNoteService;
RuleActionRunLogDao ruleActionRunLogDao;
RuleSetRuleBean ruleSetRule;
public DiscrepancyNoteActionProcessor(DataSource ds, RuleActionRunLogDao ruleActionRunLogDao, RuleSetRuleBean ruleSetRule) {
this.ds = ds;
this.ruleActionRunLogDao = ruleActionRunLogDao;
this.ruleSetRule = ruleSetRule;
}
public RuleActionBean execute(RuleRunnerMode ruleRunnerMode, ExecutionMode executionMode, RuleActionBean ruleAction, ItemDataBean itemDataBean,
String itemData, StudyBean currentStudy, UserAccountBean ub, Object... arguments) {
switch (executionMode) {
case DRY_RUN: {
return dryRun(ruleAction, itemDataBean, itemData, currentStudy, ub);
}
case SAVE: {
return save(ruleAction, itemDataBean, itemData, currentStudy, ub);
}
default:
return null;
}
}
private RuleActionBean save(RuleActionBean ruleAction, ItemDataBean itemDataBean, String itemData, StudyBean currentStudy, UserAccountBean ub) {
getDiscrepancyNoteService().saveFieldNotes(ruleAction.getCuratedMessage(), itemDataBean.getId(), itemData, currentStudy, ub);
RuleActionRunLogBean ruleActionRunLog =
new RuleActionRunLogBean(ruleAction.getActionType(), itemDataBean, itemDataBean.getValue(), ruleSetRule.getRuleBean().getOid());
ruleActionRunLogDao.saveOrUpdate(ruleActionRunLog);
return null;
}
private RuleActionBean dryRun(RuleActionBean ruleAction, ItemDataBean itemDataBean, String itemData, StudyBean currentStudy, UserAccountBean ub) {
return ruleAction;
}
public void execute(String message, int itemDataBeanId, String itemData, StudyBean currentStudy, UserAccountBean ub, Object... arguments) {
getDiscrepancyNoteService().saveFieldNotes(message, itemDataBeanId, itemData, currentStudy, ub);
}
private DiscrepancyNoteService getDiscrepancyNoteService() {
discrepancyNoteService = this.discrepancyNoteService != null ? discrepancyNoteService : new DiscrepancyNoteService(ds);
return discrepancyNoteService;
}
}