/*
* 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.domain.rule.expression;
import org.akaza.openclinica.exception.OpenClinicaSystemException;
import org.akaza.openclinica.logic.expressionTree.ExpressionNode;
import org.akaza.openclinica.logic.expressionTree.OpenClinicaExpressionParser;
import org.akaza.openclinica.service.rule.expression.ExpressionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.ResourceBundle;
import java.util.regex.Pattern;
import javax.sql.DataSource;
/**
* @author Krikor Krumlian
*
*/
public class OpenClinicaV1ExpressionProcessor implements ExpressionProcessor {
protected final Logger logger = LoggerFactory.getLogger(getClass().getName());
ExpressionBean e;
Pattern[] pattern;
ExpressionNode node;
OpenClinicaExpressionParser oep;
DataSource ds;
ExpressionService expressionService;
ExpressionObjectWrapper expressionWrapper;
ResourceBundle respage;
public OpenClinicaV1ExpressionProcessor(ExpressionObjectWrapper expressionWrapper) {
this.expressionWrapper = expressionWrapper;
this.e = expressionWrapper.getExpressionBean();
}
public String isRuleAssignmentExpressionValid() {
try {
oep = new OpenClinicaExpressionParser(expressionWrapper);
oep.parseAndTestEvaluateExpression(e.getValue());
expressionService = new ExpressionService(expressionWrapper);
if (expressionService.ruleSetExpressionChecker(e.getValue())) {
return null;
} else {
MessageFormat mf = new MessageFormat("");
String errorCode = "OCRERR_0024";
mf.applyPattern(respage.getString(errorCode));
Object[] arguments = {};
return errorCode + " : " + mf.format(arguments);
}
} catch (OpenClinicaSystemException e) {
MessageFormat mf = new MessageFormat("");
mf.applyPattern(respage.getString(e.getErrorCode()));
Object[] arguments = e.getErrorParams();
return e.getErrorCode() + " : " + mf.format(arguments);
}
}
public String isRuleExpressionValid() {
try {
oep = new OpenClinicaExpressionParser(expressionWrapper);
String result = oep.parseAndTestEvaluateExpression(e.getValue());
logger.debug("Test Result : " + result);
return null;
} catch (OpenClinicaSystemException e) {
MessageFormat mf = new MessageFormat("");
mf.applyPattern(respage.getString(e.getErrorCode()));
Object[] arguments = e.getErrorParams();
return e.getErrorCode() + " : " + mf.format(arguments);
}
}
public String testEvaluateExpression() {
try {
oep = new OpenClinicaExpressionParser(expressionWrapper);
String result = oep.parseAndTestEvaluateExpression(e.getValue());
logger.debug("Test Result : " + result);
return result;
} catch (OpenClinicaSystemException e) {
MessageFormat mf = new MessageFormat("");
mf.applyPattern(respage.getString(e.getErrorCode()));
Object[] arguments = e.getErrorParams();
return "Fail - " + e.getErrorCode() + " : " + mf.format(arguments);
}
}
public HashMap<String, String> testEvaluateExpression(HashMap<String, String> testValues) {
try {
oep = new OpenClinicaExpressionParser(expressionWrapper);
HashMap<String, String> resultAndTestValues = oep.parseAndTestEvaluateExpression(e.getValue(), testValues);
String returnedResult = resultAndTestValues.get("result");
logger.debug("Test Result : " + returnedResult);
resultAndTestValues.put("ruleValidation", "rule_valid");
resultAndTestValues.put("ruleEvaluatesTo", returnedResult);
return resultAndTestValues;
} catch (OpenClinicaSystemException e) {
MessageFormat mf = new MessageFormat("");
mf.applyPattern(respage.getString(e.getErrorCode()));
Object[] arguments = e.getErrorParams();
testValues.put("ruleValidation", "rule_invalid");
testValues.put("ruleValidationFailMessage", e.getErrorCode() + " : " + mf.format(arguments));
testValues.put("ruleEvaluatesTo", "");
return testValues;
}
}
public boolean process() {
return false;
}
public void setExpression(ExpressionBean e) {
this.e = e;
}
public void setRespage(ResourceBundle respage) {
this.respage = respage;
}
}