Author: rwhitcomb
Date: Sat Jun 13 02:22:50 2020
New Revision: 1878783

URL: http://svn.apache.org/viewvc?rev=1878783&view=rev
Log:
Update TextAreaOutputStream to add charset to the mix and allow non-default 
buffer size.

Update TextAreaConsoleTest and the associated console_text.bxml to display 
longer messages
to test the buffer size change.

Fix some style errors.


Modified:
    pivot/trunk/tests/src/org/apache/pivot/tests/TextAreaConsoleTest.java
    pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml
    pivot/trunk/wtk/src/org/apache/pivot/wtk/util/TextAreaOutputStream.java

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/TextAreaConsoleTest.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/TextAreaConsoleTest.java?rev=1878783&r1=1878782&r2=1878783&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/TextAreaConsoleTest.java 
(original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/TextAreaConsoleTest.java Sat 
Jun 13 02:22:50 2020
@@ -38,6 +38,117 @@ public class TextAreaConsoleTest impleme
     private Console console;
     private int line = 1;
 
+    private static final String[] PARAGRAPHS = {
+        "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do 
eiusmod tempor incididunt "
+      + "ut labore et dolore magna aliqua. Commodo odio aenean sed adipiscing 
diam donec adipiscing "
+      + "tristique. Orci nulla pellentesque dignissim enim sit amet venenatis. 
Magna sit amet purus "
+      + "gravida quis blandit. Tincidunt eget nullam non nisi est sit. Quis 
ipsum suspendisse ultrices "
+      + "gravida dictum fusce ut placerat. Et pharetra pharetra massa massa 
ultricies mi. In fermentum "
+      + "posuere urna nec tincidunt praesent. Ut etiam sit amet nisl purus in 
mollis nunc sed. Euismod "
+      + "lacinia at quis risus sed vulputate odio ut enim. In nibh mauris 
cursus mattis molestie a "
+      + "iaculis at erat. Dapibus ultrices in iaculis nunc sed. Viverra 
suspendisse potenti nullam "
+      + "ac tortor vitae purus faucibus ornare. Scelerisque fermentum dui 
faucibus in ornare quam "
+      + "viverra orci. Sagittis orci a scelerisque purus semper eget duis at 
tellus. Auctor eu augue "
+      + "ut lectus. Mattis rhoncus urna neque viverra justo nec ultrices dui 
sapien. Pellentesque eu "
+      + "tincidunt tortor aliquam nulla. Massa eget egestas purus viverra 
accumsan in nisl. Sed velit "
+      + "dignissim sodales ut eu sem integer.",
+
+        "Tortor consequat id porta nibh venenatis cras sed felis eget. Viverra 
adipiscing at in tellus "
+      + "integer feugiat scelerisque. Hendrerit dolor magna eget est lorem 
ipsum dolor. Viverra tellus "
+      + "in hac habitasse platea dictumst vestibulum. Eget nulla facilisi 
etiam dignissim diam. At in "
+      + "tellus integer feugiat scelerisque varius morbi. Et egestas quis 
ipsum suspendisse ultrices "
+      + "gravida dictum fusce. Faucibus pulvinar elementum integer enim neque. 
A diam sollicitudin "
+      + "tempor id. Metus aliquam eleifend mi in nulla posuere sollicitudin 
aliquam ultrices. "
+      + "Consequat nisl vel pretium lectus quam id leo in. Adipiscing elit ut 
aliquam purus sit. "
+      + "A diam sollicitudin tempor id eu nisl nunc. Cursus euismod quis 
viverra nibh cras pulvinar "
+      + "mattis nunc sed. Aliquet bibendum enim facilisis gravida neque.",
+
+        "Lorem sed risus ultricies tristique nulla aliquet enim tortor. 
Elementum nisi quis eleifend "
+      + "quam adipiscing vitae proin sagittis nisl. Cursus turpis massa 
tincidunt dui. Quam adipiscing "
+      + "vitae proin sagittis. Porta nibh venenatis cras sed felis eget. Morbi 
blandit cursus risus at "
+      + "ultrices mi tempus. Ac auctor augue mauris augue neque gravida. Proin 
nibh nisl condimentum "
+      + "id venenatis a condimentum vitae. Purus in massa tempor nec feugiat 
nisl. Phasellus egestas "
+      + "tellus rutrum tellus pellentesque eu.",
+
+        "Pharetra diam sit amet nisl. Rhoncus urna neque viverra justo nec. 
Auctor elit sed vulputate "
+      + "mi sit amet mauris commodo quis. Penatibus et magnis dis parturient 
montes nascetur ridiculus "
+      + "mus. Mi ipsum faucibus vitae aliquet nec ullamcorper sit amet risus. 
Blandit volutpat "
+      + "maecenas volutpat blandit aliquam etiam erat. In arcu cursus euismod 
quis viverra nibh cras "
+      + "pulvinar. Elementum integer enim neque volutpat ac tincidunt vitae 
semper. Feugiat pretium "
+      + "nibh ipsum consequat nisl vel pretium lectus quam. Aenean sed 
adipiscing diam donec "
+      + "adipiscing tristique risus. Nunc sed augue lacus viverra vitae congue 
eu consequat. "
+      + "Malesuada fames ac turpis egestas. Libero volutpat sed cras ornare 
arcu dui vivamus arcu "
+      + "felis. Id aliquet risus feugiat in ante metus dictum. Netus et 
malesuada fames ac turpis "
+      + "egestas sed. Enim tortor at auctor urna nunc id cursus. Ligula 
ullamcorper malesuada proin "
+      + "libero nunc consequat. Diam volutpat commodo sed egestas egestas 
fringilla. Habitasse platea "
+      + "dictumst quisque sagittis purus sit amet volutpat consequat. Gravida 
cum sociis natoque "
+      + "penatibus et magnis dis parturient.",
+
+        "Aliquam vestibulum morbi blandit cursus risus at. Lectus vestibulum 
mattis ullamcorper velit "
+      + "sed. Congue nisi vitae suscipit tellus mauris a diam maecenas sed. 
Eleifend donec pretium "
+      + "vulputate sapien nec sagittis aliquam malesuada. Nulla facilisi cras 
fermentum odio eu "
+      + "feugiat pretium nibh. Nibh tortor id aliquet lectus proin nibh nisl 
condimentum. Sodales "
+      + "ut eu sem integer. Amet dictum sit amet justo. Non pulvinar neque 
laoreet suspendisse "
+      + "interdum consectetur libero id faucibus. Fermentum leo vel orci porta 
non pulvinar neque "
+      + "laoreet. Blandit massa enim nec dui nunc mattis. Arcu non odio 
euismod lacinia. Orci porta "
+      + "non pulvinar neque laoreet suspendisse. Feugiat in ante metus dictum. 
Sodales ut etiam sit "
+      + "amet nisl purus. Ut aliquam purus sit amet luctus.",
+
+        "Rhoncus dolor purus non enim praesent elementum facilisis leo vel. 
Vivamus at augue eget "
+      + "arcu dictum. Pellentesque elit ullamcorper dignissim cras tincidunt 
lobortis. Facilisis "
+      + "gravida neque convallis a cras semper. Tempor orci eu lobortis 
elementum nibh. Consequat "
+      + "nisl vel pretium lectus quam id leo in. Sed pulvinar proin gravida 
hendrerit. Velit "
+      + "laoreet id donec ultrices. Etiam non quam lacus suspendisse faucibus 
interdum posuere "
+      + "lorem ipsum. Tellus at urna condimentum mattis pellentesque id nibh 
tortor. Egestas congue "
+      + "quisque egestas diam in arcu cursus euismod. Amet facilisis magna 
etiam tempor orci eu. "
+      + "Aliquet enim tortor at auctor urna. Nulla facilisi nullam vehicula 
ipsum a arcu. Nisl "
+      + "condimentum id venenatis a condimentum. Vel fringilla est ullamcorper 
eget nulla facilisi "
+      + "etiam dignissim. Quis varius quam quisque id.",
+
+        "Massa enim nec dui nunc mattis enim ut tellus. Amet dictum sit amet 
justo. Viverra "
+      + "accumsan in nisl nisi. Nulla facilisi nullam vehicula ipsum a. Proin 
nibh nisl condimentum "
+      + "id. Vulputate ut pharetra sit amet. Consectetur lorem donec massa 
sapien faucibus et "
+      + "molestie ac feugiat. Ut morbi tincidunt augue interdum velit euismod 
in. Non consectetur "
+      + "a erat nam at. Aliquam sem fringilla ut morbi tincidunt augue 
interdum velit. Nisl nisi "
+      + "scelerisque eu ultrices vitae auctor eu augue ut. Ut venenatis tellus 
in metus. Massa eget "
+      + "egestas purus viverra accumsan in nisl nisi. In est ante in nibh. 
Elementum sagittis vitae "
+      + "et leo duis ut. Nibh sed pulvinar proin gravida. Tristique senectus 
et netus et malesuada. "
+      + "In hac habitasse platea dictumst. Elit scelerisque mauris 
pellentesque pulvinar "
+      + "pellentesque habitant morbi tristique senectus. Elementum sagittis 
vitae et leo duis ut "
+      + "diam quam nulla.",
+
+        "Orci eu lobortis elementum nibh. Facilisis volutpat est velit egestas 
dui id. Eleifend "
+      + "quam adipiscing vitae proin sagittis nisl rhoncus. Massa sed 
elementum tempus egestas sed "
+      + "sed risus. Tortor dignissim convallis aenean et tortor. Pellentesque 
adipiscing commodo "
+      + "elit at imperdiet dui accumsan sit. Habitasse platea dictumst 
vestibulum rhoncus est. "
+      + "Eleifend donec pretium vulputate sapien. Aliquam sem et tortor 
consequat. Dignissim "
+      + "suspendisse in est ante. Neque convallis a cras semper auctor neque. 
Eget magna fermentum "
+      + "iaculis eu non. Suscipit tellus mauris a diam.",
+
+        "Adipiscing bibendum est ultricies integer. Amet dictum sit amet justo 
donec enim diam "
+      + "vulputate ut. Sagittis aliquam malesuada bibendum arcu vitae 
elementum curabitur vitae "
+      + "nunc. Ac turpis egestas maecenas pharetra. A arcu cursus vitae congue 
mauris rhoncus. "
+      + "Sed pulvinar proin gravida hendrerit lectus. Pharetra massa massa 
ultricies mi quis. "
+      + "Velit ut tortor pretium viverra suspendisse. Tristique sollicitudin 
nibh sit amet "
+      + "commodo. Cursus in hac habitasse platea dictumst quisque.",
+
+        "Pharetra diam sit amet nisl suscipit adipiscing bibendum. Imperdiet 
massa tincidunt "
+      + "nunc pulvinar. Aliquet sagittis id consectetur purus ut. Volutpat 
maecenas volutpat "
+      + "blandit aliquam. At erat pellentesque adipiscing commodo elit at 
imperdiet dui accumsan. "
+      + "Lectus arcu bibendum at varius vel pharetra. Mi in nulla posuere 
sollicitudin aliquam "
+      + "ultrices sagittis orci a. Hac habitasse platea dictumst quisque 
sagittis purus sit. In "
+      + "ante metus dictum at. Fermentum et sollicitudin ac orci phasellus 
egestas tellus rutrum "
+      + "tellus. Malesuada fames ac turpis egestas maecenas. Scelerisque 
viverra mauris in "
+      + "aliquam sem fringilla ut morbi tincidunt. Ac placerat vestibulum 
lectus mauris ultrices "
+      + "eros in. Non pulvinar neque laoreet suspendisse interdum consectetur 
libero. Varius "
+      + "morbi enim nunc faucibus a pellentesque."
+    };
+    private static final int NUM_PARAGRAPHS = PARAGRAPHS.length;
+
+    private static int randomInt(final int max) {
+        return (int)Math.floor(Math.random() * (double)max);
+    }
+
     @Override
     public void startup(Display display, Map<String, String> properties) {
         BXMLSerializer serializer = new BXMLSerializer();
@@ -47,9 +158,9 @@ public class TextAreaConsoleTest impleme
         } catch (IOException | SerializationException ex) {
             throw new RuntimeException(ex);
         }
-        console = new Console(new 
TextAreaOutputStream(consoleArea).toPrintStream());
+        console = new Console(new TextAreaOutputStream(consoleArea, 
8192).toPrintStream());
         logMessageButton.getButtonPressListeners().add(
-            (button) -> console.log(String.format("%1$d. Hello, World!", 
line++)));
+            b -> console.log(String.format("%1$d. %2$s", line++, 
PARAGRAPHS[randomInt(NUM_PARAGRAPHS)])));
         window.open(display);
     }
 

