00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
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
00050
00051
00052
00053
00054
00055
00056
00057 public class ConsoleLauncher
00058 {
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
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
00166
00167
00168
00169
00170
00171
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
00196
00197
00198
00199
00200
00201
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
00301
00302
00303
00304
00305
00306
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("v", "version", false,
00318 "Displays version information."));
00319 group
00320 .addOption(new Option(
00321 "f",
00322 "file",
00323 true,
00324 "Use a given file as the source of commands instead of reading commands interactively."));
00325 options.addOptionGroup(group);
00326
00327
00328 String defaultIp = ControllerConstants.DEFAULT_IP;
00329 options
00330 .addOption(new Option(
00331 "i",
00332 "ip",
00333 true,
00334 "IP address of the host name where the JMX Server hosting the controller is running (the default is '"
00335 + defaultIp + "')."));
00336
00337
00338 options.addOption(new Option("p", "port", true,
00339 "JMX/RMI port number of (the default is "
00340 + JmxConstants.DEFAULT_JMX_RMI_PORT + ")."));
00341 options.addOption(new Option("u", "username", true,
00342 "Username for JMX connection."));
00343 options.addOption(new Option("s", "secret", true,
00344 "Password for JMX connection."));
00345
00346 options.addOption(new Option("d", "debug", false,
00347 "Show stack trace when error occurs."));
00348
00349 return options;
00350 }
00351
00352
00353
00354
00355
00356
00357 private static void printUsage(Options options)
00358 {
00359 String header = "Launchs the C-JDBC controller console."
00360 + System.getProperty("line.separator") + "Options:";
00361
00362 (new HelpFormatter()).printHelp(80, "console(.sh|.bat) [options]", header,
00363 options, "");
00364 }
00365
00366 }