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