package org.akaza.openclinica.domain.rule.action;
import org.akaza.openclinica.bean.core.Status;
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.RuleSetBean;
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.crfdata.DynamicsMetadataService;
import javax.sql.DataSource;
public class InsertActionProcessor implements ActionProcessor {
DataSource ds;
DynamicsMetadataService itemMetadataService;
RuleActionRunLogDao ruleActionRunLogDao;
RuleSetBean ruleSet;
RuleSetRuleBean ruleSetRule;
public InsertActionProcessor(DataSource ds, DynamicsMetadataService itemMetadataService, RuleActionRunLogDao ruleActionRunLogDao, RuleSetBean ruleSet,
RuleSetRuleBean ruleSetRule) {
this.itemMetadataService = itemMetadataService;
this.ruleSet = ruleSet;
this.ruleSetRule = ruleSetRule;
this.ruleActionRunLogDao = ruleActionRunLogDao;
this.ds = ds;
}
public RuleActionBean execute(RuleRunnerMode ruleRunnerMode, ExecutionMode executionMode, RuleActionBean ruleAction, ItemDataBean itemDataBean,
String itemData, StudyBean currentStudy, UserAccountBean ub, Object... arguments) {
switch (executionMode) {
case DRY_RUN: {
if (ruleRunnerMode == RuleRunnerMode.DATA_ENTRY) {
return null;
} else {
dryRun(ruleAction, itemDataBean, itemData, currentStudy, ub);
}
}
case SAVE: {
if (ruleRunnerMode == RuleRunnerMode.DATA_ENTRY) {
save(ruleAction, itemDataBean, itemData, currentStudy, ub);
} else if(ruleRunnerMode == RuleRunnerMode.IMPORT_DATA) {
saveWithStatusUpdated(ruleAction, itemDataBean, itemData, currentStudy, ub);
} else {
save(ruleAction, itemDataBean, itemData, currentStudy, ub);
}
}
default:
return null;
}
}
private RuleActionBean saveWithStatusUpdated(RuleActionBean ruleAction, ItemDataBean itemDataBean, String itemData, StudyBean currentStudy, UserAccountBean ub) {
itemDataBean.setStatus(Status.UNAVAILABLE);
getItemMetadataService().insert(itemDataBean, ((InsertActionBean) ruleAction).getProperties(), ub, ruleSet,null);
ruleActionRunLogSaveOrUpdate(ruleAction, itemDataBean, itemData, currentStudy, ub);
return null;
}
private RuleActionBean save(RuleActionBean ruleAction, ItemDataBean itemDataBean, String itemData, StudyBean currentStudy, UserAccountBean ub) {
getItemMetadataService().insert(itemDataBean.getId(), ((InsertActionBean) ruleAction).getProperties(), ub, ruleSet,null);
ruleActionRunLogSaveOrUpdate(ruleAction, itemDataBean, itemData, currentStudy, ub);
return null;
}
private void ruleActionRunLogSaveOrUpdate(RuleActionBean ruleAction, ItemDataBean itemDataBean, String itemData, StudyBean currentStudy, UserAccountBean ub) {
RuleActionRunLogBean ruleActionRunLog =
new RuleActionRunLogBean(ruleAction.getActionType(), itemDataBean, itemDataBean.getValue(), ruleSetRule.getRuleBean().getOid());
if (ruleActionRunLogDao.findCountByRuleActionRunLogBean(ruleActionRunLog) > 0) {
} else {
ruleActionRunLogDao.saveOrUpdate(ruleActionRunLog);
}
}
private RuleActionBean saveAndReturnMessage(RuleActionBean ruleAction, ItemDataBean itemDataBean, String itemData, StudyBean currentStudy,
UserAccountBean ub) {
//
return ruleAction;
}
private RuleActionBean dryRun(RuleActionBean ruleAction, ItemDataBean itemDataBean, String itemData, StudyBean currentStudy, UserAccountBean ub) {
return ruleAction;
}
private DynamicsMetadataService getItemMetadataService() {
return itemMetadataService;
}
}