Index: src/api/org/openmrs/arden/LogicAssignment.java =================================================================== --- src/api/org/openmrs/arden/LogicAssignment.java (revision 23870) +++ src/api/org/openmrs/arden/LogicAssignment.java (working copy) @@ -50,7 +50,7 @@ String value = getVariableValue(); try { w.append("\t\t\t//preprocess any || operator ;\n"); - w.append("\t\t\tString val = doAction(\"" + value + "\");\n"); + w.append("\t\t\tString val = doAction(\"" + value + "\", userVarMap, resultLookup);\n"); // w.append("\t\t\tuserVarMap.put(\"" + name + "\", \"" + value + "\");\n"); w.append("\t\t\tuserVarMap.put(\"" + name + "\", val);\n"); } Index: src/api/org/openmrs/arden/MLMObject.java =================================================================== --- src/api/org/openmrs/arden/MLMObject.java (revision 23870) +++ src/api/org/openmrs/arden/MLMObject.java (working copy) @@ -161,8 +161,8 @@ public void WriteAction(Writer w) throws Exception { try { - w.append("\tpublic void initAction() {\n"); - w.append("\t\tthis.actions = new ArrayList();\n"); + w.append("\tpublic ArrayList initAction() {\n"); + w.append("\t\tArrayList actions = new ArrayList();\n"); int pos = 1; for (Action action : this.actions) { @@ -174,10 +174,11 @@ pos++; } + w.append("\n\n\t\treturn actions;\n"); w.append("\t}\n\n"); // End of this function w.flush(); - w.append("private String substituteString(String variable,String outStr){\n"); + w.append("private String substituteString(String variable,String outStr, HashMap userVarMap, HashMap resultLookup){\n"); w.append("//see if the variable is in the user map\n"); w.append("String value = userVarMap.get(variable);\n"); w.append("if (value != null)\n"); @@ -215,7 +216,7 @@ w.append("return outStr;\n"); w.append("}\n"); - w.append("public String doAction(String inStr)\n"); + w.append("public String doAction(String inStr, HashMap userVarMap, HashMap resultLookup)\n"); w.append("{\n"); w.append("int startindex = -1;\n"); w.append("int endindex = -1;\n"); @@ -230,7 +231,7 @@ w.append("}else if(endindex == -1){\n"); w.append("endindex = index-1;\n"); w.append("String variable = inStr.substring(startindex, endindex).trim();\n"); - w.append("outStr = substituteString(variable,outStr);\n"); + w.append("outStr = substituteString(variable,outStr,userVarMap,resultLookup);\n"); w.append("startindex = -1;\n"); w.append("endindex = -1;\n"); @@ -270,13 +271,13 @@ w.append("\t\tString actionStr = \"\";\n"); w.append("\t\tPatientService patientService = Context.getPatientService();\n"); w.append("\t\tPatient patient = patientService.getPatient(patientId);\n"); - w.append("\t\tresultLookup = new HashMap ();\n"); + w.append("\t\tHashMap resultLookup = new HashMap ();\n"); w.append("\t\tBoolean ageOK = null;\n\t\ttry {\n"); w.append("\t\t\tRuleProvider ruleProvider = (RuleProvider)parameters.get(\"ruleProvider\");\n"); - w.append("\t\t\tthis.patient=patient;\n"); - w.append("\t\t\tuserVarMap = new HashMap ();\n"); - w.append("\t\t\tfirstname = patient.getPersonName().getGivenName();\n"); + + w.append("\t\t\tHashMap userVarMap = new HashMap ();\n"); + w.append("\t\t\tString firstname = patient.getPersonName().getGivenName();\n"); w.append("\t\t\tuserVarMap.put(\"firstname\", toProperCase(firstname));\n"); w.append("\t\t\tString lastName = patient.getFamilyName();\n"); w.append("\t\t\tuserVarMap.put(\"lastName\", lastName);\n"); @@ -290,7 +291,7 @@ w.append("\t\t\t\tuserVarMap.put(\"hisher\",\"her\");\n"); w.append("\t\t\t}\n"); - w.append("\t\t\tinitAction();\n"); + w.append("\t\t\tArrayList actions = initAction();\n"); /*************************************************************************************** * Do the LogicCriteria here */ @@ -316,7 +317,7 @@ /** ******************************************************************************************** */ - w.append("\n\n\t\t\tif(evaluate_logic(parameters, context, ruleProvider)){\n"); + w.append("\n\n\t\t\tif(evaluate_logic(parameters, context, ruleProvider, patient, userVarMap, resultLookup)){\n"); w.append("\t\t\t\tResult ruleResult = new Result();\n"); /******************* @@ -380,7 +381,7 @@ **************/ w.append("\t\t\t\tfor(String currAction:actions){\n"); - w.append("\t\t\t\t\tcurrAction = doAction(currAction);\n"); + w.append("\t\t\t\t\tcurrAction = doAction(currAction, userVarMap, resultLookup);\n"); w.append("\t\t\t\t\truleResult.add(new Result(currAction));\n"); w.append("\t\t\t\t}\n"); @@ -408,7 +409,7 @@ } /** *************************************************************************************************************************** */ - w.append("\tprivate boolean evaluate_logic(Map parameters, LogicContext context, RuleProvider ruleProvider) throws LogicException {\n\n"); + w.append("\tprivate boolean evaluate_logic(Map parameters, LogicContext context, RuleProvider ruleProvider, Patient patient, HashMap userVarMap, HashMap resultLookup) throws LogicException {\n\n"); evalListBySection = evaluateList.get("logic"); if (evalListBySection == null) { evalListBySection = new LinkedList(); Index: src/api/org/openmrs/arden/impl/ArdenServiceImpl.java =================================================================== --- src/api/org/openmrs/arden/impl/ArdenServiceImpl.java (revision 23870) +++ src/api/org/openmrs/arden/impl/ArdenServiceImpl.java (working copy) @@ -177,10 +177,6 @@ String classname = ardObj.getClassName(); w.write("public class " + classname + " implements Rule, DssRule{\n\n"); // Start of class - w.write("\tprivate Patient patient;\n\tprivate String firstname;\n"); - w.write("\tprivate ArrayList actions;\n"); - w.write("\tprivate HashMap userVarMap;\n\n"); - w.write("\tprivate HashMap resultLookup;\n\n"); w.write("\tprivate Log log = LogFactory.getLog(this.getClass());\n\n"); @@ -434,7 +430,15 @@ w.write("if(key == null){\n"); w.write("return false;\n"); w.write("}\n"); - w.write("String keyString = key.toString();\n"); + w.write("String keyString = \"\";\n"); + w.write("if(key.getDatatype() == Result.Datatype.CODED) {\n"); + w.write("\tConcept keyConcept = key.toConcept();\n"); + w.write("\tif(keyConcept != null) {\n"); + w.write("\t\tkeyString = ((ConceptName) keyConcept.getNames().toArray()[0]).getName();\n"); + w.write("\t}\n"); + w.write("} else {\n"); + w.write("\tkeyString = key.toString();\n"); + w.write("}\n"); w.write("for(Result element:lst){\n"); w.write("Concept concept = element.toConcept();\n"); w.write("if(concept == null){\n");