source: trunk/JavaHelperLib/src/de/ugoe/cs/util/console/TextConsole.java @ 199

Last change on this file since 199 was 199, checked in by sherbold, 13 years ago

Major change to the Console provided by this library. The interface de.ugoe.cs.console.ConsoleObserver? is deprecated and split into the five interface IOutputListener, IErrorListener, ITraceListener, IExceptionListener, and ICommandListener.

The rational for this change is to provide the possibility to listen to only parts of what is send to the console to provide better capabilities for target-oriented handling of the different streams, e.g., for exception logging.

File size: 2.9 KB
Line 
1package de.ugoe.cs.util.console;
2
3import java.io.IOException;
4
5import de.ugoe.cs.util.console.listener.IErrorListener;
6import de.ugoe.cs.util.console.listener.IExceptionListener;
7import de.ugoe.cs.util.console.listener.IOutputListener;
8import de.ugoe.cs.util.console.listener.ITraceListener;
9
10/**
11 * <p>
12 * Implements a simple console observer that prints normal text to
13 * {@code stdout}, errors to {@code stderr} and reads from {@code stdin}.
14 * </p>
15 *
16 * @author Steffen Herbold
17 * @version 1.0
18 */
19public class TextConsole implements IOutputListener, IErrorListener,
20                ITraceListener, IExceptionListener {
21
22        /**
23         * <p>
24         * In the debug mode, trace messages will be printed.
25         * </p>
26         */
27        private boolean debugMode = true;
28
29        /**
30         * <p>
31         * Creates a new text console and automatically registers it as observer.
32         * </p>
33         */
34        public TextConsole() {
35                Console.getInstance().registerOutputListener(this);
36                Console.getInstance().registerErrorListener(this);
37                Console.getInstance().registerTraceListener(this);
38                Console.getInstance().registerExceptionListener(this);
39        }
40
41        /**
42         * <p>
43         * Prints messages to {@code stdout}.
44         * </p>
45         *
46         * @see ConsoleObserver#updateText(java.lang.String)
47         */
48        public void updateText(String newMessage) {
49                System.out.print(newMessage);
50        }
51
52        /**
53         * <p>
54         * Prints messages to {@code stderr}.
55         * </p>
56         *
57         * @see ConsoleObserver#errStream(String)
58         */
59        @Override
60        public void errStream(String errMessage) {
61                System.err.print(errMessage);
62        }
63
64        /**
65         * <p>
66         * Prints the stacktrace of an exception to {@code stderr}.
67         * </p>
68         *
69         * @see ConsoleObserver#printStacktrace(Exception)
70         */
71        @Override
72        public void printStacktrace(Exception e) {
73                e.printStackTrace();
74        }
75
76        /**
77         * <p>
78         * Prints messages to {@code stdout}. These messages are only printed, if
79         * the console is run in debug mode.
80         * </p>
81         */
82        @Override
83        public void trace(String traceMessage) {
84                if (debugMode) {
85                        System.out.print(traceMessage);
86                }
87        }
88
89        /**
90         * <p>
91         * Starts a new TextConsole. If the text console is started, it can be used
92         * not only to print message, but also to execute commands by reading
93         * {@code stdin}.
94         * </p>
95         *
96         * @param debugMode
97         *            true, if the application is to run in debug mode, i.e. trace
98         *            messages will be printed
99         */
100        public void run(boolean debugMode) {
101                this.debugMode = debugMode;
102                CommandExecuter exec = CommandExecuter.getInstance();
103                while (true) {
104                        System.out.print("> ");
105                        String command = getCommand().trim();
106                        if (!command.equals("")) {
107                                exec.exec(command);
108                        }
109                }
110        }
111
112        /**
113         * <p>
114         * Reads a new command from {@code stdin}.
115         * </p>
116         *
117         * @return a string with a command
118         */
119        protected String getCommand() {
120                byte[] buffer = new byte[1024];
121                try {
122                        System.in.read(buffer);
123                } catch (IOException e) {
124
125                }
126                return new String(buffer);
127        }
128
129}
Note: See TracBrowser for help on using the repository browser.