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

Last change on this file since 14975 was 14974, checked in by davidb, 16 years ago

Changes to GLI to support export into Fedora. New utility called flisvn diff gems/MetadataSetManager.java

  • Property svn:keywords set to Author Date Id Revision
File size: 11.1 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 public boolean use_remote_greenstone = false;
40 public boolean new_set = false;
41 public boolean run_gsdl3 = false;
42
43 public String client_operating_system = null;
44 public String collect_directory_path = null;
45 public String filename = null;
46 public String gliserver_url_string = null;
47 public String gsdl_path = null;
48 public String gsdl3_path = null;
49 public String gsdl3_src_path = null;
50 public String library_url_string = null;
51 public String local_library_path = null;
52 public String perl_path = null;
53 public String site_name = null; // for GS3
54 public String servlet_path = null;
55 public String metadata_path = null;
56
57 protected FedoraInfo fedora_info = null;
58
59 public GetOpt(String[] args)
60 {
61 // Default dictionary. Only used for starting error messages.
62 Dictionary dictionary = new Dictionary(null, null);
63
64 fedora_info = new FedoraInfo();
65
66 // Parse arguments
67 int argument_index = 0;
68 String next_token = null;
69
70 while(argument_index < args.length || next_token != null) {
71 // 1. We start by attempting to parse an argument name. An argument
72 // must start with a '-', and should not contain spaces. If
73 // anything else is encountered it is ignored.
74
75 String argument_name = null;
76 if(next_token == null) {
77 next_token = args[argument_index];
78 argument_index++;
79 }
80
81 if(next_token.startsWith(StaticStrings.MINUS_CHARACTER)) {
82 // Trim second '-' just to be kind to Unixy-type people
83 if(next_token.startsWith(StaticStrings.MINUS_CHARACTER + StaticStrings.MINUS_CHARACTER)) {
84 argument_name = next_token.substring(1);
85 }
86 else {
87 argument_name = next_token;
88 }
89 }
90 next_token = null;
91 // 2. If we now have an argument name we continue by attempting
92 // to parse a value. A value is taken to be the sequence of
93 // space seperated Strings between the last argument name
94 // and up to but not including the next argument name. Of
95 // course an argument needn't have any value (ie -debug,
96 // -help), in which case value will be null.
97 if(argument_name != null) {
98 String argument_value = null;
99 StringBuffer argument_value_buffer = new StringBuffer("");
100 while(argument_index < args.length && next_token == null) {
101 next_token = args[argument_index];
102 argument_index++;
103 // If we just parsed an arbitary String then append it to value, followed by a single space
104 if(!next_token.startsWith(StaticStrings.MINUS_CHARACTER)) {
105 argument_value_buffer.append(next_token);
106 argument_value_buffer.append(StaticStrings.SPACE_CHARACTER);
107 next_token = null;
108 }
109 // If the argument token retrieved is an argument name,
110 // then leave it in next_token, which will cause the
111 // argument parsing process to move onto the next step.
112 }
113 // If a value now exists in argument buffer, retrieve
114 // it. Remove the last character as it will be an erroneous
115 // space.
116 if(argument_value_buffer.length() > 0) {
117 argument_value = argument_value_buffer.substring(0, argument_value_buffer.length() - 1);
118 }
119
120 // 3. We now have the argument name, and any associated
121 // value. We are ready to store the data in the
122 // appropriate variables.
123 DebugStream.println("Parsed Argument: name=" + argument_name + (argument_value != null ? (", value=" + argument_value) : ", no value"));
124 // 3a. First those arguments that have no associated value
125 if(argument_value == null) {
126 if(argument_name.equals(StaticStrings.HELP_ARGUMENT)) {
127 System.out.println(Dictionary.get("General.Usage"));
128 System.exit(0);
129 }
130 // Run GLI in debug mode. Produces debug log plus extra
131 // messages.
132 else if(argument_name.equals(StaticStrings.DEBUG_ARGUMENT)) {
133 debug = true;
134 }
135 // Run GLI with feedback enabled.
136 else if(argument_name.equals(StaticStrings.FEEDBACK_ARGUMENT)) {
137 feedback_enabled = true;
138 }
139 // Forces no loading on previous collection.
140 else if(argument_name.equals(StaticStrings.NO_LOAD_ARGUMENT)) {
141 no_load = true;
142 filename = null;
143 }
144 // Use a remote Greenstone rather than a local one
145 else if (argument_name.equals(StaticStrings.USE_REMOTE_GREENSTONE_ARGUMENT)) {
146 use_remote_greenstone = true;
147 //Use a remote Greenstone
148 }
149 else if (argument_name.equals(StaticStrings.GSDL3_ARGUMENT)){
150 //Use a remote Greenstone3
151 run_gsdl3=true;
152 }
153 else if (argument_name.equals(StaticStrings.NEW_METADATASET)) {
154 new_set = true;
155 }
156 }
157 // 3b. Now for those that do
158 else {
159 // Parse the path to the GSDL. Required argument.
160 if(argument_name.equals(StaticStrings.GSDL_ARGUMENT)) {
161 if(argument_value.endsWith(File.separator)) {
162 gsdl_path = argument_value;
163 }
164 else {
165 gsdl_path = argument_value + File.separator;
166 }
167 }
168 // GSDL3 path
169 if(argument_name.equals(StaticStrings.GSDL3_ARGUMENT)) {
170 if(argument_value.endsWith(File.separator)) {
171 gsdl3_path = argument_value;
172 }
173 else {
174 gsdl3_path = argument_value + File.separator;
175 }
176 }
177 // GSDL3 src path
178 if(argument_name.equals(StaticStrings.GSDL3_SRC_ARGUMENT)) {
179 if(argument_value.endsWith(File.separator)) {
180 gsdl3_src_path = argument_value;
181 }
182 else {
183 gsdl3_src_path = argument_value + File.separator;
184 }
185 }
186 // Client operating system
187 else if (argument_name.equals(StaticStrings.GSDLOS_ARGUMENT)) {
188 client_operating_system = argument_value;
189 }
190
191 else if (argument_name.equals(StaticStrings.SITE_ARGUMENT)) {
192 site_name = argument_value;
193 }
194 else if (argument_name.equals(StaticStrings.SERVLET_ARGUMENT)) {
195 servlet_path = argument_value;
196 }
197 // Specify a non-standard collect directory to use (for running one GLI in a network environment)
198 else if (argument_name.equals(StaticStrings.COLLECTDIR_ARGUMENT)) {
199 collect_directory_path = argument_value;
200 System.err.println("Non standard collect directory specified: " + collect_directory_path);
201 }
202 // Specify a collection to load initially. Could be used for file associations.
203 else if(argument_name.equals(StaticStrings.LOAD_ARGUMENT)) {
204 filename = argument_value;
205 no_load = false;
206 }
207 // Parse the file path of the local library server
208 else if (argument_name.equals(StaticStrings.LOCAL_LIBRARY_ARGUMENT)) {
209 local_library_path = argument_value;
210 }
211 // Manually specify the Greenstone library URL
212 else if (argument_name.equals(StaticStrings.LIBRARY_URL_ARGUMENT)) {
213 library_url_string = argument_value;
214 }
215 // Specify the URL to the gliserver CGI script for remote collection building
216 else if (argument_name.equals(StaticStrings.GLISERVER_URL_ARGUMENT)) {
217 gliserver_url_string = argument_value;
218 }
219 // Parse the path to PERL. If not provided it assumes
220 // perl should be availble on the PATH.
221 else if(argument_name.equals(StaticStrings.PERL_ARGUMENT)) {
222 perl_path = argument_value;
223 // Test whether this points to the Perl bin
224 // directory or the Perl executable itself.
225 File perl_file = new File(perl_path);
226 if(perl_file.isDirectory()) {
227 // If this is windows we create a child file
228 // perl.exe, otherwise we create perl
229 if(Utility.isWindows()) {
230 perl_file = new File(perl_file, Utility.PERL_EXECUTABLE_WINDOWS);
231 }
232 else {
233 perl_file = new File(perl_file, Utility.PERL_EXECUTABLE_UNIX);
234 }
235 // And store this new path.
236 perl_path = perl_file.getAbsolutePath();
237 perl_file = null;
238 }
239 // Otherwise it is fine as it is
240 }
241 else if(argument_name.equals(StaticStrings.METADATA_PATH)){
242 if (argument_value != null && !argument_value.equals("")) {
243 File metadata_file = new File(argument_value);
244 if (metadata_file.exists()) {
245 metadata_path = argument_value;
246 }
247 }
248 }
249
250 // Fedora home
251 if(argument_name.equals(StaticStrings.FEDORA_HOME)) {
252 if(argument_value.endsWith(File.separator)) {
253 fedora_info.setHome(argument_value);
254 }
255 else {
256 fedora_info.setHome(argument_value + File.separator);
257 }
258 }
259
260 // Fedora hostname
261 if(argument_name.equals(StaticStrings.FEDORA_HOSTNAME)) {
262 if(argument_value.endsWith(File.separator)) {
263 fedora_info.setHostname(argument_value);
264 }
265 else {
266 fedora_info.setHostname(argument_value + File.separator);
267 }
268 }
269 // Fedora port
270 if(argument_name.equals(StaticStrings.FEDORA_PORT)) {
271 if(argument_value.endsWith(File.separator)) {
272 fedora_info.setPort(argument_value);
273 }
274 else {
275 fedora_info.setPort(argument_value + File.separator);
276 }
277 }
278 // Fedora username
279 if(argument_name.equals(StaticStrings.FEDORA_USERNAME)) {
280 if(argument_value.endsWith(File.separator)) {
281 fedora_info.setUsername(argument_value);
282 }
283 else {
284 fedora_info.setUsername(argument_value + File.separator);
285 }
286 }
287 // Fedora password
288 if(argument_name.equals(StaticStrings.FEDORA_PASSWORD)) {
289 if(argument_value.endsWith(File.separator)) {
290 fedora_info.setPassword(argument_value);
291 }
292 else {
293 fedora_info.setPassword(argument_value + File.separator);
294 }
295 }
296 // Fedora protocol, e.g. http or https
297 if(argument_name.equals(StaticStrings.FEDORA_PROTOCOL)) {
298 if(argument_value.endsWith(File.separator)) {
299 fedora_info.setProtocol(argument_value);
300 }
301 else {
302 fedora_info.setProtocol(argument_value + File.separator);
303 }
304 }
305
306
307
308
309
310 }
311 }
312 // Argument name was null, nothing to be done.
313 }
314 next_token = null;
315 // Arguments all parsed.
316 }
317}
Note: See TracBrowser for help on using the repository browser.