Author: bayard
Date: Sun Oct 18 20:14:30 2009
New Revision: 826514

URL: http://svn.apache.org/viewvc?rev=826514&view=rev
Log:
Sebb pointed out that the implementation for LANG-507 was not thread safe. 
Rewriting to pass parameters in to the constructor, but doing so in an 
experimental way - comments very much desired on whether this makes for a nice 
API or not

Modified:
    
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/translate/UnicodeUnescaper.java
    
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/translate/UnicodeUnescaperTest.java

Modified: 
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/translate/UnicodeUnescaper.java
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/translate/UnicodeUnescaper.java?rev=826514&r1=826513&r2=826514&view=diff
==============================================================================
--- 
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/translate/UnicodeUnescaper.java
 (original)
+++ 
commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/translate/UnicodeUnescaper.java
 Sun Oct 18 20:14:30 2009
@@ -19,6 +19,9 @@
 import java.io.IOException;
 import java.io.Writer;
 
+import java.util.EnumSet;
+import java.util.Arrays;
+
 /**
  * Translates escaped unicode values of the form \\u+\d\d\d\d back to 
  * unicode.
@@ -26,13 +29,18 @@
  */
 public class UnicodeUnescaper extends CharSequenceTranslator {
 
-    private boolean escapingPlus = false;
+    public static enum PARAM { escapePlus };
+
+    private EnumSet<PARAM> params;
 
-    public void setEscapingPlus(boolean b) {
-        this.escapingPlus = b;
+    public UnicodeUnescaper(PARAM... params) {
+        if(params.length > 0) {
+            this.params = EnumSet.copyOf(Arrays.asList(params));
+        }
     }
-    public boolean isEscapingPlus() {
-        return this.escapingPlus;
+
+    public boolean isSet(PARAM p) { 
+        return (params == null) ? false : params.contains(p);
     }
 
     /**
@@ -50,7 +58,7 @@
                 }
 
                 // consume + symbol in \\u+0045
-                if(isEscapingPlus()) {
+                if(isSet(PARAM.escapePlus)) {
                     if( (index + i < input.length()) && (input.charAt(index + 
i) == '+') ) {
                         i++;
                     }

Modified: 
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/translate/UnicodeUnescaperTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/translate/UnicodeUnescaperTest.java?rev=826514&r1=826513&r2=826514&view=diff
==============================================================================
--- 
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/translate/UnicodeUnescaperTest.java
 (original)
+++ 
commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/translate/UnicodeUnescaperTest.java
 Sun Oct 18 20:14:30 2009
@@ -36,7 +36,7 @@
             // expected
         }
 
-        uu.setEscapingPlus(true);
+        uu = new UnicodeUnescaper(UnicodeUnescaper.PARAM.escapePlus);
         assertEquals("Failed to unescape unicode characters with 'u+' 
notation", "G", uu.translate(input));
     }
 


Reply via email to