use of org.akaza.openclinica.domain.rule.action.DiscrepancyNoteActionBean in project OpenClinica by OpenClinica.
the class RulesPostImportContainerService method isRuleActionValid.
private void isRuleActionValid(RuleActionBean ruleActionBean, AuditableBeanWrapper<RuleSetBean> ruleSetBeanWrapper, EventDefinitionCRFBean eventDefinitionCRFBean, List<RuleSetBean> eventActionsRuleSetBean) {
RuleActionRunBean ruleActionRun = ruleActionBean.getRuleActionRun();
if (ruleActionBean.getActionType().getCode() != 6 && !ruleActionRun.getInitialDataEntry() && !ruleActionRun.getAdministrativeDataEntry() && !ruleActionRun.getBatch() && !ruleActionRun.getDoubleDataEntry() && !ruleActionRun.getImportDataEntry())
ruleSetBeanWrapper.error(createError("OCRERR_0050"));
String message = "";
String emailSubject = "";
if (ruleActionBean instanceof org.akaza.openclinica.domain.rule.action.NotificationActionBean) {
message = ((NotificationActionBean) ruleActionBean).getMessage();
emailSubject = ((NotificationActionBean) ruleActionBean).getSubject();
if (emailSubject.length() > 330)
ruleSetBeanWrapper.error(createError("OCRERR_0048"));
if (message.length() > 2040)
ruleSetBeanWrapper.error(createError("OCRERR_0049"));
}
if (ruleActionBean instanceof org.akaza.openclinica.domain.rule.action.EmailActionBean)
isUploadedRuleSupportedForEventAction(ruleSetBeanWrapper);
if (ruleActionBean instanceof DiscrepancyNoteActionBean)
isUploadedRuleSupportedForEventAction(ruleSetBeanWrapper);
if (ruleActionBean instanceof ShowActionBean) {
if (!isUploadedRuleSupportedForEventAction(ruleSetBeanWrapper)) {
List<PropertyBean> properties = ((ShowActionBean) ruleActionBean).getProperties();
//if (ruleActionBean.getRuleActionRun().getBatch() == true || ruleActionBean.getRuleActionRun().getImportDataEntry() == true) {
if (ruleActionBean.getRuleActionRun().getBatch() == true) {
ruleSetBeanWrapper.error("ShowAction " + ((ShowActionBean) ruleActionBean).toString() + " is not Valid. You cannot have Batch=\"true\". ");
//+ " is not Valid. You cannot have ImportDataEntry=\"true\" Batch=\"true\". ");
}
for (PropertyBean propertyBean : properties) {
String result = getExpressionService().checkValidityOfItemOrItemGroupOidInCrf(propertyBean.getOid(), ruleSetBeanWrapper.getAuditableBean());
// String result = getExpressionService().isExpressionValid(oid, ruleSetBeanWrapper.getAuditableBean(), 2) ? "OK" : "";
if (!result.equals("OK")) {
ruleSetBeanWrapper.error("ShowAction OID " + result + " is not Valid. ");
}
}
}
}
if (ruleActionBean instanceof HideActionBean) {
if (!isUploadedRuleSupportedForEventAction(ruleSetBeanWrapper)) {
List<PropertyBean> properties = ((HideActionBean) ruleActionBean).getProperties();
//if (ruleActionBean.getRuleActionRun().getBatch() == true || ruleActionBean.getRuleActionRun().getImportDataEntry() == true) {
if (ruleActionBean.getRuleActionRun().getBatch() == true) {
ruleSetBeanWrapper.error("HideAction " + ((HideActionBean) ruleActionBean).toString() + " is not Valid. You cannot have Batch=\"true\". ");
//+ " is not Valid. You cannot have ImportDataEntry=\"true\" Batch=\"true\". ");
}
for (PropertyBean propertyBean : properties) {
String result = getExpressionService().checkValidityOfItemOrItemGroupOidInCrf(propertyBean.getOid(), ruleSetBeanWrapper.getAuditableBean());
// String result = getExpressionService().isExpressionValid(oid, ruleSetBeanWrapper.getAuditableBean(), 2) ? "OK" : "";
if (!result.equals("OK")) {
ruleSetBeanWrapper.error("HideAction OID " + result + " is not Valid. ");
}
}
}
}
if (ruleActionBean instanceof InsertActionBean) {
if (!isUploadedRuleSupportedForEventAction(ruleSetBeanWrapper)) {
DataBinder dataBinder = new DataBinder(ruleActionBean);
Errors errors = dataBinder.getBindingResult();
InsertActionValidator insertActionValidator = getInsertActionValidator();
insertActionValidator.setEventDefinitionCRFBean(eventDefinitionCRFBean);
insertActionValidator.setRuleSetBean(ruleSetBeanWrapper.getAuditableBean());
insertActionValidator.setExpressionService(expressionService);
insertActionValidator.validate(ruleActionBean, errors);
if (errors.hasErrors()) {
ruleSetBeanWrapper.error("InsertAction is not valid: " + errors.getAllErrors().get(0).getCode());
}
}
}
if (ruleActionBean instanceof RandomizeActionBean) {
if (!isUploadedRuleSupportedForEventAction(ruleSetBeanWrapper)) {
DataBinder dataBinder = new DataBinder(ruleActionBean);
Errors errors = dataBinder.getBindingResult();
RandomizeActionValidator randomizeActionValidator = getRandomizeActionValidator();
randomizeActionValidator.setEventDefinitionCRFBean(eventDefinitionCRFBean);
randomizeActionValidator.setRuleSetBean(ruleSetBeanWrapper.getAuditableBean());
randomizeActionValidator.setExpressionService(expressionService);
randomizeActionValidator.validate(ruleActionBean, errors);
RandomizeActionBean randomizeActionBean = (RandomizeActionBean) ruleActionBean;
// ruleSetBeanWrapper.error(createError("OCRERR_0050"));
if (randomizeActionBean.getStratificationFactors() != null) {
for (StratificationFactorBean factor : randomizeActionBean.getStratificationFactors()) {
if (factor.getStratificationFactor() != null && factor.getStratificationFactor().getValue() != null && factor.getStratificationFactor().getValue().length() != 0) {
String expressionContextName = factor.getStratificationFactor().getContextName();
Context context = expressionContextName != null ? Context.getByName(expressionContextName) : Context.OC_RULES_V1;
factor.getStratificationFactor().setContext(context);
ExpressionBean expBean = factor.getStratificationFactor();
String expValue = expBean.getValue();
String prefix = "STUDYGROUPCLASSLIST";
boolean sgcExist = false;
if (expValue.startsWith("SS.")) {
String param = expValue.split("\\.", -1)[1].trim();
if (param.startsWith(prefix)) {
String gcName = param.substring(21, param.indexOf("\"]"));
StudyGroupClassDAO studyGroupClassDAO = new StudyGroupClassDAO(ds);
ArrayList<StudyGroupClassBean> studyGroupClasses = studyGroupClassDAO.findAllByStudy(currentStudy);
for (StudyGroupClassBean studyGroupClass : studyGroupClasses) {
if (studyGroupClass.getName().equalsIgnoreCase(gcName.trim())) {
sgcExist = true;
break;
}
}
}
if (!param.equalsIgnoreCase("BIRTHDATE") && !param.equalsIgnoreCase("SEX") && !sgcExist) {
ruleSetBeanWrapper.error(createError("OCRERR_0051", expBean.getValue()));
}
} else {
isStratificationExpressionValid(expBean, ruleSetBeanWrapper);
}
}
}
}
if (errors.hasErrors())
ruleSetBeanWrapper.error("Randomize Action is not valid: " + errors.getAllErrors().get(0).getCode());
}
}
if (ruleActionBean instanceof EventActionBean) {
DataBinder dataBinder = new DataBinder(ruleActionBean);
Errors errors = dataBinder.getBindingResult();
eventActionValidator.setRuleSetBeanWrapper(ruleSetBeanWrapper);
eventActionValidator.setExpressionService(expressionService);
eventActionValidator.setRespage(respage);
eventActionValidator.validate(ruleActionBean, errors);
String currentTarget = null;
currentTarget = ruleSetBeanWrapper.getAuditableBean().getOriginalTarget().getValue();
if (currentTarget.contains(".STARTDATE") || currentTarget.contains(".STATUS")) {
if (ruleActionBean.getActionType().getCode() == 6)
//Validation , move to Validate Rule page under eventActinValidator
inValidateInfiniteLoop(ruleActionBean, ruleSetBeanWrapper, eventActionsRuleSetBean);
} else {
ruleSetBeanWrapper.error(createError("OCRERR_0044"));
}
if (errors.hasErrors()) {
ruleSetBeanWrapper.error("EventAction is not valid: " + errors.getAllErrors().get(0).getDefaultMessage());
}
}
}
use of org.akaza.openclinica.domain.rule.action.DiscrepancyNoteActionBean in project OpenClinica by OpenClinica.
the class TestRuleServlet method putDummyActionInSession.
void putDummyActionInSession() {
ArrayList<RuleActionBean> actions = new ArrayList<RuleActionBean>();
DiscrepancyNoteActionBean discNoteAction = new DiscrepancyNoteActionBean();
discNoteAction.setExpressionEvaluatesTo(true);
discNoteAction.setMessage("TEST DISCREPANCY");
actions.add(discNoteAction);
session.setAttribute("testRuleActions", actions);
}
use of org.akaza.openclinica.domain.rule.action.DiscrepancyNoteActionBean in project OpenClinica by OpenClinica.
the class RuleController method mapRulesToRulesPostImportContainer.
private RulesPostImportContainer mapRulesToRulesPostImportContainer(org.openclinica.ns.rules.v31.Rules rules) {
RulesPostImportContainer rpic = new RulesPostImportContainer();
for (RuleAssignmentType rat : rules.getRuleAssignment()) {
TargetType targetType = rat.getTarget();
ExpressionBean targetBean = new ExpressionBean(Context.OC_RULES_V1, targetType.getValue());
RunOnScheduleType scheduleType = rules.getRuleAssignment().get(0).getRunOnSchedule();
RuleSetBean ruleSetBean = new RuleSetBean();
ruleSetBean.setOriginalTarget(targetBean);
if (scheduleType != null) {
if (!scheduleType.getTime().equals("")) {
ruleSetBean.setRunTime(scheduleType.getTime());
}
}
for (RuleRefType rrt : rat.getRuleRef()) {
RuleSetRuleBean ruleSetRuleBean = new RuleSetRuleBean();
ruleSetRuleBean.setOid(rrt.getOID());
for (DiscrepancyNoteActionType discrepancyNoteActionType : rrt.getDiscrepancyNoteAction()) {
DiscrepancyNoteActionBean action = new DiscrepancyNoteActionBean();
action.setMessage(discrepancyNoteActionType.getMessage());
action.setExpressionEvaluatesTo(Boolean.valueOf(discrepancyNoteActionType.getIfExpressionEvaluates()));
action.getRuleActionRun().setInitialDataEntry(discrepancyNoteActionType.getRun().isInitialDataEntry());
action.getRuleActionRun().setDoubleDataEntry(discrepancyNoteActionType.getRun().isDoubleDataEntry());
action.getRuleActionRun().setAdministrativeDataEntry(discrepancyNoteActionType.getRun().isAdministrativeDataEntry());
action.getRuleActionRun().setImportDataEntry(discrepancyNoteActionType.getRun().isImportDataEntry());
action.getRuleActionRun().setBatch(discrepancyNoteActionType.getRun().isBatch());
ruleSetRuleBean.addAction(action);
}
for (EmailActionType emailActionType : rrt.getEmailAction()) {
EmailActionBean action = new EmailActionBean();
action.setMessage(emailActionType.getMessage());
action.setTo(emailActionType.getTo());
action.setExpressionEvaluatesTo(Boolean.valueOf(emailActionType.getIfExpressionEvaluates()));
action.getRuleActionRun().setInitialDataEntry(emailActionType.getRun().isInitialDataEntry());
action.getRuleActionRun().setDoubleDataEntry(emailActionType.getRun().isDoubleDataEntry());
action.getRuleActionRun().setAdministrativeDataEntry(emailActionType.getRun().isAdministrativeDataEntry());
action.getRuleActionRun().setImportDataEntry(emailActionType.getRun().isImportDataEntry());
action.getRuleActionRun().setBatch(emailActionType.getRun().isBatch());
ruleSetRuleBean.addAction(action);
}
for (ShowActionType showActionType : rrt.getShowAction()) {
ShowActionBean action = new ShowActionBean();
action.setMessage(showActionType.getMessage());
action.setExpressionEvaluatesTo(Boolean.valueOf(showActionType.getIfExpressionEvaluates()));
action.getRuleActionRun().setInitialDataEntry(showActionType.getRun().isInitialDataEntry());
action.getRuleActionRun().setDoubleDataEntry(showActionType.getRun().isDoubleDataEntry());
action.getRuleActionRun().setAdministrativeDataEntry(showActionType.getRun().isAdministrativeDataEntry());
action.getRuleActionRun().setImportDataEntry(showActionType.getRun().isImportDataEntry());
action.getRuleActionRun().setBatch(showActionType.getRun().isBatch());
for (PropertyType propertyType : showActionType.getDestinationProperty()) {
PropertyBean property = new PropertyBean();
property.setOid(propertyType.getOID());
action.addProperty(property);
}
ruleSetRuleBean.addAction(action);
}
for (HideActionType hideActionType : rrt.getHideAction()) {
HideActionBean action = new HideActionBean();
action.setMessage(hideActionType.getMessage());
action.setExpressionEvaluatesTo(Boolean.valueOf(hideActionType.getIfExpressionEvaluates()));
action.getRuleActionRun().setInitialDataEntry(hideActionType.getRun().isInitialDataEntry());
action.getRuleActionRun().setDoubleDataEntry(hideActionType.getRun().isDoubleDataEntry());
action.getRuleActionRun().setAdministrativeDataEntry(hideActionType.getRun().isAdministrativeDataEntry());
action.getRuleActionRun().setImportDataEntry(hideActionType.getRun().isImportDataEntry());
action.getRuleActionRun().setBatch(hideActionType.getRun().isBatch());
for (PropertyType propertyType : hideActionType.getDestinationProperty()) {
PropertyBean property = new PropertyBean();
property.setOid(propertyType.getOID());
action.addProperty(property);
}
ruleSetRuleBean.addAction(action);
}
for (InsertActionType insertActionType : rrt.getInsertAction()) {
InsertActionBean action = new InsertActionBean();
action.setExpressionEvaluatesTo(Boolean.valueOf(insertActionType.getIfExpressionEvaluates()));
action.getRuleActionRun().setInitialDataEntry(insertActionType.getRun().isInitialDataEntry());
action.getRuleActionRun().setDoubleDataEntry(insertActionType.getRun().isDoubleDataEntry());
action.getRuleActionRun().setAdministrativeDataEntry(insertActionType.getRun().isAdministrativeDataEntry());
action.getRuleActionRun().setImportDataEntry(insertActionType.getRun().isImportDataEntry());
action.getRuleActionRun().setBatch(insertActionType.getRun().isBatch());
ruleSetRuleBean.addAction(action);
for (PropertyType propertyType : insertActionType.getDestinationProperty()) {
PropertyBean property = new PropertyBean();
property.setOid(propertyType.getOID());
property.setValue(propertyType.getValue());
ExpressionBean expressionBean = new ExpressionBean(Context.OC_RULES_V1, propertyType.getValueExpression().getValue());
property.setValueExpression(expressionBean);
action.addProperty(property);
}
ruleSetRuleBean.addAction(action);
}
for (EventActionType eventActionType : rrt.getEventAction()) {
EventActionBean action = new EventActionBean();
action.setExpressionEvaluatesTo(Boolean.valueOf(eventActionType.getIfExpressionEvaluates()));
action.setOc_oid_reference(eventActionType.getOID());
action.getRuleActionRun().setNot_started(eventActionType.getRunOnStatus().isNotScheduled());
action.getRuleActionRun().setScheduled(eventActionType.getRunOnStatus().isScheduled());
action.getRuleActionRun().setData_entry_started(eventActionType.getRunOnStatus().isDataEntryStarted());
action.getRuleActionRun().setComplete(eventActionType.getRunOnStatus().isCompleted());
action.getRuleActionRun().setSkipped(eventActionType.getRunOnStatus().isSkipped());
action.getRuleActionRun().setStopped(eventActionType.getRunOnStatus().isStopped());
for (EventDestinationType eventDestinationType : eventActionType.getEventDestination()) {
EventPropertyBean property = new EventPropertyBean();
property.setProperty(eventDestinationType.getProperty());
ExpressionBean expressionBean = new ExpressionBean(Context.OC_RULES_V1, eventDestinationType.getValueExpression().getValue());
property.setValueExpression(expressionBean);
action.addProperty(property);
}
ruleSetRuleBean.addAction(action);
}
for (NotificationActionType notificationActionType : rrt.getNotificationAction()) {
NotificationActionBean action = new NotificationActionBean();
action.setExpressionEvaluatesTo(Boolean.valueOf(notificationActionType.getIfExpressionEvaluates()));
action.setTo(notificationActionType.getTo());
action.setSubject(notificationActionType.getSubject());
action.setMessage(notificationActionType.getMessage());
ruleSetRuleBean.addAction(action);
}
ruleSetBean.addRuleSetRule(ruleSetRuleBean);
}
rpic.addRuleSet(ruleSetBean);
}
for (RuleDefType rdt : rules.getRuleDef()) {
RuleBean ruleBean = new RuleBean();
ExpressionBean ruleExpressionBean = new ExpressionBean(Context.OC_RULES_V1, rdt.getExpression().getValue());
ruleBean.setExpression(ruleExpressionBean);
ruleBean.setDescription(rdt.getDescription());
ruleBean.setName(rdt.getName());
ruleBean.setOid(rdt.getOID());
rpic.addRuleDef(ruleBean);
}
return rpic;
}
use of org.akaza.openclinica.domain.rule.action.DiscrepancyNoteActionBean in project OpenClinica by OpenClinica.
the class RuleSetDaoTest method createRuleSetRule.
private RuleSetRuleBean createRuleSetRule(RuleSetBean ruleSet, RuleBean ruleBean) {
RuleSetRuleBean ruleSetRule = new RuleSetRuleBean();
DiscrepancyNoteActionBean ruleAction = new DiscrepancyNoteActionBean();
ruleAction.setMessage("HELLO WORLD");
ruleAction.setExpressionEvaluatesTo(true);
ruleSetRule.addAction(ruleAction);
ruleSetRule.setRuleSetBean(ruleSet);
ruleSetRule.setRuleBean(ruleBean);
return ruleSetRule;
}
Aggregations