You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2003/08/13 12:54:37 UTC

cvs commit: incubator-geronimo/modules/twiddle/src/java/org/apache/geronimo/twiddle/console/java Console.java

jdillon     2003/08/13 03:54:37

  Added:       modules/twiddle/src/java/org/apache/geronimo/twiddle/console
                        AbstractConsole.java Completer.java Console.java
                        ConsoleFactory.java History.java IOContext.java
                        TransientHistory.java
               modules/twiddle/src/java/org/apache/geronimo/twiddle/console/java
                        Console.java
  Log:
   o Basic framework for the interactive console
   o Simple pure Java console impl, eventually want to plugin editline or
     other BSD-licence friendly readline-ish impls
  
  Revision  Changes    Path
  1.1                  incubator-geronimo/modules/twiddle/src/java/org/apache/geronimo/twiddle/console/AbstractConsole.java
  
  Index: AbstractConsole.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  package org.apache.geronimo.twiddle.console;
  
  import java.io.IOException;
  
  /**
   * An abstract implementation of {@link Console}.
   *
   * <p>Sub-classes only need to define {@link Console#getLine(String,boolean)}.
   *
   * <p>Also provides helpers to determine if history and/or completion is
   *    enabled.
   *
   * @version <code>$Id: AbstractConsole.java,v 1.1 2003/08/13 10:54:37 jdillon Exp $</code>
   * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
   */
  public abstract class AbstractConsole
      implements Console
  {
      protected History history;
      protected Completer completer;
      protected IOContext ioContext;
      
      public void setIOContext(final IOContext ioContext)
      {
          this.ioContext = ioContext;
      }
      
      public IOContext getIOContext()
      {
          return ioContext;
      }
      
      public void setHistory(final History history)
      {
          this.history = history;
      }
      
      public History getHistory()
      {
          return history;
      }
      
      protected boolean isHistoryEnabled()
      {
          return history != null;
      }
      
      public void setCompleter(final Completer completer)
      {
          this.completer = completer;
      }
      
      public Completer getCompleter()
      {
          return completer;
      }
      
      protected boolean isCompletionEnabled()
      {
          return completer != null;
      }
      
      public String getLine(final String prompt) throws IOException
      {
          return getLine(prompt, true);
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/twiddle/src/java/org/apache/geronimo/twiddle/console/Completer.java
  
  Index: Completer.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  package org.apache.geronimo.twiddle.console;
  
  /**
  * Provides a {@link Console} with plugable command-line completion.
   *
   * @version <code>$Id: Completer.java,v 1.1 2003/08/13 10:54:37 jdillon Exp $</code>
   * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
   */
  public interface Completer
  {
      /**
       * Attempt to complete the given command-line text.
       *
       * @param text  The command-line text to complete.
       * @return      The completed command-line.
       */
      String complete(String text);
  }
  
  
  
  1.1                  incubator-geronimo/modules/twiddle/src/java/org/apache/geronimo/twiddle/console/Console.java
  
  Index: Console.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  package org.apache.geronimo.twiddle.console;
  
  import java.io.IOException;
  
  /**
   * Abstraction of a console.
   *
   * <p>Console impl must provide a no-argument constructor for pluggablity.
   *
   * <p>Modeled after Java-Readline.
   *
   * @version <code>$Id: Console.java,v 1.1 2003/08/13 10:54:37 jdillon Exp $</code>
   * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
   */
  public interface Console
  {
      /**
       * Set the input/output context.
       *
       * @param ioContext     The input/output context.
       */
      void setIOContext(IOContext ioContext);
      
      /**
       * Get the input/output context.
       *
       * @return The input/output context.
       */
      IOContext getIOContext();
      
      /**
       * Set the history backing for the console.
       *
       * @param history   The history backing.
       */
      void setHistory(History history);
      
      /**
       * Get the history backing for the console.
       *
       * @return The history backing.
       */
      History getHistory();
      
      /**
       * Set the command-line completer for the console.
       *
       * @param completer     The command-line completer.
       */
      void setCompleter(Completer completer);
      
      /**
       * Get the command-line completer for the console.
       *
       * @return The command-line completer.
       */
      Completer getCompleter();
      
      /**
       * Get a line of input.
       *
       * @param prompt            The command-line prompt to display.
       * @param updateHistory     True to update history, false to disable.
       *
       * @throws IOException      Failed to read input.
       */
      String getLine(String prompt, boolean updateHistory) throws IOException;
      
      /**
       * Get a line of input.
       *
       * @param prompt    The command-line prompt to display.
       *
       * @throws IOException      Failed to read input.
       */
      String getLine(String prompt) throws IOException;
  }
  
  
  
  1.1                  incubator-geronimo/modules/twiddle/src/java/org/apache/geronimo/twiddle/console/ConsoleFactory.java
  
  Index: ConsoleFactory.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  package org.apache.geronimo.twiddle.console;
  
  /**
  * A factory for creating {@link Console} instances.
   *
   * @version <code>$Id: ConsoleFactory.java,v 1.1 2003/08/13 10:54:37 jdillon Exp $</code>
   * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
   */
  public class ConsoleFactory
  {
      /**
       * Create a new console.
       *
       * @return A new console instance
       *
       * @throws Exception    Failed to create console instance.
       */
      public static Console create() throws Exception
      {
          //
          // TODO: Determine which Console impl to use, create and return it.
          //       For now just use the native Java impl.
          //
          
          return new org.apache.geronimo.twiddle.console.java.Console();
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/twiddle/src/java/org/apache/geronimo/twiddle/console/History.java
  
  Index: History.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  package org.apache.geronimo.twiddle.console;
  
  /**
   * Provides the interface for command-line history backing.
   *
   * @version <code>$Id: History.java,v 1.1 2003/08/13 10:54:37 jdillon Exp $</code>
   * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
   */
  public interface History
  {
      /**
       * Add a line to the command-line history.
       *
       * @param line  The line to add.
       * @return      The index of the added line.
       */
      int add(String line);
      
      /**
       * Get a line from the command-line history.
       *
       * @param i     The line index to retrieve.
       * @return      The command-line or null if index was not found.
       */
      String get(int i);
      
      /**
       * Get the number of lines in the command-line history.
       *
       * @return The number of lines.
       */
      int size();
      
      /**
       * Clear all command-lines.
       */
      void clear();
  }
  
  
  
  1.1                  incubator-geronimo/modules/twiddle/src/java/org/apache/geronimo/twiddle/console/IOContext.java
  
  Index: IOContext.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  package org.apache.geronimo.twiddle.console;
  
  import java.io.InputStream;
  import java.io.OutputStream;
  
  import org.apache.geronimo.common.NullArgumentException;
  
  /**
   * Abstraction of a collection of input and output streams.
   *
   * @version <code>$Id: IOContext.java,v 1.1 2003/08/13 10:54:37 jdillon Exp $</code>
   * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
   */
  public class IOContext
  {
      /** The input stream. */
      protected InputStream input;
      
      /** The output stream. */
      protected OutputStream output;
      
      /** The error output stream. */
      protected OutputStream errorOutput;
      
      /**
       * Construct a <code>IOContext</code>.
       *
       * @param input         The input stream.
       * @param output        The output stream.
       * @param errorOutput   The error output stream.
       */
      public IOContext(final InputStream input, final OutputStream output, final OutputStream errorOutput)
      {
          if (input == null) {
              throw new NullArgumentException("input");
          }
          if (output == null) {
              throw new NullArgumentException("output");
          }
          if (errorOutput == null) {
              throw new NullArgumentException("errorOutput");
          }
          
          this.input = input;
          this.output = output;
          this.errorOutput = errorOutput;
      }
      
      /**
       * Construct a <code>IOContext</code> using the output stream for error output.
       *
       * @param input     The input stream.
       * @param output    The output stream.
       */
      public IOContext(final InputStream input, final OutputStream output)
      {
          this(input, output, output);
      }
      
      /**
       * Get the input stream.
       *
       * @return The input stream.
       */
      public InputStream getInputStream()
      {
          return input;
      }
      
      /**
       * Get the output stream.
       *
       * @return The output stream.
       */
      public OutputStream getOutputStream()
      {
          return output;
      }
      
      /**
       * Get the error output stream.
       *
       * @return The error output stream.
       */
      public OutputStream getErrorOutputStream()
      {
          return errorOutput;
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/twiddle/src/java/org/apache/geronimo/twiddle/console/TransientHistory.java
  
  Index: TransientHistory.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  package org.apache.geronimo.twiddle.console;
  
  import java.util.List;
  import java.util.LinkedList;
  
  import org.apache.geronimo.common.NullArgumentException;
  
  /**
   * A transient history backing.
   *
   * @version <code>$Id: TransientHistory.java,v 1.1 2003/08/13 10:54:37 jdillon Exp $</code>
   * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
   */
  public class TransientHistory
      implements History
  {
      /** The list which provides the backing. */
      protected List backing;
      
      /**
       * Construct a <code>TransientHistory</code> with the given list for backing.
       *
       * @param backing   The list which provides actual backing.
       */
      public TransientHistory(final List backing)
      {
          if (backing == null) {
              throw new NullArgumentException("backing");
          }
          
          this.backing = backing;
      }
      
      /**
       * Construct a <code>TransientHistory</code> with default linked list backing.
       */
      public TransientHistory()
      {
          this(new LinkedList());
      }
      
      
      /////////////////////////////////////////////////////////////////////////
      //                               History                               //
      /////////////////////////////////////////////////////////////////////////
      
      public int add(final String line)
      {
          backing.add(line);
          return backing.size() - 1;
      }
      
      public String get(final int i)
      {
          return (String)backing.get(i);
      }
      
      public int size()
      {
          return backing.size();
      }
      
      public void clear()
      {
          backing.clear();
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/twiddle/src/java/org/apache/geronimo/twiddle/console/java/Console.java
  
  Index: Console.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  
  package org.apache.geronimo.twiddle.console.java;
  
  import java.io.IOException;
  import java.io.EOFException;
  import java.io.BufferedReader;
  import java.io.InputStreamReader;
  import java.io.PrintWriter;
  import java.io.OutputStreamWriter;
  
  import org.apache.geronimo.twiddle.console.AbstractConsole;
  import org.apache.geronimo.twiddle.console.Completer;
  import org.apache.geronimo.twiddle.console.History;
  import org.apache.geronimo.twiddle.console.TransientHistory;
  
  /**
   * An implementation of <code>Console</code> in pure Java.
   *
   * <p>Limitations:
   * <ul>
   *    <li>Minimal support for history (collection).
   *    <li>Does not support completion.
   * </ul>
   *
   * @version <code>$Id: Console.java,v 1.1 2003/08/13 10:54:37 jdillon Exp $</code>
   * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
   */
  public class Console
      extends AbstractConsole
  {
      /** The reader to get input from. */
      protected BufferedReader reader;
      
      /** The writer to render the prompt to. */
      protected PrintWriter writer;
      
      /**
       * Construct a native Java console, using a transient history map.
       */
      public Console()
      {
          setHistory(new TransientHistory());
      }
      
      /**
       * The native Java console impl can not perform completion (at this time).
       *
       * @throws UnsupportedOperationException
       */
      public void setCompleter(Completer completer)
      {
          throw new UnsupportedOperationException();
      }
      
      /**
       * Helper to lazy initialize the reader.
       */
      protected BufferedReader getReader()
      {
          if (reader == null) {
              reader = new BufferedReader(new InputStreamReader(getIOContext().getInputStream()));
          }
          
          return reader;
      }
      
      /**
       * Helper to lazy initialize the writer.
       */
      protected PrintWriter getWriter()
      {
          if (writer == null) {
              writer = new PrintWriter(new OutputStreamWriter(getIOContext().getOutputStream()));
          }
          
          return writer;
      }
      
      /**
       * Get a line of input.
       *
       * @param prompt            The prompt to render.
       * @param updateHistory     True to update history with non-null input.
       * @return                  A line of input, or null if the line was empty.
       *
       * @throws EOFException
       * @throws IOException
       */
      public String getLine(final String prompt, final boolean updateHistory) 
          throws IOException
      {
          // Render the prompt
          PrintWriter writer = getWriter();
          writer.print(prompt);
          writer.flush();
          
          // Get some input
          BufferedReader reader = getReader();
          String line = reader.readLine();
          
          // Sanity check the results
          if (line == null) {
              throw new EOFException();
          }
          if (line.length() == 0) {
              line = null;
          }
          
          // Update history
          if (line != null && updateHistory && isHistoryEnabled()) {
              History h = getHistory();
              h.add(line);
          }
          
          return line;
      }
  }