Modified: pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml
URL: 
http://svn.apache.org/viewvc/pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml?rev=1878783&r1=1878782&r2=1878783&view=diff
==============================================================================
--- pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml (original)
+++ pivot/trunk/tests/src/org/apache/pivot/tests/console_test.bxml Sat Jun 13 
02:22:50 2020
@@ -33,8 +33,8 @@ limitations under the License.
       </TablePane.Row>
       <TablePane.Row height="1*">
         <Border title="Console">
-          <ScrollPane>
-            <TextArea bxml:id="consoleArea" editable="false"/>
+          <ScrollPane horizontalScrollBarPolicy="fill" 
verticalScrollBarPolicy="auto">
+            <TextArea bxml:id="consoleArea" editable="false" 
styles="{wrapText:true}"/>
           </ScrollPane>
         </Border>
       </TablePane.Row>

Modified: 
pivot/trunk/wtk/src/org/apache/pivot/wtk/util/TextAreaOutputStream.java
URL: 
http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/util/TextAreaOutputStream.java?rev=1878783&r1=1878782&r2=1878783&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/util/TextAreaOutputStream.java 
(original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/util/TextAreaOutputStream.java Sat 
Jun 13 02:22:50 2020
@@ -20,6 +20,8 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 import org.apache.pivot.wtk.ApplicationContext;
 import org.apache.pivot.wtk.Bounds;
 import org.apache.pivot.wtk.TextArea;
@@ -34,16 +36,65 @@ public final class TextAreaOutputStream
     /** The TextArea we are going to stream to. */
     private TextArea textArea;
 
+    /** Default line buffer size (can be overridden through a constructor). */
+    private static final int DEFAULT_BUFFER_SIZE = 256;
+
+    /** Buffer size to use for incoming lines of text. */
+    private int lineBufferSize;
+
+    /** The charset to use for converting incoming bytes to characters. */
+    private Charset incomingCharset;
+
     /** The buffered line for this stream. */
-    private ByteArrayOutputStream lineBuffer = new ByteArrayOutputStream(256);
+    private ByteArrayOutputStream lineBuffer;
 
     /**
-     * Only constructor given the {@link TextArea} to stream to.
+     * Simple constructor given the {@link TextArea} to stream to.
      *
      * @param textAreaToUse The TextArea to use for output.
      */
     public TextAreaOutputStream(final TextArea textAreaToUse) {
+        this(textAreaToUse, null, DEFAULT_BUFFER_SIZE);
+    }
+
+    /**
+     * Constructor given the {@link TextArea} to stream to, and the
+     * non-default line buffer size to use.
+     *
+     * @param textAreaToUse The TextArea to use for output.
+     * @param lineBufferSizeToUse The non-default size for the input line 
buffer.
+     */
+    public TextAreaOutputStream(final TextArea textAreaToUse, final int 
lineBufferSizeToUse) {
+        this(textAreaToUse, null, lineBufferSizeToUse);
+    }
+
+    /**
+     * Constructor given the {@link TextArea} to stream to, and the charset to 
use
+     * for decoding the incoming bytes into characters.
+     *
+     * @param textAreaToUse The TextArea to use for output.
+     * @param charsetToUse The charset used to convert incoming bytes to 
characters
+     * (can be {@code null} to use the platform standard charset).
+     */
+    public TextAreaOutputStream(final TextArea textAreaToUse, final Charset 
charsetToUse) {
+        this(textAreaToUse, charsetToUse, DEFAULT_BUFFER_SIZE);
+    }
+
+    /**
+     * Constructor given the {@link TextArea} to stream to, the charset to use
+     * for decoding the incoming bytes into characters, and the line buffer 
size to use.
+     *
+     * @param textAreaToUse The TextArea to use for output.
+     * @param charsetToUse The charset used to convert incoming bytes to 
characters
+     * (can be {@code null} to use the platform standard charset).
+     * @param lineBufferSizeToUse The size for the input line buffer.
+     */
+    public TextAreaOutputStream(final TextArea textAreaToUse, final Charset 
charsetToUse,
+        final int lineBufferSizeToUse) {
         this.textArea = textAreaToUse;
+        this.incomingCharset = (charsetToUse == null) ? 
Charset.defaultCharset() : charsetToUse;
+        this.lineBufferSize = lineBufferSizeToUse;
+        this.lineBuffer = new ByteArrayOutputStream(lineBufferSize);
     }
 
     /**
@@ -63,8 +114,7 @@ public final class TextAreaOutputStream
     private void flushLineBuffer(final boolean addNewLine) {
         if (lineBuffer.size() > 0) {
             byte[] bytes = lineBuffer.toByteArray();
-            // TODO: should we have a charset to use here??
-            String text = new String(bytes);
+            String text = new String(bytes, incomingCharset);
             int length = textArea.getCharacterCount();
             textArea.insertText(text, length);
             if (addNewLine) {
@@ -81,6 +131,7 @@ public final class TextAreaOutputStream
     public void close() throws IOException {
         flush();
         this.textArea = null;
+        this.incomingCharset = null;
         this.lineBuffer = null;
     }
 
@@ -100,10 +151,15 @@ public final class TextAreaOutputStream
     }
 
     /**
-     * @return A new {@link PrintStream} using this object as the basis.
+     * @return A new {@link PrintStream} using this object as the basis (and 
the
+     * same charset specified by one of the constructors).
      */
     public PrintStream toPrintStream() {
-        return new PrintStream(this);
+        try {
+            return new PrintStream(this, false, incomingCharset.name());
+        } catch (UnsupportedEncodingException uee) {
+            throw new RuntimeException("Impossible unsupported encoding 
error!", uee);
+        }
     }
 
 }


Reply via email to