| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| package org.apache.axis2.util; |
| |
| /** |
| * General purpose command line options parser. |
| * If this is used outside of Axis just remove the Axis specific sections. |
| */ |
| |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| |
| import java.net.MalformedURLException; |
| import java.util.ArrayList; |
| import java.util.Vector; |
| |
| public class OptionsParser { |
| private static final Log log = LogFactory.getLog(OptionsParser.class); |
| String args[] = null; |
| Vector usedArgs = null; |
| |
| /** |
| * Constructor - just pass in the <b>args</b> from the command line. |
| */ |
| public OptionsParser(String _args[]) throws MalformedURLException { |
| if (_args == null) { |
| _args = new String[]{}; |
| } |
| |
| args = _args; |
| usedArgs = null; |
| getUser(); |
| getPassword(); |
| } |
| |
| public String getPassword() { |
| return (isValueSet('w')); |
| } |
| |
| /** |
| * This returns an array of unused args - these are the non-option |
| * args from the command line. |
| */ |
| public String[] getRemainingArgs() { |
| ArrayList al = null; |
| int loop; |
| |
| for (loop = 0; loop < args.length; loop++) { |
| if ((args[loop] == null) || (args[loop].length() == 0)) { |
| continue; |
| } |
| |
| if (args[loop].charAt(0) == '-') { |
| continue; |
| } |
| |
| if (al == null) { |
| al = new ArrayList(); |
| } |
| |
| al.add(args[loop]); |
| } |
| |
| if (al == null) { |
| return (null); |
| } |
| |
| String a[] = new String[al.size()]; |
| |
| for (loop = 0; loop < al.size(); loop++) { |
| a[loop] = (String) al.get(loop); |
| } |
| |
| return (a); |
| } |
| |
| /** |
| * This just returns a string with the unprocessed flags - mainly |
| * for error reporting - so you can report the unknown flags. |
| */ |
| public String getRemainingFlags() { |
| StringBuffer sb = null; |
| int loop; |
| |
| for (loop = 0; loop < args.length; loop++) { |
| if ((args[loop] == null) || (args[loop].length() == 0)) { |
| continue; |
| } |
| |
| if (args[loop].charAt(0) != '-') { |
| continue; |
| } |
| |
| if (sb == null) { |
| sb = new StringBuffer(); |
| } |
| |
| sb.append(args[loop].substring(1)); |
| } |
| |
| return ((sb == null) |
| ? null |
| : sb.toString()); |
| } |
| |
| public String getUser() { |
| return (isValueSet('u')); |
| } |
| |
| /** |
| * Returns an int specifying the number of times that the flag was |
| * specified on the command line. Once this flag is looked for you |
| * must save the result because if you call it again for the same |
| * flag you'll get zero. |
| */ |
| public int isFlagSet(char optChar) { |
| int value = 0; |
| int loop; |
| int i; |
| |
| for (loop = 0; (usedArgs != null) && (loop < usedArgs.size()); loop++) { |
| String arg = (String) usedArgs.elementAt(loop); |
| |
| if (arg.charAt(0) != '-') { |
| continue; |
| } |
| |
| for (i = 0; i < arg.length(); i++) { |
| if (arg.charAt(i) == optChar) { |
| value++; |
| } |
| } |
| } |
| |
| for (loop = 0; loop < args.length; loop++) { |
| if ((args[loop] == null) || (args[loop].length() == 0)) { |
| continue; |
| } |
| |
| if (args[loop].charAt(0) != '-') { |
| continue; |
| } |
| |
| while ((args[loop] != null) && (i = args[loop].indexOf(optChar)) != -1) { |
| args[loop] = args[loop].substring(0, i) + args[loop].substring(i + 1); |
| |
| if (args[loop].length() == 1) { |
| args[loop] = null; |
| } |
| |
| value++; |
| |
| if (usedArgs == null) { |
| usedArgs = new Vector(); |
| } |
| |
| usedArgs.add("-" + optChar); |
| } |
| } |
| |
| return (value); |
| } |
| |
| /** |
| * Returns a string (or null) specifying the value for the passed |
| * option. If the option isn't there then null is returned. The |
| * option's value can be specified one of two ways: |
| * -x value |
| * -xvalue |
| * Note that: -ax value |
| * is not value (meaning flag 'a' followed by option 'x'. |
| * Options with values must be the first char after the '-'. |
| * If the option is specified more than once then the last one wins. |
| */ |
| public String isValueSet(char optChar) { |
| String value = null; |
| int loop; |
| int i; |
| |
| for (loop = 0; (usedArgs != null) && (loop < usedArgs.size()); loop++) { |
| String arg = (String) usedArgs.elementAt(loop); |
| |
| if ((arg.charAt(0) != '-') || (arg.charAt(1) != optChar)) { |
| continue; |
| } |
| |
| value = arg.substring(2); |
| |
| if (loop + 1 < usedArgs.size()) { |
| value = (String) usedArgs.elementAt(++loop); |
| } |
| } |
| |
| for (loop = 0; loop < args.length; loop++) { |
| if ((args[loop] == null) || (args[loop].length() == 0)) { |
| continue; |
| } |
| |
| if (args[loop].charAt(0) != '-') { |
| continue; |
| } |
| |
| i = args[loop].indexOf(optChar); |
| |
| if (i != 1) { |
| continue; |
| } |
| |
| if (i != args[loop].length() - 1) { |
| |
| // Not at end of arg, so use rest of arg as value |
| value = args[loop].substring(i + 1); |
| args[loop] = args[loop].substring(0, i); |
| } else { |
| |
| // Remove the char from the current arg |
| args[loop] = args[loop].substring(0, i); |
| |
| // Nothing after char so use next arg |
| if ((loop + 1 < args.length) && (args[loop + 1] != null)) { |
| |
| // Next arg is there and non-null |
| if (args[loop + 1].charAt(0) != '-') { |
| value = args[loop + 1]; |
| args[loop + 1] = null; |
| } |
| } else { |
| |
| // Next is null or not there - do nothing |
| // value = null ; |
| } |
| } |
| |
| if (args[loop].length() == 1) { |
| args[loop] = null; |
| } |
| |
| // For now, keep looping to get that last on there |
| // break ; |
| } |
| |
| if (value != null) { |
| if (usedArgs == null) { |
| usedArgs = new Vector(); |
| } |
| |
| usedArgs.add("-" + optChar); |
| |
| if (value.length() > 0) { |
| usedArgs.add(value); |
| } |
| } |
| |
| return (value); |
| } |
| } |