1 24 package org.ofbiz.minilang.method.conditional; 25 26 import java.util.*; 27 import org.w3c.dom.*; 28 import org.ofbiz.base.util.*; 29 import org.ofbiz.minilang.*; 30 import org.ofbiz.minilang.method.*; 31 import org.ofbiz.minilang.operation.*; 32 33 40 public class CompareFieldCondition implements Conditional { 41 42 public static final String module = CompareFieldCondition.class.getName(); 43 44 SimpleMethod simpleMethod; 45 46 ContextAccessor mapAcsr; 47 ContextAccessor fieldAcsr; 48 ContextAccessor toMapAcsr; 49 ContextAccessor toFieldAcsr; 50 51 String operator; 52 String type; 53 String format; 54 55 public CompareFieldCondition(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 61 this.toMapAcsr = new ContextAccessor(element.getAttribute("to-map-name")); 62 this.toFieldAcsr = new ContextAccessor(element.getAttribute("to-field-name"), this.fieldAcsr.toString()); 64 65 69 this.operator = element.getAttribute("operator"); 70 this.type = element.getAttribute("type"); 71 this.format = element.getAttribute("format"); 72 } 73 74 public boolean checkCondition(MethodContext methodContext) { 75 String operator = methodContext.expandString(this.operator); 76 String type = methodContext.expandString(this.type); 77 String format = methodContext.expandString(this.format); 78 79 Object fieldVal1 = getFieldVal1(methodContext); 80 Object fieldVal2 = getFieldVal2(methodContext); 81 82 List messages = new LinkedList(); 83 Boolean resultBool = BaseCompare.doRealCompare(fieldVal1, fieldVal2, operator, type, format, messages, null, methodContext.getLoader()); 84 85 if (messages.size() > 0) { 86 messages.add(0, "Error with comparison in if-compare-field between fields [" + mapAcsr.toString() + "." + fieldAcsr.toString() + "] with value [" + fieldVal1 + "] and [" + toMapAcsr.toString() + "." + toFieldAcsr.toString() + "] with value [" + fieldVal2 + "] with operator [" + operator + "] and type [" + type + "]: "); 87 if (methodContext.getMethodType() == MethodContext.EVENT) { 88 StringBuffer fullString = new StringBuffer (); 89 90 Iterator miter = messages.iterator(); 91 while (miter.hasNext()) { 92 fullString.append((String ) miter.next()); 93 } 94 Debug.logWarning(fullString.toString(), module); 95 96 methodContext.putEnv(simpleMethod.getEventErrorMessageName(), fullString.toString()); 97 methodContext.putEnv(simpleMethod.getEventResponseCodeName(), simpleMethod.getDefaultErrorCode()); 98 } else if (methodContext.getMethodType() == MethodContext.SERVICE) { 99 methodContext.putEnv(simpleMethod.getServiceErrorMessageListName(), messages); 100 methodContext.putEnv(simpleMethod.getServiceResponseMessageName(), simpleMethod.getDefaultErrorCode()); 101 } 102 return false; 103 } 104 105 if (resultBool != null) return resultBool.booleanValue(); 106 107 return false; 108 } 109 110 protected Object getFieldVal1(MethodContext methodContext) { 111 Object fieldVal1 = null; 112 if (!mapAcsr.isEmpty()) { 113 Map fromMap = (Map) mapAcsr.get(methodContext); 114 if (fromMap == null) { 115 if (Debug.infoOn()) Debug.logInfo("Map not found with name " + mapAcsr + ", using null for comparison", module); 116 } else { 117 fieldVal1 = fieldAcsr.get(fromMap, methodContext); 118 } 119 } else { 120 fieldVal1 = fieldAcsr.get(methodContext); 122 } 123 return fieldVal1; 124 } 125 126 protected Object getFieldVal2(MethodContext methodContext) { 127 Object fieldVal2 = null; 128 if (!toMapAcsr.isEmpty()) { 129 Map toMap = (Map) toMapAcsr.get(methodContext); 130 if (toMap == null) { 131 if (Debug.infoOn()) Debug.logInfo("To Map not found with name " + toMapAcsr + ", using null for comparison", module); 132 } else { 133 fieldVal2 = toFieldAcsr.get(toMap, methodContext); 134 } 135 } else { 136 fieldVal2 = toFieldAcsr.get(methodContext); 138 } 139 return fieldVal2; 140 } 141 142 public void prettyPrint(StringBuffer messageBuffer, MethodContext methodContext) { 143 String operator = methodContext.expandString(this.operator); 144 String type = methodContext.expandString(this.type); 145 String format = methodContext.expandString(this.format); 146 147 Object fieldVal1 = getFieldVal1(methodContext); 148 Object fieldVal2 = getFieldVal2(methodContext); 149 150 messageBuffer.append("["); 151 if (!this.mapAcsr.isEmpty()) { 152 messageBuffer.append(this.mapAcsr); 153 messageBuffer.append("."); 154 } 155 messageBuffer.append(this.fieldAcsr); 156 messageBuffer.append("="); 157 messageBuffer.append(fieldVal1); 158 messageBuffer.append("] "); 159 160 messageBuffer.append(operator); 161 162 messageBuffer.append(" ["); 163 if (!this.toMapAcsr.isEmpty()) { 164 messageBuffer.append(this.toMapAcsr); 165 messageBuffer.append("."); 166 } 167 messageBuffer.append(this.toFieldAcsr); 168 messageBuffer.append("="); 169 messageBuffer.append(fieldVal2); 170 messageBuffer.append("] "); 171 172 messageBuffer.append(" as "); 173 messageBuffer.append(type); 174 if (UtilValidate.isNotEmpty(format)) { 175 messageBuffer.append(":"); 176 messageBuffer.append(format); 177 } 178 } 179 } 180 | Popular Tags |