/* * Distributed as part of mchange-commons-java 0.2.11 * * Copyright (C) 2015 Machinery For Change, Inc. * * Author: Steve Waldman <swaldman@mchange.com> * * This library is free software; you can redistribute it and/or modify * it under the terms of EITHER: * * 1) The GNU Lesser General Public License (LGPL), version 2.1, as * published by the Free Software Foundation * * OR * * 2) The Eclipse Public License (EPL), version 1.0 * * You may choose which license to accept if you wish to redistribute * or modify this work. You may offer derivatives of this work * under the license you have chosen, or you may provide the same * choice of license which you have been offered here. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * You should have received copies of both LGPL v2.1 and EPL v1.0 * along with this software; see the files LICENSE-EPL and LICENSE-LGPL. * If not, the text of these licenses are currently available at * * LGPL v2.1: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * EPL v1.0: http://www.eclipse.org/org/documents/epl-v10.php * */ /* * This class is modified from swaldman.util.CommandLineParser, * which was written at the MIT Media Lab by Steve Waldman */ package com.mchange.util.impl; import com.mchange.util.*; /** * @deprecated Use com.mchange.v2.cmdline.CommandLineUtils instead */ public class CommandLineParserImpl extends Object implements CommandLineParser { String[] argv; String[] validSwitches; String[] reqSwitches; String[] argSwitches; char switch_char; public CommandLineParserImpl(String[] argv, String[] validSwitches, String[] reqSwitches, String[] argSwitches, char switch_char) { this.argv = argv; this.validSwitches = (validSwitches == null ? new String[0] : validSwitches); this.reqSwitches = (reqSwitches == null ? new String[0] : reqSwitches); this.argSwitches = (argSwitches == null ? new String[0] : argSwitches); this.switch_char = switch_char; } public CommandLineParserImpl(String[] argv, String[] validSwitches, String[] reqSwitches, String[] argSwitches) {this(argv, validSwitches, reqSwitches, argSwitches, '-');} public boolean checkSwitch(String sw) { for (int i = 0; i < argv.length; ++i) if (argv[i].charAt(0) == switch_char && argv[i].equals(switch_char + sw)) return true; return false; } public String findSwitchArg(String sw) { for (int i = 0; i < argv.length - 1; ++i) if (argv[i].charAt(0) == switch_char && argv[i].equals(switch_char + sw)) return (argv[i+1].charAt(0) == switch_char ? null : argv[i+1]); return null; } public boolean checkArgv() { // boolean out = checkValidSwitches(); // System.out.println(out); // System.out.println(out &= checkRequiredSwitches()); // System.out.println(out &= checkSwitchArgSyntax()); // return out; return checkValidSwitches() && checkRequiredSwitches() && checkSwitchArgSyntax(); } boolean checkValidSwitches() { i_loop: for (int i = 0; i < argv.length; ++ i) if (argv[i].charAt(0) == switch_char) { for (int j = 0; j < validSwitches.length; ++j) if (argv[i].equals(switch_char + validSwitches[j])) continue i_loop; return false; } return true; } boolean checkRequiredSwitches() { for (int i = reqSwitches.length; --i >= 0;) if (!checkSwitch(reqSwitches[i])) return false; return true; } boolean checkSwitchArgSyntax() { for (int i = argSwitches.length; --i >= 0;) { if (checkSwitch(argSwitches[i])) { String check = findSwitchArg(argSwitches[i]); if (check == null || check.charAt(0) == switch_char) return false; } } return true; } public int findLastSwitched() { for (int i = argv.length; --i >= 0;) if (argv[i].charAt(0) == switch_char) return i; return -1; } public String[] findUnswitchedArgs() { String[] bigArray = new String[argv.length]; int count = 0; for (int i = 0; i < argv.length; ++i) { if (argv[i].charAt(0) == switch_char) {if (contains(argv[i].substring(1), argSwitches)) ++i;} else bigArray[count++] = argv[i]; } String[] out = new String[count]; System.arraycopy(bigArray, 0, out, 0, count); return out; } private static boolean contains(String string, String[] list) { for (int i = list.length; --i >= 0;) if (list[i].equals(string)) return true; return false; } }