KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > archive > crawler > CommandLineParser


1 /* CommandLineParser
2  *
3  * Created on Feb 2, 2004
4  *
5  * Copyright (C) 2004 Internet Archive.
6  *
7  * This file is part of the Heritrix web crawler (crawler.archive.org).
8  *
9  * Heritrix is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU Lesser Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * any later version.
13  *
14  * Heritrix is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU Lesser Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser Public License
20  * along with Heritrix; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  */

23 package org.archive.crawler;
24
25 import java.io.PrintWriter JavaDoc;
26 import java.util.List JavaDoc;
27
28 import org.apache.commons.cli.CommandLine;
29 import org.apache.commons.cli.HelpFormatter;
30 import org.apache.commons.cli.Option;
31 import org.apache.commons.cli.Options;
32 import org.apache.commons.cli.ParseException;
33 import org.apache.commons.cli.PosixParser;
34 import org.apache.commons.cli.UnrecognizedOptionException;
35
36
37 /**
38  * Print Heritrix command-line usage message.
39  *
40  * @author stack
41  * @version $Id: CommandLineParser.java,v 1.13 2006/08/29 00:47:56 stack-sf Exp $
42  */

43 public class CommandLineParser {
44     private static final String JavaDoc USAGE = "Usage: ";
45     private static final String JavaDoc NAME = "heritrix";
46     private Options options = null;
47     private CommandLine commandLine = null;
48     private PrintWriter JavaDoc out = null;
49     private String JavaDoc version = null;
50
51     /**
52      * Block default construction.
53      *
54      */

55     private CommandLineParser() {
56         super();
57     }
58
59     /**
60      * Constructor.
61      *
62      * @param args Command-line arguments to process.
63      * @param out PrintStream to write on.
64      * @param version Heritrix version
65      *
66      * @throws ParseException Failied parse of command line.
67      */

68     public CommandLineParser(String JavaDoc [] args, PrintWriter JavaDoc out, String JavaDoc version)
69     throws ParseException {
70         super();
71
72         this.out = out;
73         this.version = version;
74
75         this.options = new Options();
76         this.options.addOption(new Option("h","help", false,
77             "Prints this message and exits."));
78         this.options.addOption(new Option("b", "bind", true,
79             "Comma-separated list of IP addresses or hostnames for web server "
80             + "to listen on. Set to / to listen on all available\nnetwork "
81             + "interfaces. Default is 127.0.0.1."));
82         this.options.addOption(new Option("p","port", true,
83             "Port to run web user interface on. Default: 8080."));
84         this.options.addOption(new Option("a", "admin", true,
85             "Login and password for web user interface administration. " +
86             "Required (unless passed via the 'heritrix.cmdline.admin'\n" +
87             "system property). Pass value of the form 'LOGIN:PASSWORD'."));
88         this.options.addOption(new Option("r", "run", false,
89             "Put heritrix into run mode. If ORDER.XML begin crawl."));
90         this.options.addOption(new Option("n", "nowui", false,
91             "Put heritrix into run mode and begin crawl using ORDER.XML." +
92             " Do not put up web user interface."));
93         Option option = new Option("s", "selftest", true,
94             "Run the integrated selftests. Pass test name to test it only" +
95             " (Case sensitive: E.g. pass 'Charset' to run charset selftest).");
96         option.setOptionalArg(true);
97         this.options.addOption(option);
98
99         PosixParser parser = new PosixParser();
100         try {
101             this.commandLine = parser.parse(this.options, args, false);
102         } catch (UnrecognizedOptionException e) {
103             usage(e.getMessage(), 1);
104         }
105     }
106
107     /**
108      * Print usage then exit.
109      */

110     public void usage() {
111         usage(0);
112     }
113
114     /**
115      * Print usage then exit.
116      *
117      * @param exitCode
118      */

119     public void usage(int exitCode) {
120         usage(null, exitCode);
121     }
122
123     /**
124      * Print message then usage then exit.
125      *
126      * The JVM exits inside in this method.
127      *
128      * @param message Message to print before we do usage.
129      * @param exitCode Exit code to use in call to System.exit.
130      */

131     public void usage(String JavaDoc message, int exitCode) {
132         outputAndExit(message, true, exitCode);
133     }
134
135     /**
136      * Print message and then exit.
137      *
138      * The JVM exits inside in this method.
139      *
140      * @param message Message to print before we do usage.
141      * @param exitCode Exit code to use in call to System.exit.
142      */

143     public void message(String JavaDoc message, int exitCode) {
144         outputAndExit(message, false, exitCode);
145     }
146
147     /**
148      * Print out optional message an optional usage and then exit.
149      *
150      * Private utility method. JVM exits from inside in this method.
151      *
152      * @param message Message to print before we do usage.
153      * @param doUsage True if we are to print out the usage message.
154      * @param exitCode Exit code to use in call to System.exit.
155      */

156     private void outputAndExit(String JavaDoc message, boolean doUsage, int exitCode) {
157         if (message != null) {
158             this.out.println(message);
159         }
160
161         if (doUsage) {
162             HeritrixHelpFormatter formatter =
163                 new HeritrixHelpFormatter();
164             formatter.printHelp(this.out, 80, NAME, "Options:", this.options,
165                 1, 2, "Arguments:", false);
166             this.out.println(" ORDER.XML Crawl order to run.\n");
167         }
168
169         // Close printwriter so stream gets flushed.
170
this.out.close();
171         System.exit(exitCode);
172     }
173
174     /**
175      * @return Options passed on the command line.
176      */

177     public Option [] getCommandLineOptions() {
178         return this.commandLine.getOptions();
179     }
180
181     /**
182      * @return Arguments passed on the command line.
183      */

184     public List JavaDoc getCommandLineArguments() {
185         return this.commandLine.getArgList();
186     }
187
188     /**
189      * @return Command line.
190      */

191     public CommandLine getCommandLine() {
192         return this.commandLine;
193     }
194
195     /**
196      * @return Returns the version.
197      */

198     public String JavaDoc getVersion() {
199         return this.version;
200     }
201     
202     /**
203      * Override so can customize usage output.
204      *
205      * @author stack
206      * @version $Id: CommandLineParser.java,v 1.13 2006/08/29 00:47:56 stack-sf Exp $
207      */

208     public class HeritrixHelpFormatter
209     extends HelpFormatter {
210         public HeritrixHelpFormatter() {
211             super();
212         }
213
214         public void printUsage(PrintWriter JavaDoc pw, int width,
215                 String JavaDoc cmdLineSyntax) {
216             out.println(USAGE + NAME + " --help");
217             out.println(USAGE + NAME + " --nowui ORDER.XML");
218             out.println(USAGE + NAME + " [--port=#]" +
219                 " [--run] [--bind=IP,IP...] " +
220                 "--admin=LOGIN:PASSWORD \\\n\t[ORDER.XML]");
221             out.println(USAGE + NAME + " [--port=#] --selftest[=TESTNAME]");
222             out.println("Version: " + getVersion());
223         }
224
225         public void printUsage(PrintWriter JavaDoc pw, int width,
226             String JavaDoc app, Options options) {
227             this.printUsage(pw, width, app);
228         }
229     }
230 }
Popular Tags