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