in modules/jdktools/src/main/java/org/apache/harmony/tools/jarsigner/ArgParser.java [107:331]
static JSParameters parseArgs(String[] args, JSParameters param)
throws JarSignerException, IOException, KeyStoreException,
UnrecoverableKeyException, NoSuchAlgorithmException {
if (args == null){
return null;
}
if (args.length == 0){
return null;
}
if (param == null){
param = new JSParameters();
} else {
// clean the param
param.setDefault();
}
try {
for (int i = 0; i < args.length; i++) {
if (args[i].equalsIgnoreCase(sVerify)) {
param.setVerify(true);
continue;
}
if (args[i].equalsIgnoreCase(sKeyStore)) {
param.setStoreURI(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sStoreType)) {
param.setStoreType(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sStorePass)) {
param.setStorePass(args[++i].toCharArray());
continue;
}
if (args[i].equalsIgnoreCase(sKeyPass)) {
param.setKeyPass(args[++i].toCharArray());
continue;
}
if (args[i].equalsIgnoreCase(sSigFile)) {
param.setSigFileName(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sSignedJAR)) {
param.setSignedJARName(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sCerts)) {
param.setCerts(true);
continue;
}
if (args[i].equalsIgnoreCase(sVerbose)) {
param.setVerbose(true);
continue;
}
if (args[i].equalsIgnoreCase(sSilent)) {
param.setSilent(true);
continue;
}
if (args[i].equalsIgnoreCase(sInternalSF)) {
param.setInternalSF(true);
continue;
}
if (args[i].equalsIgnoreCase(sSectionsOnly)) {
param.setSectionsOnly(true);
continue;
}
if (args[i].equalsIgnoreCase(sProvider)) {
param.setProvider(args[++i]);
addProvider(args[i]);
continue;
}
if (args[i].equalsIgnoreCase(sProviderName)) {
param.setProviderName(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sCertProvider)) {
param.setCertProvider(args[++i]);
addProvider(args[i]);
continue;
}
if (args[i].equalsIgnoreCase(sCertProviderName)) {
param.setCertProviderName(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sSigProvider)) {
param.setSigProvider(args[++i]);
addProvider(args[i]);
continue;
}
if (args[i].equalsIgnoreCase(sSigProviderName)) {
param.setSigProviderName(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sKSProvider)) {
param.setKsProvider(args[++i]);
addProvider(args[i]);
continue;
}
if (args[i].equalsIgnoreCase(sKSProviderName)) {
param.setKsProviderName(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sMDProvider)) {
param.setMdProvider(args[++i]);
addProvider(args[i]);
continue;
}
if (args[i].equalsIgnoreCase(sMDProviderName)) {
param.setMdProviderName(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sTSA)) {
try {
param.setTsaURI(new URI(args[++i]));
} catch (URISyntaxException e) {
throw new JarSignerException("Argument " + args[i]
+ " is not an URI");
}
continue;
}
if (args[i].equalsIgnoreCase(sTSAcert)) {
param.setTsaCertAlias(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sProxy)) {
int colonPos = args[++i].lastIndexOf(':');
if (colonPos == -1) {
param.setProxy(args[i]);
continue;
}
String proxy = args[i].substring(0, colonPos);
int port;
try {
port = Integer.parseInt(args[i].substring(colonPos + 1,
args[i].length()));
} catch (NumberFormatException e) {
throw new JarSignerException(
"Proxy port must be an integer value.");
}
param.setProxy(proxy);
param.setProxyPort(port);
continue;
}
if (args[i].equalsIgnoreCase(sAltSigner)) {
param.setAltSigner(args[++i]);
continue;
}
if (args[i].equalsIgnoreCase(sAltSignerPath)) {
param.setAltSignerPath(args[++i]);
continue;
}
if ((param.isVerify() && i == args.length - 1)
|| (!param.isVerify() && i == args.length - 2)) {
param.setJarURIorPath(args[i]);
continue;
}
if (!param.isVerify() && i == args.length - 1){
param.setAlias(args[i]);
continue;
}
System.out.println("Illegal option: " + args[i]);
return null;
}
} catch(ArrayIndexOutOfBoundsException e){
// ignore the last option if its value is not provided
}
// set specific provider names the same as the main provider name
// if their values are not set.
String providerName = param.getProviderName();
if (providerName != null){
if (param.getCertProviderName() == null){
param.setCertProviderName(providerName);
}
if (param.getSigProviderName() == null){
param.setSigProviderName(providerName);
}
if (param.getKsProviderName() == null){
param.setKsProviderName(providerName);
}
if (param.getMdProviderName() == null){
param.setMdProviderName(providerName);
}
}
// if the store password is not given, prompt for it
if (param.getStorePass() == null) {
param.setStorePass(UserInteractor
.getDataFromUser("Enter keystore password: "));
// check the password
param.getKeyStore();
}
if (param.getAlias() == null && !param.isVerify()) {
param.setAlias(new String(UserInteractor
.getDataFromUser("Enter alias name: ")));
}
if (!param.getKeyStore().containsAlias(param.getAlias())) {
throw new JarSignerException("The alias " + param.getAlias()
+ " does not exist in keystore");
}
// if key password is not given, try to inplace it with store password
if (param.getKeyPass() == null) {
param.setKeyPass(tryStorePassAsKeyPass(param.getKeyStore(), param
.getAlias(), param.getStorePass()));
}
// TODO: if decide to implement such abilities, remove this code
if (param.isInternalSF() || param.isSectionsOnly()
|| param.getAltSigner() != null
|| param.getAltSignerPath() != null) {
Logger.getLogger(JSParameters.loggerName).warning(
"Options " + sAltSigner + ", " + sAltSignerPath + ", "
+ sInternalSF + ", " + sSectionsOnly
+ " are currently ignored since they eliminate "
+ "useful optimizations. ");
}
return param;
}