jay.yydebug
Class yyJInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by jay.yydebug.yyJInputStream
All Implemented Interfaces:
KeyListener, Closeable, EventListener

public class yyJInputStream
extends InputStream
implements KeyListener

used to reroute standard input from a JTextArea. Feeds all read methods from listening to typed keys. Should not deadlock because one should generally not read from within the event thread.

While this implementation avoids Java generics, code for a generic version has simply been commented out.


Field Summary
protected  StringBuffer line
          line edit buffer.
protected  ArrayList queue
          completed lines, ready to be read.
 
Constructor Summary
yyJInputStream()
           
 
Method Summary
 int available()
           
 void close()
           
protected  void doKey(JTextArea ta, char ch, boolean paste)
          process one typed or pasted character.
 void keyPressed(KeyEvent ke)
          this one ensures that you can only type at the end and implements control-C as copy and control-V as paste key if AWTPermission(accessClipboard) is granted.
 void keyReleased(KeyEvent ke)
           
 void keyTyped(KeyEvent ke)
           
 int read()
           
 int read(byte[] b, int off, int len)
           
 long skip(long len)
          returns 0: cannot skip on a terminal.
 
Methods inherited from class java.io.InputStream
mark, markSupported, read, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

line

protected final StringBuffer line
line edit buffer.


queue

protected ArrayList queue
completed lines, ready to be read. Invariant: null after close().

Constructor Detail

yyJInputStream

public yyJInputStream()
Method Detail

available

public int available()
              throws IOException
Overrides:
available in class InputStream
Throws:
IOException

close

public void close()
           throws IOException
Specified by:
close in interface Closeable
Overrides:
close in class InputStream
Throws:
IOException

read

public int read()
         throws IOException
Specified by:
read in class InputStream
Throws:
IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
Overrides:
read in class InputStream
Throws:
IOException

skip

public long skip(long len)
returns 0: cannot skip on a terminal.

Overrides:
skip in class InputStream

keyPressed

public void keyPressed(KeyEvent ke)
this one ensures that you can only type at the end and implements control-C as copy and control-V as paste key if AWTPermission(accessClipboard) is granted. This is executed within the event thread.

BUG: paste should be based on the platform paste key; however, Safari does not send that one to an applet.

Specified by:
keyPressed in interface KeyListener

keyTyped

public void keyTyped(KeyEvent ke)
Specified by:
keyTyped in interface KeyListener

doKey

protected void doKey(JTextArea ta,
                     char ch,
                     boolean paste)
process one typed or pasted character. The caret position is not updated for pasting.


keyReleased

public void keyReleased(KeyEvent ke)
Specified by:
keyReleased in interface KeyListener