001: /**
002: * com.mckoi.util.CommandLine 03 Aug 2000
003: *
004: * Mckoi SQL Database ( http://www.mckoi.com/database )
005: * Copyright (C) 2000, 2001, 2002 Diehl and Associates, Inc.
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License
009: * Version 2 as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License Version 2 for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * Version 2 along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
019: *
020: * Change Log:
021: *
022: *
023: */package com.mckoi.util;
024:
025: import java.util.Vector;
026: import java.util.StringTokenizer;
027:
028: /**
029: * Used to parse a command-line.
030: *
031: * @author Tobias Downer
032: */
033:
034: public class CommandLine {
035:
036: /**
037: * The command line arguments.
038: */
039: private String[] args;
040:
041: /**
042: * Constructs the command line parser from the String[] array passed as the
043: * argument to the application.
044: */
045: public CommandLine(String[] args) {
046: if (args == null) {
047: args = new String[0];
048: }
049: this .args = args;
050: }
051:
052: /**
053: * Returns true if the switch is in the command line.
054: * eg. command_line.containsSwitch("--help");
055: */
056: public boolean containsSwitch(String switch_str) {
057: for (int i = 0; i < args.length; ++i) {
058: if (args[i].equals(switch_str)) {
059: return true;
060: }
061: }
062: return false;
063: }
064:
065: /**
066: * Given a comma deliminated list, this scans for one of the switches in the
067: * list. eg. command_line.containsSwitchFrom("--help,-help,-h");
068: */
069: public boolean containsSwitchFrom(String switch_str) {
070: StringTokenizer tok = new StringTokenizer(switch_str, ",");
071: while (tok.hasMoreElements()) {
072: String elem = tok.nextElement().toString();
073: if (containsSwitch(elem)) {
074: return true;
075: }
076: }
077: return false;
078: }
079:
080: /**
081: * Returns true if the command line contains a switch starting with the
082: * given string. eg. command_line.containsSwitchStart("-he"); will match
083: * "-hello", "-help", "-her", etc
084: */
085: public boolean containsSwitchStart(String switch_str) {
086: for (int i = 0; i < args.length; ++i) {
087: if (args[i].startsWith(switch_str)) {
088: return true;
089: }
090: }
091: return false;
092: }
093:
094: /**
095: * Returns a list of all switches on the command line that start with the
096: * given string. eg. command_line.allSwitchesStartingWith("-D"); will
097: * return matches for switches "-Dname=toby", "-Dog", "-Dvalue=over", etc.
098: */
099: public String[] allSwitchesStartingWith(String switch_str) {
100: Vector list = new Vector();
101: for (int i = 0; i < args.length; ++i) {
102: if (args[i].startsWith(switch_str)) {
103: list.addElement(args[i]);
104: }
105: }
106: return (String[]) list.toArray(new String[list.size()]);
107: }
108:
109: /**
110: * Returns the contents of a switch variable if the switch is found on the
111: * command line. A switch variable is of the form '-[switch] [variable]'.
112: * eg. 'command.exe -url "http://www.mckoi.com/database/"'.
113: * <p>
114: * Returns 'null' if the argument was not found.
115: */
116: public String switchArgument(String switch_str) {
117: for (int i = 0; i < args.length - 1; ++i) {
118: if (args[i].equals(switch_str)) {
119: return args[i + 1];
120: }
121: }
122: return null;
123: }
124:
125: /**
126: * Returns the contents of a switch variable if the switch is found on the
127: * command line. A switch variable is of the form '-[switch] [variable]'.
128: * eg. 'command.exe -url "http://www.mckoi.com/database/"'.
129: * <p>
130: * Returns def if the argument was not found.
131: */
132: public String switchArgument(String switch_str, String def) {
133: String arg = switchArgument(switch_str);
134: if (arg == null) {
135: return def;
136: }
137: return arg;
138: }
139:
140: /**
141: * Returns the contents of a set of arguments found after a switch on the
142: * command line. For example, switchArguments("-create", 3) would try and
143: * find the '-create' switch and return the first 3 arguments after it if
144: * it can.
145: * <p>
146: * Returns null if no match is found.
147: */
148: public String[] switchArguments(String switch_str, int arg_count) {
149: for (int i = 0; i < args.length - 1; ++i) {
150: if (args[i].equals(switch_str)) {
151: if (i + arg_count < args.length) {
152: String[] ret_list = new String[arg_count];
153: for (int n = 0; n < arg_count; ++n) {
154: ret_list[n] = args[i + n + 1];
155: }
156: return ret_list;
157: }
158: }
159: }
160: return null;
161: }
162:
163: }
|