001 package org.crsh.cmdline.matcher.impl; 002 003 import org.crsh.cmdline.CommandCompletion; 004 import org.crsh.cmdline.CommandDescriptor; 005 import org.crsh.cmdline.Delimiter; 006 import org.crsh.cmdline.matcher.CmdCompletionException; 007 import org.crsh.cmdline.matcher.tokenizer.Token; 008 import org.crsh.cmdline.spi.ValueCompletion; 009 010 import java.util.Set; 011 012 /** 013 * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> 014 */ 015 class OptionCompletion<T> extends Completion { 016 017 /** . */ 018 private final CommandDescriptor<T, ?> descriptor; 019 020 /** . */ 021 private final Token.Literal.Option prefix; 022 023 OptionCompletion(CommandDescriptor<T, ?> descriptor, Token.Literal.Option prefix) { 024 this.descriptor = descriptor; 025 this.prefix = prefix; 026 } 027 028 @Override 029 protected CommandCompletion complete() throws CmdCompletionException { 030 ValueCompletion completions = new ValueCompletion(prefix.getValue()); 031 Set<String> optionNames = prefix instanceof Token.Literal.Option.Short ? descriptor.getShortOptionNames() : descriptor.getLongOptionNames(); 032 for (String optionName : optionNames) { 033 if (optionName.startsWith(prefix.getValue())) { 034 completions.put(optionName.substring(prefix.getValue().length()), true); 035 } 036 } 037 return new CommandCompletion(Delimiter.EMPTY, completions); 038 } 039 }