001    package stringtransformers;
002    
003    import cs101.io.connection.*;
004    import cs101.io.Console;
005    import java.awt.*;
006    import java.awt.event.*;
007    
008    /** */
009    public class TransformerVisualizer extends SimpleFrame
010    {
011    
012      private TextField inputText, outputText;
013    
014      public TransformerVisualizer ( StringTransformer transformer )
015      {
016        super( new Panel() );
017    
018        this.setTitle( transformer.toString() );
019    
020        this.inputText = new TextField(40);  // 40 = # columns
021        this.inputText.setEditable( false );
022    
023        this.outputText = new TextField(40);
024        this.outputText.setEditable( false );
025    
026        Panel p = (Panel) super.c;
027        p.add( this.inputText );
028        p.add( this.outputText );
029    
030        MouseListener ml = TVConnectManager.getListener( transformer );
031        this.addMouseListener( ml );
032        this.inputText.addMouseListener( ml );
033        this.outputText.addMouseListener( ml );
034    
035        Console.println( "Created TV" );
036    
037      }
038    
039      protected InputConnection interceptInput( final InputConnection inCon )
040      {
041        // the code below is lovely but blocks....oops!
042        // really want just if input, readinput and hold it....
043          //      /** field is next String to be read from this object */
044          //      private String nextStr = inCon.readInput();
045          //      /** initializer */
046          //      {
047          //        TransformerVisualizer.this.displayInput( this.nextStr );
048          //      }
049          //      /** produce Strings one at a time */
050          //      public String readInput() 
051          //      {
052          //        String inStr = this.nextStr;
053          //        TransformerVisualizer.this.displayInput( inStr );
054          //        this.nextStr = inCon.readInput();
055          //        return inStr;
056          //      }};
057    
058        if (inCon == null)
059          {
060            System.err.println( this + " Uh oh, no inputconnection!");
061          }
062    
063        return new InputConnection() {
064          public String readInput() 
065          {
066            String inStr = inCon.readInput();
067            TransformerVisualizer.this.displayInput( inStr );
068            return inStr;
069          }};
070      }
071    
072      protected OutputConnection interceptOutput( final OutputConnection outCon )
073      {
074        return new OutputConnection() {
075          public void writeOutput( String outStr ) 
076          {
077            TransformerVisualizer.this.displayOutput( outStr );
078            outCon.writeOutput( outStr );
079          }};
080      }
081    
082      private void displayInput( String input )
083      {
084        this.inputText.setText( input );
085        Console.println("TV: displaying input " + input );
086      }
087    
088      private void displayOutput( String output )
089      {
090        this.outputText.setText( output );
091        Console.println("TV: displaying output " + output );
092      }
093    }
094