source: trunk/gli/src/org/greenstone/gatherer/GetOpt.java@ 8627

Last change on this file since 8627 was 8626, checked in by mdewsnip, 20 years ago

Removed the now-redundant "-mirror" option.

  • Property svn:keywords set to Author Date Id Revision
File size: 8.7 KB
Line 
1/**
2 *#########################################################################
3 *
4 * A component of the Gatherer application, part of the Greenstone digital
5 * library suite from the New Zealand Digital Library Project at the
6 * University of Waikato, New Zealand.
7 *
8 * Author: John Thompson and David Bainbridge,
9 * Greenstone Digital Library, University of Waikato
10 *
11 * Copyright (C) 1999 New Zealand Digital Library Project
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 *########################################################################
27 */
28package org.greenstone.gatherer;
29
30import java.io.*;
31import org.greenstone.gatherer.util.StaticStrings;
32import org.greenstone.gatherer.util.Utility;
33
34public class GetOpt
35{
36 public boolean debug = false;
37 public boolean feedback_enabled = false;
38 public boolean no_load = false;
39
40 public String extra = null;
41 public String filename = null;
42 public String gsdl_path = null;
43 public String gsdl3_path = null;
44 public String library_url = null;
45 public String local_library_path = null;
46 public String perl_path = null;
47 public String site_name = null; // for GS3
48 public String servlet_path = null;
49 public String wget_path = null;
50 public String wget_version_str = StaticStrings.NO_WGET_STR;
51
52 public GetOpt(String[] args)
53 {
54 // Default dictionary. Only used for starting error messages.
55 Dictionary dictionary = new Dictionary(null, null);
56
57 // Parse arguments
58 int argument_index = 0;
59 String next_token = null;
60
61 while(argument_index < args.length || next_token != null) {
62 // 1. We start by attempting to parse an argument name. An argument
63 // must start with a '-', and should not contain spaces. If
64 // anything else is encountered it is ignored.
65
66 String argument_name = null;
67 if(next_token == null) {
68 next_token = args[argument_index];
69 argument_index++;
70 }
71
72 if(next_token.startsWith(StaticStrings.MINUS_CHARACTER)) {
73 // Trim second '-' just to be kind to Unixy-type people
74 if(next_token.startsWith(StaticStrings.MINUS_CHARACTER + StaticStrings.MINUS_CHARACTER)) {
75 argument_name = next_token.substring(1);
76 }
77 else {
78 argument_name = next_token;
79 }
80 }
81 next_token = null;
82 // 2. If we now have an argument name we continue by attempting
83 // to parse a value. A value is taken to be the sequence of
84 // space seperated Strings between the last argument name
85 // and up to but not including the next argument name. Of
86 // course an argument needn't have any value (ie -debug,
87 // -help), in which case value will be null.
88 if(argument_name != null) {
89 String argument_value = null;
90 StringBuffer argument_value_buffer = new StringBuffer("");
91 while(argument_index < args.length && next_token == null) {
92 next_token = args[argument_index];
93 argument_index++;
94 // If we just parsed an arbitary String then append it to value, followed by a single space
95 if(!next_token.startsWith(StaticStrings.MINUS_CHARACTER)) {
96 argument_value_buffer.append(next_token);
97 argument_value_buffer.append(StaticStrings.SPACE_CHARACTER);
98 next_token = null;
99 }
100 // If the argument token retrieved is an argument name,
101 // then leave it in next_token, which will cause the
102 // argument parsing process to move onto the next step.
103 }
104 // If a value now exists in argument buffer, retrieve
105 // it. Remove the last character as it will be an erroneous
106 // space.
107 if(argument_value_buffer.length() > 0) {
108 argument_value = argument_value_buffer.substring(0, argument_value_buffer.length() - 1);
109 }
110
111 // 3. We now have the argument name, and any associated
112 // value. We are ready to store the data in the
113 // appropriate variables.
114 DebugStream.println("Parsed Argument: name=" + argument_name + (argument_value != null ? (", value=" + argument_value) : ", no value"));
115 // 3a. First those arguments that have no associated value
116 if(argument_value == null) {
117 if(argument_name.equals(StaticStrings.HELP_ARGUMENT)) {
118 System.out.println(Dictionary.get("General.Usage"));
119 System.exit(0);
120 }
121 // Run GLI in debug mode. Produces debug log plus extra
122 // messages.
123 else if(argument_name.equals(StaticStrings.DEBUG_ARGUMENT)) {
124 debug = true;
125 }
126 // Run GLI with feedback enabled.
127 else if(argument_name.equals(StaticStrings.FEEDBACK_ARGUMENT)) {
128 feedback_enabled = true;
129 }
130 // Forces no loading on previous collection.
131 else if(argument_name.equals(StaticStrings.NO_LOAD_ARGUMENT)) {
132 no_load = true;
133 filename = null;
134 }
135 /* I've got a sneak suspicion Aqua look and feel is not free domain
136 // Specify the use of Greenstone LAF.
137 else if(argument_name.equals(StaticStrings.SKIN_ARGUMENT)) {
138 // SkinLF
139 try {
140 SkinLookAndFeel.setSkin(SkinLookAndFeel.loadThemePackDefinition(SkinUtils.toURL(new File(SKIN_DEFINITION_FILE))));
141 SkinLookAndFeel.enable();
142 }
143 catch (Exception error) {
144 ///ystem.err.println("Error: " + error);
145 error.printStackTrace();
146 }
147 }
148 */
149 }
150 // 3b. Now for those that do
151 else {
152 // Parse the path to the GSDL. Required argument.
153 if(argument_name.equals(StaticStrings.GSDL_ARGUMENT)) {
154 if(argument_value.endsWith(File.separator)) {
155 gsdl_path = argument_value;
156 }
157 else {
158 gsdl_path = argument_value + File.separator;
159 }
160 }
161 // GSDL3 path
162 if(argument_name.equals(StaticStrings.GSDL3_ARGUMENT)) {
163 if(argument_value.endsWith(File.separator)) {
164 gsdl3_path = argument_value;
165 }
166 else {
167 gsdl3_path = argument_value + File.separator;
168 }
169 }
170 else if (argument_name.equals(StaticStrings.SITE_ARGUMENT)) {
171 site_name = argument_value;
172 }
173 else if (argument_name.equals(StaticStrings.SERVLET_ARGUMENT)) {
174 servlet_path = argument_value;
175 }
176 // Specify a collection to load initially. Could be used for file associations.
177 else if(argument_name.equals(StaticStrings.LOAD_ARGUMENT)) {
178 filename = argument_value;
179 no_load = false;
180 }
181 // Parse the file path of the local library server
182 else if (argument_name.equals(StaticStrings.LOCAL_LIBRARY_ARGUMENT)) {
183 local_library_path = argument_value;
184 }
185 // Manually specify the Greenstone library URL
186 else if (argument_name.equals(StaticStrings.LIBRARY_URL_ARGUMENT)) {
187 library_url = argument_value;
188 }
189 // Parse the path to PERL. If not provided its assumes
190 // perl should be availble on the PATH.
191 else if(argument_name.equals(StaticStrings.PERL_ARGUMENT)) {
192 perl_path = argument_value;
193 // Test whether this points to the Perl bin
194 // directory or the Perl executable itself.
195 File perl_file = new File(perl_path);
196 if(perl_file.isDirectory()) {
197 // If this is windows we create a child file
198 // perl.exe, otherwise we create perl
199 if(Utility.isWindows()) {
200 perl_file = new File(perl_file, Utility.PERL_EXECUTABLE_WINDOWS);
201 }
202 else {
203 perl_file = new File(perl_file, Utility.PERL_EXECUTABLE_UNIX);
204 }
205 // And store this new path.
206 perl_path = perl_file.getAbsolutePath();
207 perl_file = null;
208 }
209 // Otherwise its fine as it is
210 }
211 // Test for the presence of a WGet version. This is
212 // only useful if the user has enabled mirroring. Note
213 // that mirroring can be enabled by running the GLI
214 // with -mirror, editing the config.xml for GLI, or
215 // through a new option on the connections page of the
216 // preferences.
217 else if(argument_name.equals(StaticStrings.WGET_ARGUMENT)) {
218 if(argument_value.startsWith(StaticStrings.WGET_STR)) {
219 wget_version_str = StaticStrings.WGET_STR;
220 wget_path = argument_value.substring(StaticStrings.WGET_STR.length());
221 }
222 else if(argument_value.startsWith(StaticStrings.WGET_OLD_STR)) {
223 wget_version_str = StaticStrings.WGET_OLD_STR;
224 wget_path = argument_value.substring(StaticStrings.WGET_OLD_STR.length());
225 }
226 }
227 }
228 }
229 // Argument name was null, nothing to be done.
230 }
231 next_token = null;
232 // Arguments all parsed.
233 }
234}
Note: See TracBrowser for help on using the repository browser.