/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.arden; import java.io.Writer; import java.util.ArrayList; /** * This class translates the CALL function of an MLM into a logicService.eval() of a rule */ public class Call { private String callVar = null; private String callMethod = null; private ArrayList<String> parameters = null; public Call(String callVar, String callMethod) { this.callVar = callVar; this.callMethod = callMethod; this.parameters = new ArrayList<String>(); } public String getCallVar() { return callVar; } public void setCallVar(String callVar) { this.callVar = callVar; } public String getCallMethod() { return callMethod; } public void setCallMethod(String callMethod) { this.callMethod = callMethod; } public void write(Writer w) { try { for (int i = 0; i < parameters.size(); i++) { String currParam = parameters.get(i); w.append("\t\t\t\tvarLen = " + "\"" + currParam + "\"" + ".length();\n"); w.append("\t\t\t\tvalue=userVarMap.get(" + "\"" + currParam + "\"" + ");\n"); w.append("\t\t\t\tif(value != null){\n"); w.append("\t\t\t\t\tparameters.put(\"param" + (i + 1) + "\"," + "value);\n"); w.append("\t\t\t\t}\n"); w.append("\t\t\t\t// It must be a result value or date\n"); w.append("\t\t\t\telse if(" + "\"" + currParam + "\"" + ".endsWith(\"_value\"))\n"); w.append("\t\t\t\t{\n"); w.append("\t\t\t\t\tvariable = " + "\"" + currParam + "\"" + ".substring(0, varLen-6); // -6 for _value\n"); w.append("\t\t\t\t\tif (resultLookup.get(variable) != null){\n"); w.append("\t\t\t\t\t\tvalue = resultLookup.get(variable).toString();\n"); w.append("\t\t\t\t\t}\n"); w.append("\t\t\t\t}\n"); w.append("\t\t\t\telse if(" + "\"" + currParam + "\"" + ".endsWith(\"_date\"))\n"); w.append("\t\t\t\t{\n"); w.append("\t\t\t\t\tvariable = " + "\"" + currParam + "\"" + ".substring(0, varLen-5); // -5 for _date\n"); w.append("\t\t\t\t\tif (resultLookup.get(variable) != null){\n"); w.append("\t\t\t\t\t\tvalue = resultLookup.get(variable).getResultDate().toString();\n"); w.append("\t\t\t\t\t}\n"); w.append("\t\t\t\t}\n"); w.append("\t\t\t\telse\n"); w.append("\t\t\t\t{\n"); w.append("\t\t\t\t\tif (resultLookup.get(" + "\"" + currParam + "\"" + ") != null){\n"); w.append("\t\t\t\t\t\tvalue = resultLookup.get(" + "\"" + currParam + "\"" + ").toString();\n"); w.append("\t\t\t\t\t}\n"); w.append("\t\t\t\t}\n"); w.append("\t\t\t\tif(value != null){\n"); w.append("\t\t\t\t\tparameters.put(\"param" + (i + 1) + "\"," + "value);\n"); w.append("\t\t\t\t}\n"); w.append("\t\t\t\telse\n"); w.append("\t\t\t\t{\n"); w.append("\t\t\t\t\tparameters.put(\"param" + (i + 1) + "\",\"" + currParam + "\");\n"); w.append("\t\t\t\t}\n"); } w.append("\t\t\t\t"); if (getCallVar() != null && getCallVar().length() > 0) { w.append("Result " + getCallVar() + " = "); } w.append("logicService.eval(patient, \"" + getCallMethod() + "\",parameters);\n"); w.append("\t\t\t\t"); if (getCallVar() != null && getCallVar().length() > 0) { w.append("resultLookup.put(\"" + getCallVar() + "\"," + getCallVar() + ");\n"); } } catch (Exception e) {} } public void addParameter(String parameter) { this.parameters.add(parameter); } }