1 24 package org.ofbiz.minilang.method.conditional; 25 26 import java.util.*; 27 28 import org.w3c.dom.*; 29 import org.ofbiz.base.util.*; 30 import org.ofbiz.minilang.*; 31 import org.ofbiz.minilang.method.*; 32 import org.ofbiz.minilang.operation.*; 33 34 41 public class CompareCondition implements Conditional { 42 43 public static final String module = CompareCondition.class.getName(); 44 45 SimpleMethod simpleMethod; 46 47 ContextAccessor mapAcsr; 48 ContextAccessor fieldAcsr; 49 String value; 50 51 String operator; 52 String type; 53 String format; 54 55 public CompareCondition(Element element, SimpleMethod simpleMethod) { 56 this.simpleMethod = simpleMethod; 57 58 this.mapAcsr = new ContextAccessor(element.getAttribute("map-name")); 59 this.fieldAcsr = new ContextAccessor(element.getAttribute("field-name")); 60 this.value = element.getAttribute("value"); 61 62 this.operator = element.getAttribute("operator"); 63 this.type = element.getAttribute("type"); 64 this.format = element.getAttribute("format"); 65 } 66 67 public boolean checkCondition(MethodContext methodContext) { 68 String value = methodContext.expandString(this.value); 69 String operator = methodContext.expandString(this.operator); 70 String type = methodContext.expandString(this.type); 71 String format = methodContext.expandString(this.format); 72 73 Object fieldVal = getFieldVal(methodContext); 74 75 List messages = new LinkedList(); 76 Boolean resultBool = BaseCompare.doRealCompare(fieldVal, value, operator, type, format, messages, null, methodContext.getLoader()); 77 if (messages.size() > 0) { 78 messages.add(0, "Error with comparison in if-compare between field [" + mapAcsr.toString() + "." + fieldAcsr.toString() + "] with value [" + fieldVal + "] and value [" + value + "] with operator [" + operator + "] and type [" + type + "]: "); 79 if (methodContext.getMethodType() == MethodContext.EVENT) { 80 StringBuffer fullString = new StringBuffer (); 81 82 Iterator miter = messages.iterator(); 83 while (miter.hasNext()) { 84 fullString.append((String ) miter.next()); 85 } 86 Debug.logWarning(fullString.toString(), module); 87 88 methodContext.putEnv(simpleMethod.getEventErrorMessageName(), fullString.toString()); 89 methodContext.putEnv(simpleMethod.getEventResponseCodeName(), simpleMethod.getDefaultErrorCode()); 90 } else if (methodContext.getMethodType() == MethodContext.SERVICE) { 91 methodContext.putEnv(simpleMethod.getServiceErrorMessageListName(), messages); 92 methodContext.putEnv(simpleMethod.getServiceResponseMessageName(), simpleMethod.getDefaultErrorCode()); 93 } 94 return false; 95 } 96 97 if (resultBool != null) return resultBool.booleanValue(); 98 99 return false; 100 } 101 102 protected Object getFieldVal(MethodContext methodContext) { 103 Object fieldVal = null; 104 if (!mapAcsr.isEmpty()) { 105 Map fromMap = (Map) mapAcsr.get(methodContext); 106 if (fromMap == null) { 107 if (Debug.infoOn()) Debug.logInfo("Map not found with name " + mapAcsr + ", using empty string for comparison", module); 108 } else { 109 fieldVal = fieldAcsr.get(fromMap, methodContext); 110 } 111 } else { 112 fieldVal = fieldAcsr.get(methodContext); 114 } 115 116 if (fieldVal == null) { 118 fieldVal = ""; 119 } 120 return fieldVal; 121 } 122 123 public void prettyPrint(StringBuffer messageBuffer, MethodContext methodContext) { 124 String value = methodContext.expandString(this.value); 125 String operator = methodContext.expandString(this.operator); 126 String type = methodContext.expandString(this.type); 127 String format = methodContext.expandString(this.format); 128 Object fieldVal = getFieldVal(methodContext); 129 130 messageBuffer.append("["); 131 if (!this.mapAcsr.isEmpty()) { 132 messageBuffer.append(this.mapAcsr); 133 messageBuffer.append("."); 134 } 135 messageBuffer.append(this.fieldAcsr); 136 messageBuffer.append("="); 137 messageBuffer.append(fieldVal); 138 messageBuffer.append("] "); 139 140 messageBuffer.append(operator); 141 142 messageBuffer.append(" "); 143 messageBuffer.append(value); 144 messageBuffer.append(" as "); 145 messageBuffer.append(type); 146 if (UtilValidate.isNotEmpty(format)) { 147 messageBuffer.append(":"); 148 messageBuffer.append(format); 149 } 150 } 151 } 152 | Popular Tags |