You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2015/06/08 18:12:31 UTC

svn commit: r1684216 - in /ofbiz/trunk/framework/base/src/org/ofbiz/base/util: StringUtil.java test/StringUtilTests.java

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"));
     }