|
Java example source code file (GetOpt.java)
The GetOpt.java Java example source code/* * reserved comment block * DO NOT REMOVE OR ALTER! */ /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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. */ /* * $Id: GetOpt.java,v 1.2.4.1 2005/08/31 11:46:04 pvedula Exp $ */ package com.sun.org.apache.xalan.internal.xsltc.cmdline.getopt; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg; /** * GetOpt is a Java equivalent to the C getopt() library function * discussed in man page getopt(3C). It provides command line * parsing for Java applications. It supports the most rules of the * command line standard (see man page intro(1)) including stacked * options such as '-sxm' (which is equivalent to -s -x -m); it * handles special '--' option that signifies the end of options. * Additionally this implementation of getopt will check for * mandatory arguments to options such as in the case of * '-d <file>' it will throw a MissingOptArgException if the * option argument '<file>' is not included on the commandline. * getopt(3C) does not check for this. * @author G Todd Miller */ public class GetOpt{ public GetOpt(String[] args, String optString){ theOptions = new ArrayList(); int currOptIndex = 0; theCmdArgs = new ArrayList(); theOptionMatcher = new OptionMatcher(optString); // fill in the options list for(int i=0; i<args.length; i++){ String token = args[i]; int tokenLength = token.length(); if(token.equals("--")){ // end of opts currOptIndex = i+1; // set index of first operand break; // end of options } else if(token.startsWith("-") && tokenLength == 2){ // simple option token such as '-s' found theOptions.add(new Option(token.charAt(1))); } else if(token.startsWith("-") && tokenLength > 2){ // stacked options found, such as '-shm' // iterate thru the tokens after the dash and // add them to theOptions list for(int j=1; j<tokenLength; j++){ theOptions.add(new Option(token.charAt(j))); } } else if(!token.startsWith("-")){ // case 1- there are not options stored yet therefore // this must be an command argument, not an option argument if(theOptions.size() == 0){ currOptIndex = i; break; // stop processing options } else { // case 2- // there are options stored, check to see if // this arg belong to the last arg stored int indexoflast=0; indexoflast = theOptions.size()-1; Option op = (Option)theOptions.get(indexoflast); char opLetter = op.getArgLetter(); if(!op.hasArg() && theOptionMatcher.hasArg(opLetter)){ op.setArg(token); } else{ // case 3 - // the last option stored does not take // an argument, so again, this argument // must be a command argument, not // an option argument currOptIndex = i; break; // end of options } } }// end option does not start with "-" } // end for args loop // attach an iterator to list of options theOptionsIterator = theOptions.listIterator(); // options are done, now fill out cmd arg list with remaining args for(int i=currOptIndex; i<args.length; i++){ String token = args[i]; theCmdArgs.add(token); } } /** * debugging routine to print out all options collected */ public void printOptions(){ for(ListIterator it=theOptions.listIterator(); it.hasNext();){ Option opt = (Option)it.next(); System.out.print("OPT =" + opt.getArgLetter()); String arg = opt.getArgument(); if(arg != null){ System.out.print(" " + arg); } System.out.println(); } } /** * gets the next option found in the commandline. Distinguishes * between two bad cases, one case is when an illegal option * is found, and then other case is when an option takes an * argument but no argument was found for that option. * If the option found was not declared in the optString, then * an IllegalArgumentException will be thrown (case 1). * If the next option found has been declared to take an argument, * and no such argument exists, then a MissingOptArgException * is thrown (case 2). * @param none * @return int - the next option found. * @throws IllegalArgumentException, MissingOptArgException. */ public int getNextOption() throws IllegalArgumentException, MissingOptArgException { int retval = -1; if(theOptionsIterator.hasNext()){ theCurrentOption = (Option)theOptionsIterator.next(); char c = theCurrentOption.getArgLetter(); boolean shouldHaveArg = theOptionMatcher.hasArg(c); String arg = theCurrentOption.getArgument(); if(!theOptionMatcher.match(c)) { ErrorMsg msg = new ErrorMsg(ErrorMsg.ILLEGAL_CMDLINE_OPTION_ERR, new Character(c)); throw (new IllegalArgumentException(msg.toString())); } else if(shouldHaveArg && (arg == null)) { ErrorMsg msg = new ErrorMsg(ErrorMsg.CMDLINE_OPT_MISSING_ARG_ERR, new Character(c)); throw (new MissingOptArgException(msg.toString())); } retval = c; } return retval; } /** * gets the argument for the current parsed option. For example, * in case of '-d <file>', if current option parsed is 'd' then * getOptionArg() would return '<file>'. * @return String - argument for current parsed option. * @param none */ public String getOptionArg(){ String retval = null; String tmp = theCurrentOption.getArgument(); char c = theCurrentOption.getArgLetter(); if(theOptionMatcher.hasArg(c)){ retval = tmp; } return retval; } /** * gets list of the commandline arguments. For example, in command * such as 'cmd -s -d file file2 file3 file4' with the usage * 'cmd [-s] [-d <file>] Other Java examples (source code examples)Here is a short list of links related to this Java GetOpt.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.