/*******************************************************************************
* Copyright (c) May 16, 2011 Zend Technologies Ltd.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.zend.sdkcli.internal.commands;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.zend.sdkcli.ParseError;
import org.zend.sdklib.logger.ILogger;
import org.zend.sdklib.logger.Log;
/**
* Helps forming the command line life cycle. At first it parses the right
* command options according to the verb @see {@link CommandLine#verb} and
* directObject {@link CommandLine#directObject} and then retrieving the command
* values.
*
* @author Roy, 2011
*/
public class CommandLine {
/**
* Original arguments array
*/
final private String[] arguments;
/**
* Resolved verb of this command
*/
private String verb = null;
/**
* Resolved direct object of this command
*/
private String directObject = null;
/**
* Low-level command line instance
*/
private org.apache.commons.cli.CommandLine cmd;
private final ILogger log;
public CommandLine(String[] args, ILogger log) {
this.arguments = args;
this.log = log;
heuristicParse();
}
public CommandLine(String[] args) {
this(args, Log.getInstance().getLogger(CommandLine.class.getName()));
}
private void heuristicParse() {
if (arguments.length > 0) {
this.verb = arguments[0];
}
if (arguments.length > 1) {
this.directObject = arguments[1];
}
}
public String getDirectObject() {
return directObject;
}
public String getVerb() {
return verb;
}
/**
*
* @param options
* @return
* @throws ParseError
*/
public void parse(Options options) throws ParseError {
CommandLineParser parser = new GnuParser();
try {
cmd = parser.parse(options, arguments);
} catch (ParseException e) {
throw new ParseError(e);
}
}
/**
* @param parameterName
* @return
*/
public String getParameterValue(String parameterName) {
return cmd.getOptionValue(parameterName);
}
/**
* @param parameterName
* @return
*/
public String[] getParameterValues(String parameterName) {
return cmd.getOptionValues(parameterName);
}
/**
* @return the logger for command line
*/
public ILogger getLog() {
return log;
}
public boolean hasOption(String parameterName) {
return cmd.hasOption(parameterName);
}
public String getArgument(int idx) {
return idx < arguments.length && idx >= 0 ? arguments[idx] : null;
}
}