// Decompiled by: Fernflower v0.6
// Date: 16.01.2011 23:15:44
// Copyright: 2008-2009, Stiver
// Home page: http://www.reversed-java.com
package org.apache.commons.cli;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Properties;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.MissingArgumentException;
import org.apache.commons.cli.MissingOptionException;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionGroup;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.UnrecognizedOptionException;
import org.apache.commons.cli.Util;
public abstract class Parser implements CommandLineParser {
protected CommandLine cmd;
private Options options;
private List requiredOptions;
protected void setOptions(Options var1) {
this.options = var1;
this.requiredOptions = new ArrayList(var1.getRequiredOptions());
}
protected Options getOptions() {
return this.options;
}
protected List getRequiredOptions() {
return this.requiredOptions;
}
protected abstract String[] flatten(Options var1, String[] var2, boolean var3);
public CommandLine parse(Options var1, String[] var2) throws ParseException {
return this.parse(var1, var2, (Properties)null, false);
}
public CommandLine parse(Options var1, String[] var2, Properties var3) throws ParseException {
return this.parse(var1, var2, var3, false);
}
public CommandLine parse(Options var1, String[] var2, boolean var3) throws ParseException {
return this.parse(var1, var2, (Properties)null, var3);
}
public CommandLine parse(Options var1, String[] var2, Properties var3, boolean var4) throws ParseException {
Iterator var5 = var1.helpOptions().iterator();
while(var5.hasNext()) {
Option var6 = (Option)var5.next();
var6.clearValues();
}
this.setOptions(var1);
this.cmd = new CommandLine();
boolean var10 = false;
if(var2 == null) {
var2 = new String[0];
}
List var11 = Arrays.asList(this.flatten(this.getOptions(), var2, var4));
ListIterator var7 = var11.listIterator();
while(var7.hasNext()) {
String var8 = (String)var7.next();
if("--".equals(var8)) {
var10 = true;
} else if("-".equals(var8)) {
if(var4) {
var10 = true;
} else {
this.cmd.addArg(var8);
}
} else if(var8.startsWith("-")) {
if(var4 && !this.getOptions().hasOption(var8)) {
var10 = true;
this.cmd.addArg(var8);
} else {
this.processOption(var8, var7);
}
} else {
this.cmd.addArg(var8);
if(var4) {
var10 = true;
}
}
if(var10) {
while(var7.hasNext()) {
String var9 = (String)var7.next();
if(!"--".equals(var9)) {
this.cmd.addArg(var9);
}
}
}
}
this.processProperties(var3);
this.checkRequiredOptions();
return this.cmd;
}
protected void processProperties(Properties var1) {
if(var1 != null) {
Enumeration var2 = var1.propertyNames();
while(var2.hasMoreElements()) {
String var3 = var2.nextElement().toString();
if(!this.cmd.hasOption(var3)) {
Option var4 = this.getOptions().getOption(var3);
String var5 = var1.getProperty(var3);
if(var4.hasArg()) {
if(var4.getValues() == null || var4.getValues().length == 0) {
try {
var4.addValueForProcessing(var5);
} catch (RuntimeException var7) {
;
}
}
} else if(!"yes".equalsIgnoreCase(var5) && !"true".equalsIgnoreCase(var5) && !"1".equalsIgnoreCase(var5)) {
break;
}
this.cmd.addOption(var4);
}
}
}
}
protected void checkRequiredOptions() throws MissingOptionException {
if(!this.getRequiredOptions().equals("")) {
throw new MissingOptionException(this.getRequiredOptions());
}
}
public void processArgs(Option var1, ListIterator var2) throws ParseException {
while(true) {
if(var2.hasNext()) {
String var3 = (String)var2.next();
if(this.getOptions().hasOption(var3) && var3.startsWith("-")) {
var2.previous();
} else {
try {
var1.addValueForProcessing(Util.stripLeadingAndTrailingQuotes(var3));
continue;
} catch (RuntimeException var5) {
var2.previous();
}
}
}
if(var1.getValues() == null && !var1.hasOptionalArg()) {
throw new MissingArgumentException(var1);
}
return;
}
}
protected void processOption(String var1, ListIterator var2) throws ParseException {
boolean var3 = this.getOptions().hasOption(var1);
if(!var3) {
throw new UnrecognizedOptionException("Unrecognized option: " + var1, var1);
} else {
Option var4 = (Option)this.getOptions().getOption(var1).clone();
if(var4.isRequired()) {
this.getRequiredOptions().remove(var4.getKey());
}
if(this.getOptions().getOptionGroup(var4) != null) {
OptionGroup var5 = this.getOptions().getOptionGroup(var4);
if(var5.isRequired()) {
this.getRequiredOptions().remove(var5);
}
var5.setSelected(var4);
}
if(var4.hasArg()) {
this.processArgs(var4, var2);
}
this.cmd.addOption(var4);
}
}
}