You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2005/08/09 00:45:13 UTC

svn commit: r230918 - in /jakarta/commons/proper/lang/trunk/src: java/org/apache/commons/lang/text/StrBuilder.java test/org/apache/commons/lang/text/StrBuilderTest.java

Author: scolebourne
Date: Mon Aug  8 15:44:59 2005
New Revision: 230918

URL: http://svn.apache.org/viewcvs?rev=230918&view=rev
Log:
Add asWriter()

Modified:
    jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrBuilder.java
    jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrBuilderTest.java

Modified: jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrBuilder.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrBuilder.java?rev=230918&r1=230917&r2=230918&view=diff
==============================================================================
--- jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrBuilder.java (original)
+++ jakarta/commons/proper/lang/trunk/src/java/org/apache/commons/lang/text/StrBuilder.java Mon Aug  8 15:44:59 2005
@@ -17,6 +17,7 @@
 
 import java.io.CharArrayReader;
 import java.io.Reader;
+import java.io.Writer;
 import java.util.Collection;
 import java.util.Iterator;
 
@@ -1579,6 +1580,26 @@
     }
 
     //-----------------------------------------------------------------------
+    /**
+     * Gets this builder as a Writer that can be written to.
+     * <p>
+     * This method allows you to populate the contents of the builder
+     * using any standard method that takes a Writer.
+     * <p>
+     * To use, simply create a <code>StrBuilder</code>,
+     * call <code>asWriter</code>, and populate away. The data is available
+     * at any time using the methods of the <code>StrBuilder</code>.
+     * Note however, that no synchronization occurs, so you must not read
+     * the builder from one thread while writing in another thread.
+     * Note also that close and flush have no effect on the writer.
+     *
+     * @return a writer that populates this builder
+     */
+    public Writer asWriter() {
+        return new StrBuilderWriter();
+    }
+
+    //-----------------------------------------------------------------------
 //    /**
 //     * Gets a String version of the string builder by calling the internal
 //     * constructor of String by reflection.
@@ -1663,6 +1684,51 @@
     protected void validateIndex(int index) {
         if (index < 0 || index > size) {
             throw new StringIndexOutOfBoundsException(index);
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Inner class to allow StrBuilder to operate as a writer.
+     */
+    class StrBuilderWriter extends Writer {
+        StrBuilderWriter() {
+            super();
+        }
+
+        /** @inheritdoc */
+        public void close() {
+            // do nothing
+        }
+
+        /** @inheritdoc */
+        public void flush() {
+            // do nothing
+        }
+
+        /** @inheritdoc */
+        public void write(int c) {
+            append((char) c);
+        }
+
+        /** @inheritdoc */
+        public void write(char[] cbuf) {
+            append(cbuf);
+        }
+
+        /** @inheritdoc */
+        public void write(char[] cbuf, int off, int len) {
+            append(cbuf, off, len);
+        }
+
+        /** @inheritdoc */
+        public void write(String str) {
+            append(str);
+        }
+
+        /** @inheritdoc */
+        public void write(String str, int off, int len) {
+            append(str, off, len);
         }
     }
 

Modified: jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrBuilderTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrBuilderTest.java?rev=230918&r1=230917&r2=230918&view=diff
==============================================================================
--- jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrBuilderTest.java (original)
+++ jakarta/commons/proper/lang/trunk/src/test/org/apache/commons/lang/text/StrBuilderTest.java Mon Aug  8 15:44:59 2005
@@ -17,6 +17,7 @@
 package org.apache.commons.lang.text;
 
 import java.io.Reader;
+import java.io.Writer;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -1837,6 +1838,40 @@
         
         buf = new char[40];
         assertEquals(-1, reader.read(buf));
+    }
+
+    //-----------------------------------------------------------------------
+    public void testAsWriter() throws Exception {
+        StrBuilder sb = new StrBuilder ("base");
+        Writer writer = sb.asWriter();
+        
+        writer.write('l');
+        assertEquals("basel", sb.toString());
+        
+        writer.write(new char[] {'i', 'n'});
+        assertEquals("baselin", sb.toString());
+        
+        writer.write(new char[] {'n', 'e', 'r'}, 1, 2);
+        assertEquals("baseliner", sb.toString());
+        
+        writer.write(" rout");
+        assertEquals("baseliner rout", sb.toString());
+        
+        writer.write("ping that server", 1, 3);
+        assertEquals("baseliner routing", sb.toString());
+        
+        writer.flush();  // no effect
+        assertEquals("baseliner routing", sb.toString());
+        
+        writer.close();  // no effect
+        assertEquals("baseliner routing", sb.toString());
+        
+        writer.write(" hi");  // works after close
+        assertEquals("baseliner routing hi", sb.toString());
+        
+        sb.setLength(4);  // mix and match
+        writer.write('d');
+        assertEquals("based", sb.toString());
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org