Author: bayard
Date: Tue Nov 13 10:04:59 2007
New Revision: 594599

URL: http://svn.apache.org/viewvc?rev=594599&view=rev
Log:
Applying the truncateNicely patch from LANG-338 as abbreviate. I've added it to 
WordUtils rather than StringUtils; it feels like a better fit there to me

Modified:
    commons/proper/lang/trunk/src/java/org/apache/commons/lang/WordUtils.java
    
commons/proper/lang/trunk/src/test/org/apache/commons/lang/WordUtilsTest.java

Modified: 
commons/proper/lang/trunk/src/java/org/apache/commons/lang/WordUtils.java
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang/WordUtils.java?rev=594599&r1=594598&r2=594599&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/java/org/apache/commons/lang/WordUtils.java 
(original)
+++ commons/proper/lang/trunk/src/java/org/apache/commons/lang/WordUtils.java 
Tue Nov 13 10:04:59 2007
@@ -581,4 +581,59 @@
         return false;
     }
 
+    //-----------------------------------------------------------------------
+    /**
+     * Abbreviates a string nicely.
+     * 
+     * This method searches for the first space after the lower limit and 
abbreviates
+     * the String there. It will also append any String passed as a parameter
+     * to the end of the String. The upper limit can be specified to forcibly
+     * abbreviate a String.
+     * 
+     * @param str         the string to be abbreviated. If null is passed, 
null is returned.
+     *                    If the empty String is passed, the empty string is 
returned.
+     * @param lower       the lower limit.
+     * @param upper       the upper limit; specify -1 if no limit is desired.
+     *                    If the upper limit is lower than the lower limit, it 
will be
+     *                    adjusted to be the same as the lower limit.
+     * @param appendToEnd String to be appended to the end of the abbreviated 
string.
+     *                    This is appended ONLY if the string was indeed 
abbreviated.
+     *                    The append does not count towards the lower or upper 
limits.
+     * @return the abbreviated String.
+     */
+    public static String abbreviate(String str, int lower, int upper, String 
appendToEnd) {
+        // initial parameter checks
+        if (str == null) {
+            return null;
+        }
+        if (str.length() == 0) {
+            return StringUtils.EMPTY;
+        }
+
+        // if the upper value is -1 (i.e. no limit) or is greater
+        // than the length of the string, set to the length of the string
+        if (upper == -1 || upper > str.length()) {
+            upper = str.length();
+        }
+        // if upper is less than lower, raise it to lower
+        if (upper < lower) {
+            upper = lower;
+        }
+
+        StringBuffer result = new StringBuffer();
+        int index = StringUtils.indexOf(str, " ", lower);
+        if (index == -1) {
+            result.append(str.substring(0, upper));
+            // only if abbreviation has occured do we append the appendToEnd 
value
+            if (upper != str.length()) 
result.append(StringUtils.defaultString(appendToEnd));
+        } else if (index > upper) {
+            result.append(str.substring(0, upper));
+            result.append(StringUtils.defaultString(appendToEnd));
+        } else {
+            result.append(str.substring(0, index));
+            result.append(StringUtils.defaultString(appendToEnd));
+        }
+        return result.toString();
+    }
+
 }

Modified: 
commons/proper/lang/trunk/src/test/org/apache/commons/lang/WordUtilsTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/org/apache/commons/lang/WordUtilsTest.java?rev=594599&r1=594598&r2=594599&view=diff
==============================================================================
--- 
commons/proper/lang/trunk/src/test/org/apache/commons/lang/WordUtilsTest.java 
(original)
+++ 
commons/proper/lang/trunk/src/test/org/apache/commons/lang/WordUtilsTest.java 
Tue Nov 13 10:04:59 2007
@@ -362,4 +362,41 @@
         assertEquals(expect, WordUtils.swapCase(test));
     }
 
+    // -----------------------------------------------------------------------
+    public void testAbbreviate() {
+        // check null and empty are returned respectively
+        assertNull(WordUtils.abbreviate(null, 1,-1,""));
+        assertEquals(StringUtils.EMPTY, WordUtils.abbreviate("", 1,-1,""));
+
+        // test upper limit
+        assertEquals("01234", WordUtils.abbreviate("0123456789", 0,5,""));
+        assertEquals("01234", WordUtils.abbreviate("0123456789", 5, 2,""));
+        assertEquals("012", WordUtils.abbreviate("012 3456789", 2, 5,""));
+        assertEquals("012 3", WordUtils.abbreviate("012 3456789", 5, 2,""));
+        assertEquals("0123456789", WordUtils.abbreviate("0123456789", 
0,-1,""));
+
+        // test upper limit + append string
+        assertEquals("01234-", WordUtils.abbreviate("0123456789", 0,5,"-"));
+        assertEquals("01234-", WordUtils.abbreviate("0123456789", 5, 2,"-"));
+        assertEquals("012", WordUtils.abbreviate("012 3456789", 2, 5, null));
+        assertEquals("012 3", WordUtils.abbreviate("012 3456789", 5, 2,""));
+        assertEquals("0123456789", WordUtils.abbreviate("0123456789", 
0,-1,""));
+
+        // test lower value
+        assertEquals("012", WordUtils.abbreviate("012 3456789", 0,5, null));
+        assertEquals("01234", WordUtils.abbreviate("01234 56789", 5, 10, 
null));
+        assertEquals("01 23 45 67", WordUtils.abbreviate("01 23 45 67 89", 9, 
-1, null));
+        assertEquals("01 23 45 6", WordUtils.abbreviate("01 23 45 67 89", 9, 
10, null));
+
+        // test lower value + append
+        assertEquals("012", WordUtils.abbreviate("012 3456789", 0,5, null));
+        assertEquals("01234-", WordUtils.abbreviate("01234 56789", 5, 10, 
"-"));
+        assertEquals("01 23 45 67abc", WordUtils.abbreviate("01 23 45 67 89", 
9, -1, "abc"));
+        assertEquals("01 23 45 6", WordUtils.abbreviate("01 23 45 67 89", 9, 
10, ""));
+
+        // others
+        assertEquals("", WordUtils.abbreviate("0123456790", 0,0,""));
+        assertEquals("", WordUtils.abbreviate(" 0123456790", 0,-1,""));
+    }
+
 }


Reply via email to