Author: adrianc
Date: Mon Jun 8 16:12:30 2015 New Revision: 1684216 URL: http://svn.apache.org/r1684216 Log: Fix a thread-safety issue. Trivial unit test changes. Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java?rev=1684216&r1=1684215&r2=1684216&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java Mon Jun 8 16:12:30 2015 @@ -22,6 +22,7 @@ import java.io.UnsupportedEncodingExcept import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -45,17 +46,17 @@ public class StringUtil { public static final StringUtil INSTANCE = new StringUtil(); public static final String module = StringUtil.class.getName(); - // FIXME: Not thread safe - protected static final Map<String, Pattern> substitutionPatternMap; + private static final Map<String, Pattern> substitutionPatternMap = createSubstitutionPatternMap(); - static { - substitutionPatternMap = new LinkedHashMap<String, Pattern>(); + private static Map<String, Pattern> createSubstitutionPatternMap() { + Map<String, Pattern> substitutionPatternMap = new LinkedHashMap<String, Pattern>(); // Preserve insertion order substitutionPatternMap.put("&&", Pattern.compile("@and", Pattern.LITERAL)); substitutionPatternMap.put("||", Pattern.compile("@or", Pattern.LITERAL)); substitutionPatternMap.put("<=", Pattern.compile("@lteq", Pattern.LITERAL)); substitutionPatternMap.put(">=", Pattern.compile("@gteq", Pattern.LITERAL)); substitutionPatternMap.put("<", Pattern.compile("@lt", Pattern.LITERAL)); substitutionPatternMap.put(">", Pattern.compile("@gt", Pattern.LITERAL)); + return Collections.unmodifiableMap(substitutionPatternMap); } private StringUtil() { @@ -523,7 +524,7 @@ public class StringUtil { */ public static String convertOperatorSubstitutions(String expression) { String result = expression; - if (result != null && (result.contains("@") || result.contains("'"))) { + if (result != null && (result.contains("@"))) { for (Map.Entry<String, Pattern> entry: substitutionPatternMap.entrySet()) { Pattern pattern = entry.getValue(); result = pattern.matcher(result).replaceAll(entry.getKey()); Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java?rev=1684216&r1=1684215&r2=1684216&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java Mon Jun 8 16:12:30 2015 @@ -263,9 +263,9 @@ public class StringUtilTests extends Gen } public void testConvertOperatorSubstitutions() { - assertNull("null pass-thrue", StringUtil.convertOperatorSubstitutions(null)); + assertNull("null pass-thru", StringUtil.convertOperatorSubstitutions(null)); assertEquals("none", "abc", StringUtil.convertOperatorSubstitutions("abc")); - assertEquals("noe", "a'c", StringUtil.convertOperatorSubstitutions("a'c")); + assertEquals("none", "a'c", StringUtil.convertOperatorSubstitutions("a'c")); assertEquals("all converions", "one && two || three > four >= five < six <= seven", StringUtil.convertOperatorSubstitutions("one @and two @or three @gt four @gteq five @lt six @lteq seven")); } |
Free forum by Nabble | Edit this page |