package vnet.sms.common.shell.springshell.internal; import java.util.ArrayList; import java.util.List; import jline.Completor; import vnet.sms.common.shell.springshell.Completion; import vnet.sms.common.shell.springshell.Parser; import vnet.sms.common.shell.springshell.internal.logging.JLineLogHandler; import vnet.sms.common.shell.springshell.internal.util.Assert; /** * An implementation of JLine's {@link Completor} interface that delegates to a * {@link Parser}. * * @author Ben Alex * @since 1.0 */ public class JLineCompletorAdapter implements Completor { // Fields private final Parser parser; public JLineCompletorAdapter(final Parser parser) { Assert.notNull(parser, "Parser required"); this.parser = parser; } @Override public int complete(final String buffer, final int cursor, final List candidates) { int result; try { JLineLogHandler.cancelRedrawProhibition(); final List<Completion> completions = new ArrayList<Completion>(); result = this.parser.completeAdvanced(buffer, cursor, completions); for (final Completion completion : completions) { candidates .add(new jline.Completion(completion.getValue(), completion.getFormattedValue(), completion .getHeading())); } } finally { JLineLogHandler.prohibitRedraw(); } return result; } }