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 /**
023 * An event emitted by a term.
024 *
025 * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
026 * @version $Revision$
027 */
028 public abstract class TermEvent {
029
030 public static Complete complete(CharSequence line) {
031 return new Complete(line);
032 }
033
034 public static Close close() {
035 return Close.INSTANCE;
036 }
037
038 public static ReadLine readLine(CharSequence line) {
039 return new ReadLine(line);
040 }
041
042 public static Break brk() {
043 return Break.INSTANCE;
044 }
045
046 private TermEvent() {
047 }
048
049 @Override
050 public String toString() {
051 return getClass().getSimpleName() + "[]";
052 }
053
054 /**
055 * Signals a control-break.
056 */
057 public static class Close extends TermEvent {
058
059 /** . */
060 private static final Close INSTANCE = new Close();
061
062 private Close() {
063 }
064 }
065
066 /**
067 * Signals a control-break.
068 */
069 public static class Break extends TermEvent {
070
071 /** . */
072 private static final Break INSTANCE = new Break();
073
074 private Break() {
075 }
076 }
077
078 /**
079 * Signals the completion of a text line.
080 */
081 public static class Complete extends TermEvent {
082
083 /** The line to be completed. */
084 private CharSequence line;
085
086 private Complete(CharSequence line) {
087 this.line = line;
088 }
089
090 public CharSequence getLine() {
091 return line;
092 }
093
094 @Override
095 public String toString() {
096 return "Complete[line=" + line + "]";
097 }
098 }
099
100 /**
101 * Signals a line was submitted for processing.
102 */
103 public static class ReadLine extends TermEvent {
104
105 /** . */
106 private final CharSequence line;
107
108 private ReadLine(CharSequence line) {
109 this.line = line;
110 }
111
112 public CharSequence getLine() {
113 return line;
114 }
115
116 @Override
117 public String toString() {
118 return "ReadLine[line=" + line + "]";
119 }
120 }
121 }