@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void complete(CompleteOperation completeOperation)
{
ParameterInt param = context.getParser().getParameters().get(0);
// complete command names
if (param.getName().startsWith(completeOperation.getBuffer()))
completeOperation.addCompletionCandidate(param.getName());
// display all the options/arguments
else if (param.getName().equals(completeOperation.getBuffer().trim()))
{
completeOperation.addCompletionCandidates(param.getOptionLongNamesWithDash());
}
// complete options/arguments
else if (completeOperation.getBuffer().startsWith(param.getName()))
{
ParsedCompleteObject completeObject = null;
try
{
completeObject = new CommandLineCompletionParser(context.getParser())
.findCompleteObject(completeOperation.getBuffer());
}
catch (CommandLineParserException e)
{
logger.info(e.getMessage());
return;
}
logger.info("ParsedCompleteObject: " + completeObject);
if (completeObject.doDisplayOptions())
{
// we have a partial/full name
if (completeObject.getName() != null && completeObject.getName().length() > 0)
{
if (param.findPossibleLongNamesWitdDash(completeObject.getName()).size() > 0)
{
// only one param
if (param.findPossibleLongNamesWitdDash(completeObject.getName()).size() == 1)
{
completeOperation.addCompletionCandidate(param.findPossibleLongNamesWitdDash(
completeObject.getName()).get(0));
completeOperation.setOffset(completeOperation.getCursor() -
completeObject.getOffset());
}
// multiple params
else
completeOperation.addCompletionCandidates(param.findPossibleLongNamesWitdDash(completeObject
.getName()));
}
}
// display all our params
else
{
if (param.getOptionLongNamesWithDash().size() > 1)
{
completeOperation.addCompletionCandidates(param.getOptionLongNamesWithDash());
}
else
{
completeOperation.addCompletionCandidates(param.getOptionLongNamesWithDash());
completeOperation.setOffset(completeOperation.getCursor() -
completeObject.getOffset());
}
}
}