001 /*
002 * Copyright (C) 2010 eXo Platform SAS.
003 *
004 * This is free software; you can redistribute it and/or modify it
005 * under the terms of the GNU Lesser General Public License as
006 * published by the Free Software Foundation; either version 2.1 of
007 * the License, or (at your option) any later version.
008 *
009 * This software is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * You should have received a copy of the GNU Lesser General Public
015 * License along with this software; if not, write to the Free
016 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
017 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
018 */
019
020 package org.crsh.term;
021
022 import org.crsh.text.CharReader;
023
024 import java.io.Closeable;
025 import java.io.IOException;
026
027 /**
028 * An high level term abstraction.
029 *
030 * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
031 * @version $Revision$
032 */
033 public interface Term extends Closeable {
034
035
036 /**
037 * Returns the term width in chars. When the value is not positive it means the value could not be determined.
038 *
039 * @return the term width
040 */
041 int getWidth();
042
043 /**
044 * Retrieves the value of a property specified by this Term
045 *
046 * @param name name of the term property
047 * @return value of the term property
048 */
049 String getProperty(String name);
050
051 /**
052 * Set the echo mode on the term.
053 *
054 * @param echo the echo mode
055 */
056 void setEcho(boolean echo);
057
058 /**
059 * Read the next term event. This operation is a blocking operation that blocks until data is available or until
060 * term is closed.
061 *
062 * @return the next term event
063 * @throws IOException any io exception
064 */
065 TermEvent read() throws IOException;
066
067 /**
068 * Write a message on the console, the text will be appended.
069 *
070 *
071 * @param reader the message to write
072 * @throws IOException any io exception
073 */
074 void write(CharReader reader) throws IOException;
075
076 /**
077 * Returns the insert buffer, any char appended in the returned appendable will translate into an
078 * insertion in the buffer.
079 *
080 * @return the insert buffer.
081 */
082 Appendable getInsertBuffer();
083
084 /**
085 * Returns the current buffer;
086 *
087 * @return the buffer
088 */
089 CharSequence getBuffer();
090
091 /**
092 * Append a line to the term history.
093 *
094 * @param line the history line to append
095 */
096 void addToHistory(CharSequence line);
097
098 /**
099 * Close the term. If threads are blocked in the {@link #read()} operation, those thread should be unblocked.
100 */
101 void close();
102
103 }