blob: 2ae31aec4c005834ebdb7aa28f10fb49e4877dad [file] [log] [blame]
package org.kohsuke.args4j.spi;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.OptionDef;
import java.util.ArrayList;
/**
* <p>
* An {@link OptionHandler} for handling {@link String[]} types. Can handle arrays of strings.
* </p>
* <p>
* <h1>How it works:</h1>
* Example for parameter -s, which is String[] type:<br>
* java -jar aaa.jar -s banan hruska jablko<br>
* java -jar aaa.jar -s banan "hruska jablko"<br>
* java -jar aaa.jar -s "banan hruska jablko"<br>
* java -jar aaa.jar -s banan hruska jablko -l 4 -r<br>
* java -jar aaa.jar -t 222 -s banan hruska jablko -r<br><br>
* It will handle all of these posibilites. This OptionHandler scans for parameter which begins
* with "-". If it found it, it will stop.
* </p>
*
* @author PlainText,LuVar
*
*/
public class StringArrayOptionHandler extends OptionHandler<String[]> {
public StringArrayOptionHandler(CmdLineParser parser, OptionDef option, Setter<? super String[]> setter) {
super(parser, option, setter);
}
/**
* <p>
* Returns "STRING[]".
* </p>
*
* @return return "STRING[]";
*/
@Override
public String getDefaultMetaVariable() {
return "STRING[]";
}
/**
* <p>
* Tryies to parse String[] argument from {@link Parameters}.
* </p>
*/
@Override
public int parseArguments(Parameters params) throws CmdLineException {
int counter = 0;
ArrayList<String> values = new ArrayList<String>();
while(true) {
String param;
try {
param = params.getParameter(counter);
} catch (CmdLineException ex) {
break;
}
if(param.startsWith("-")) {
break;
}
for (String str : param.split(" ")) {
values.add(str);
}
counter++;
}//while true
// to work around a javac bug in Java1.5, we need to first assign this to
// the raw type.
Setter s = this.setter;
s.addValue(values.toArray(new String[values.size()]));
return counter;
}
}