1 /*
2 * db2sa: DB2 Syntax Assistant
3 * Copyright (C) Andres Gomez Casanova
4 *
5 * This file is part of db2sa.
6 *
7 * db2sa is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * db2sa is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with this library; if not, see <http://www.gnu.org/licenses/>.
19 *
20 * Contact:
21 * a n g o c a at y a h o o dot c o m
22 * Cra. 45 No 61 - 31, Bogota, Colombia.
23 *
24 * Author: $LastChangedBy: angoca $:
25 * Date: $LastChangedDate: 2009-07-08 19:56:43 +0200 (Wed, 08 Jul 2009) $:
26 * Revision: $LastChangedRevision: 357 $:
27 * URL: $HeadURL: https://db2sa.svn.sourceforge.net/svnroot/db2sa/branches/db2sa_beta/source-code/src/main/java/name/angoca/db2sa/cli/jline/JlineInterfaceController.java $:
28 */
29 package name.angoca.db2sa.cli.jline;
30
31 import name.angoca.db2sa.ExecutionState;
32 import name.angoca.db2sa.cli.AbstractInterfaceController;
33 import name.angoca.db2sa.cli.InputReader;
34 import name.angoca.db2sa.cli.OutputWriter;
35 import name.angoca.db2sa.cli.exceptions.InputReaderException;
36 import name.angoca.db2sa.cli.system.SystemOutputWriter;
37 import name.angoca.db2sa.core.InterfaceCore;
38 import name.angoca.db2sa.exceptions.AbstractDB2SAException;
39 import name.angoca.db2sa.messages.Messages;
40
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43
44 /**
45 * This is the interface controller that manage the read and the printer.<br/>
46 * <b>Control Version</b><br />
47 * <ul>
48 * <li>0.0.1 Class creation.</li>
49 * <li>0.0.2 Annotations.</li>
50 * <li>0.0.3 Execution state.</li>
51 * <li>0.0.4 Enum.</li>
52 * <li>0.0.5 Read string just once.</li>
53 * <li>0.0.6 Name of a state.</li>
54 * <li>1.0.0 Moved to version 1.</li>
55 * </ul>
56 *
57 * @author Andres Gomez Casanova <a
58 * href="mailto:a n g o c a at y a h o o dot c o m">(AngocA)</a>
59 * @version 1.0.0 2009-07-19
60 */
61 public class JlineInterfaceController extends AbstractInterfaceController {
62
63 /**
64 * Logger.
65 */
66 private static final Logger LOGGER = LoggerFactory
67 .getLogger(JlineInterfaceController.class);
68
69 /**
70 * Input processor.
71 */
72 private final InputReader m_input;
73 /**
74 * Screen printer.
75 */
76 private final OutputWriter m_output;
77
78 /**
79 * Constructor that creates a reader and a printer.
80 *
81 * @param prompt
82 * Prompt to show in each line of the console.@throws
83 * InputReaderException When there is a problem establishing the
84 * input or the output.
85 * @throws InputReaderException
86 * When there is a problem establishing the input or the output.
87 */
88 public JlineInterfaceController(final String/* ! */prompt)
89 throws InputReaderException {
90 super();
91 this.m_output = new SystemOutputWriter();
92 this.m_input = new JlineInputReader(prompt);
93 }
94
95 /**
96 * Start to read commands from the user and process them.
97 *
98 * @throws AbstractDB2SAException
99 * When there is a IO problem.
100 */
101 @Override
102 public final void start() throws AbstractDB2SAException {
103 String phrase = null;
104
105 // Shows a introductory help.
106 // TODO optional from configuration file
107 // TODO configure the assitant call key desde el archivo de
108 // configuración
109 this.m_output.writeLine(Messages.getString("JlineInterfaceController"//$NON-NLS-1$
110 + ".introduction")); //$NON-NLS-1$
111
112 // TODO Change the name of the constant unknown
113 ExecutionState execState = ExecutionState.UNKNOWN;
114
115 JlineInterfaceController.LOGGER.debug("User interaction start"); //$NON-NLS-1$
116
117 while (execState != ExecutionState.APPLICATION_EXIT) {
118 phrase = this.m_input.readString();
119 execState = InterfaceCore.executeCommand(phrase, this.m_output);
120 }
121 // TODO Cerrar todo y finalizar todo ya que es el fin del programa.
122 }
123 }