1 24 package org.ofbiz.minilang.method.conditional; 25 26 import java.util.LinkedList ; 27 import java.util.List ; 28 import java.util.Map ; 29 30 import org.apache.oro.text.regex.MalformedPatternException; 31 import org.apache.oro.text.regex.Pattern; 32 import org.apache.oro.text.regex.PatternCompiler; 33 import org.apache.oro.text.regex.PatternMatcher; 34 import org.apache.oro.text.regex.Perl5Compiler; 35 import org.apache.oro.text.regex.Perl5Matcher; 36 import org.ofbiz.base.util.Debug; 37 import org.ofbiz.base.util.GeneralException; 38 import org.ofbiz.base.util.ObjectType; 39 import org.ofbiz.base.util.string.FlexibleStringExpander; 40 import org.ofbiz.minilang.SimpleMethod; 41 import org.ofbiz.minilang.method.ContextAccessor; 42 import org.ofbiz.minilang.method.MethodContext; 43 import org.w3c.dom.Element ; 44 45 52 public class RegexpCondition implements Conditional { 53 54 public static final String module = RegexpCondition.class.getName(); 55 56 SimpleMethod simpleMethod; 57 58 static PatternMatcher matcher = new Perl5Matcher(); 59 static PatternCompiler compiler = new Perl5Compiler(); 60 61 List subOps = new LinkedList (); 62 List elseSubOps = null; 63 64 ContextAccessor mapAcsr; 65 ContextAccessor fieldAcsr; 66 67 FlexibleStringExpander exprExdr; 68 69 public RegexpCondition(Element element, SimpleMethod simpleMethod) { 70 this.simpleMethod = simpleMethod; 71 72 this.mapAcsr = new ContextAccessor(element.getAttribute("map-name")); 73 this.fieldAcsr = new ContextAccessor(element.getAttribute("field-name")); 74 75 this.exprExdr = new FlexibleStringExpander(element.getAttribute("expr")); 76 } 77 78 public boolean checkCondition(MethodContext methodContext) { 79 String fieldString = getFieldString(methodContext); 80 81 Pattern pattern = null; 82 try { 83 pattern = compiler.compile(methodContext.expandString(this.exprExdr)); 84 } catch (MalformedPatternException e) { 85 Debug.logError(e, "Regular Expression [" + this.exprExdr + "] is mal-formed: " + e.toString(), module); 86 } 87 88 if (matcher.matches(fieldString, pattern)) { 89 return true; 91 } else { 92 return false; 94 } 95 } 96 97 protected String getFieldString(MethodContext methodContext) { 98 String fieldString = null; 99 Object fieldVal = null; 100 101 if (!mapAcsr.isEmpty()) { 102 Map fromMap = (Map ) mapAcsr.get(methodContext); 103 if (fromMap == null) { 104 if (Debug.infoOn()) Debug.logInfo("Map not found with name " + mapAcsr + ", using empty string for comparison", module); 105 } else { 106 fieldVal = fieldAcsr.get(fromMap, methodContext); 107 } 108 } else { 109 fieldVal = fieldAcsr.get(methodContext); 111 } 112 113 if (fieldVal != null) { 114 try { 115 fieldString = (String ) ObjectType.simpleTypeConvert(fieldVal, "String", null, null); 116 } catch (GeneralException e) { 117 Debug.logError(e, "Could not convert object to String, using empty String", module); 118 } 119 } 120 if (fieldString == null) fieldString = ""; 122 123 return fieldString; 124 } 125 126 public void prettyPrint(StringBuffer messageBuffer, MethodContext methodContext) { 127 messageBuffer.append("regexp["); 128 messageBuffer.append("["); 129 if (!this.mapAcsr.isEmpty()) { 130 messageBuffer.append(this.mapAcsr); 131 messageBuffer.append("."); 132 } 133 messageBuffer.append(this.fieldAcsr); 134 messageBuffer.append("="); 135 messageBuffer.append(getFieldString(methodContext)); 136 messageBuffer.append("] matches "); 137 messageBuffer.append(methodContext.expandString(this.exprExdr)); 138 messageBuffer.append("]"); 139 } 140 } 141 | Popular Tags |