blob: e01dc5bd24e5a9920708f6c86d759815a8831b66 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.validator.helpers;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date Mar 6, 2007
*
*/
@SuppressWarnings({"nls","boxing"})
public class GetOpt {
List<String> mParams = new ArrayList<String>(8);
/** this way arguments come in order of appearance */
Map<Character,String> mOpt = new LinkedHashMap<Character,String>(11);
/**
* Create a brand new shiny GetOpt object.
*
* @param strControl
* @param args
* @throws Exception
*/
public GetOpt(String strControl, String args[]) throws Exception {
for (int i=0; i < args.length; i++) {
String sOpt = args[i];
if (sOpt.length() < 1) {
// probably parameters
mParams.add(sOpt);
continue;
}
char ch1 = sOpt.charAt(0);
// Use only - to switch, the windows switches / do not work with unix
// absolute paths.
if (ch1 != '-') {
// probably parameters
mParams.add(sOpt);
continue;
}
// silently ignore bogus command line entries
if (sOpt.length() < 2) {
continue;
}
char ch2 = sOpt.charAt(1);
int nIndex = strControl.indexOf(ch2);
if (nIndex < 0) {
throw new Exception("Unknown command option " + ch2 );
}
// argument ?
if (nIndex >= 0 && (nIndex + 1) < strControl.length()
&& strControl.charAt(nIndex + 1) == ':') {
if (sOpt.length() > 2) {
mOpt.put(ch2, sOpt.substring(2));
} else if ((i + 1) < args.length) {
i += 1;
mOpt.put(ch2, args[i]);
} else {
throw new Exception("Expected argument for option " + ch2);
}
} else {
for (int j = 1; j < sOpt.length(); j++) {
mOpt.put(sOpt.charAt(j), "1");
}
}
}
}
/**
* Respond with the option/key set
*
* @return key set
*/
public char[] getOptions() {
char options[] = new char[ mOpt.size() ];
int x = 0;
for(char ch : mOpt.keySet()) {
options[x++] = ch;
}
return options;
}
/**
* @param c
* @return Answer if the option is present
*/
public boolean hasOption(char c) {
return mOpt.containsKey(c);
}
/**
* Get option identified by the character passed.
* @param c
* @return the option
*/
public String getOption(char c) {
return mOpt.get(c);
}
/**
* Return the list of parameters collected that are not options
* @return the list of parameters collected.
*/
public List<String> parameters() {
return mParams;
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder(32);
sb.append("[GetOpt=").append(mOpt).append(",").append(mParams)
.append("]");
return sb.toString();
}
}