00001
00025
package org.objectweb.cjdbc.console.text;
00026
00027
import java.io.File;
00028
import java.io.FileInputStream;
00029
import java.io.FileNotFoundException;
00030
import java.net.InetAddress;
00031
import java.net.UnknownHostException;
00032
import java.util.Properties;
00033
00034
import javax.swing.UIManager;
00035
00036
import org.apache.commons.cli.CommandLine;
00037
import org.apache.commons.cli.CommandLineParser;
00038
import org.apache.commons.cli.GnuParser;
00039
import org.apache.commons.cli.HelpFormatter;
00040
import org.apache.commons.cli.Option;
00041
import org.apache.commons.cli.OptionGroup;
00042
import org.apache.commons.cli.Options;
00043
import org.apache.commons.cli.ParseException;
00044
import org.objectweb.cjdbc.common.jmx.JmxConstants;
00045
import org.objectweb.cjdbc.common.util.Constants;
00046
import org.objectweb.cjdbc.console.gui.CjdbcGui;
00047
import org.objectweb.cjdbc.console.jmx.RmiJmxClient;
00048
import org.objectweb.cjdbc.controller.core.ControllerConstants;
00049
00057 public class ConsoleLauncher
00058 {
00059
00060
00062
00063
00064
00091 public static void main(String args[])
throws Exception
00092 {
00093
00094 Options options =
createOptions();
00095
00096
00097 CommandLineParser parser =
new GnuParser();
00098 CommandLine commandLine = null;
00099
try
00100 {
00101 commandLine = parser.parse(options, args);
00102 }
00103
catch (ParseException e)
00104 {
00105 System.err.println(
"Syntax error (" + e +
")");
00106
printUsage(options);
00107 System.exit(1);
00108 }
00109
00110
00111
int n = commandLine.getArgs().length;
00112
for (
int i = 0; i < n; i++)
00113 {
00114 System.err.println(
"Syntax error (unrecognized option: "
00115 + commandLine.getArgs()[i] +
")");
00116
printUsage(options);
00117 System.exit(1);
00118 }
00119
00120
00121
if (commandLine.hasOption(
'h'))
00122 {
00123
if (commandLine.getOptions().length > 1)
00124 System.err.println(
"Syntax error");
00125
00126
printUsage(options);
00127 System.exit(1);
00128 }
00129
00130
00131
if (commandLine.hasOption(
'v'))
00132 {
00133
if (commandLine.getOptions().length > 1)
00134 {
00135 System.err.println(
"Syntax error");
00136
printUsage(options);
00137 }
00138
else
00139 System.out.println(
"C-JDBC controller console version "
00140 +
Constants.VERSION);
00141
00142 System.exit(1);
00143 }
00144
00145
00146
if (commandLine.hasOption(
't'))
00147 {
00148
startTextConsole(commandLine);
00149 }
00150
else
00151 {
00152
try
00153 {
00154
startGuiConsole(commandLine);
00155 }
00156
catch (Throwable t)
00157 {
00158 System.out
00159 .println(
"Cannot initiate graphic mode. Loading text console instead.");
00160
startTextConsole(commandLine);
00161 }
00162 }
00163
00164 }
00165
00172 public static void startGuiConsole(CommandLine commandLine)
throws Exception
00173 {
00174
00175
00176 String system = System.getProperty(
"os.name");
00177
if (system.indexOf(
"Mac OS") != -1)
00178 {
00179
try
00180 {
00181 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
00182 }
00183
catch (Exception e)
00184 {
00185 }
00186 }
00187
00188
00189 Properties pi = System.getProperties();
00190 pi.put(
"file.encoding",
"UTF-8");
00191
00192 System.setProperties(pi);
00193
new CjdbcGui();
00194 }
00195
00202 public static void startTextConsole(CommandLine commandLine)
throws Exception
00203 {
00204
00205 String ip;
00206
try
00207 {
00208 ip = InetAddress.getLocalHost().getHostName();
00209 }
00210
catch (UnknownHostException e1)
00211 {
00212 ip =
"127.0.0.1";
00213 }
00214
if (commandLine.hasOption(
'i'))
00215 {
00216 String tmp = commandLine.getOptionValue(
'i');
00217
if (tmp != null)
00218 {
00219 ip = tmp;
00220 }
00221 }
00222
00223
00224
int port;
00225
if (commandLine.hasOption(
'p'))
00226 {
00227 String s = commandLine.getOptionValue(
'p');
00228
if (s == null)
00229 {
00230 port =
JmxConstants.DEFAULT_JMX_RMI_PORT;
00231 }
00232
else
00233
try
00234 {
00235 port = Integer.parseInt(s);
00236 System.out.println(
"Using specified " + port +
" port number");
00237 }
00238
catch (NumberFormatException e)
00239 {
00240 System.out.println(
"Bad port number (" + e +
"), using default "
00241 +
JmxConstants.DEFAULT_JMX_RMI_PORT +
" port number");
00242 port =
JmxConstants.DEFAULT_JMX_RMI_PORT;
00243 }
00244 }
00245
else
00246 {
00247 port =
JmxConstants.DEFAULT_JMX_RMI_PORT;
00248 }
00249
00250
RmiJmxClient jmxClient = null;
00251
if (commandLine.hasOption(
'u') && commandLine.hasOption(
's'))
00252 {
00253 String username = commandLine.getOptionValue(
'u');
00254 String password = commandLine.getOptionValue(
's');
00255 jmxClient =
new RmiJmxClient(
"" + port, ip, username, password);
00256 }
00257
else
00258 {
00259
try
00260 {
00261 jmxClient =
new RmiJmxClient(
"" + port, ip, null);
00262 }
00263
catch (Exception e)
00264 {
00265 System.out.println(
"Cannot connect to the jmx server");
00266 System.exit(1);
00267 }
00268 }
00269
00270
00271 System.out.println(
"Launching the C-JDBC controller console");
00272
00273
Console console;
00274
if (commandLine.hasOption(
'f'))
00275 {
00276 File file =
new File(commandLine.getOptionValue(
'f'));
00277 FileInputStream in = null;
00278
try
00279 {
00280 in =
new FileInputStream(file);
00281 }
00282
catch (FileNotFoundException e)
00283 {
00284 System.err.println(
"Failed to open file '" + file.toString() +
"' ("
00285 + e +
")");
00286 System.exit(1);
00287 }
00288 console =
new Console(jmxClient, in,
false);
00289 console.
setDebug(commandLine.hasOption(
'd'));
00290 console.
handlePrompt();
00291 System.exit(0);
00292 }
00293
else
00294 {
00295 console =
new Console(jmxClient, System.in,
true);
00296 console.
setDebug(commandLine.hasOption(
'd'));
00297 console.
handlePrompt();
00298 }
00299 }
00300
00307 private static Options
createOptions()
00308 {
00309 Options options =
new Options();
00310 OptionGroup group =
new OptionGroup();
00311
00312
00313
00314 group.addOption(
new Option(
"h",
"help",
false,
00315
"Displays usage information."));
00316 group.addOption(
new Option(
"t",
"text",
false,
"Start text console."));
00317 group.addOption(
new Option(
"d",
"debug",
false,
00318
"Show stack trace when error occurs."));
00319 group.addOption(
new Option(
"v",
"version",
false,
00320
"Displays version information."));
00321 group
00322 .addOption(
new Option(
00323
"f",
00324
"file",
00325
true,
00326
"Use a given file as the source of commands instead of reading commands interactively."));
00327 options.addOptionGroup(group);
00328
00329
00330 String defaultIp =
ControllerConstants.DEFAULT_IP;
00331 options
00332 .addOption(
new Option(
00333
"i",
00334
"ip",
00335
true,
00336
"IP address of the host name where the JMX Server hosting the controller is running (the default is '"
00337 + defaultIp +
"')."));
00338
00339
00340 options.addOption(
new Option(
"p",
"port",
true,
00341
"JMX/RMI port number of (the default is "
00342 +
JmxConstants.DEFAULT_JMX_RMI_PORT +
")."));
00343 options.addOption(
new Option(
"u",
"username",
true,
00344
"Username for JMX connection."));
00345 options.addOption(
new Option(
"s",
"secret",
true,
00346
"Password for JMX connection."));
00347
00348
return options;
00349 }
00350
00356 private static void printUsage(Options options)
00357 {
00358 String header =
"Launchs the C-JDBC controller console."
00359 + System.getProperty(
"line.separator") +
"Options:";
00360
00361 (
new HelpFormatter()).printHelp(80,
"console(.sh|.bat) [options]", header,
00362 options,
"");
00363 }
00364
00365 }