001 package org.crsh.cmdline.matcher.impl;
002
003 import org.crsh.cmdline.ClassDescriptor;
004 import org.crsh.cmdline.CommandCompletion;
005 import org.crsh.cmdline.Delimiter;
006 import org.crsh.cmdline.MethodDescriptor;
007 import org.crsh.cmdline.matcher.CmdCompletionException;
008 import org.crsh.cmdline.spi.ValueCompletion;
009
010 /**
011 * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
012 */
013 class MethodCompletion<T> extends Completion {
014
015 /** . */
016 private final ClassDescriptor<T> descriptor;
017
018 /** . */
019 private final String mainName;
020
021 /** . */
022 private final String prefix;
023
024 /** . */
025 private final Delimiter delimiter;
026
027 MethodCompletion(ClassDescriptor<T> descriptor, String mainName, String prefix, Delimiter delimiter) {
028 this.descriptor = descriptor;
029 this.mainName = mainName;
030 this.prefix = prefix;
031 this.delimiter = delimiter;
032 }
033
034 @Override
035 protected CommandCompletion complete() throws CmdCompletionException {
036 ValueCompletion completions = new ValueCompletion(prefix);
037 for (MethodDescriptor<?> m : descriptor.getMethods()) {
038 String name = m.getName();
039 if (name.startsWith(prefix)) {
040 if (!name.equals(mainName)) {
041 completions.put(name.substring(prefix.length()), true);
042 }
043 }
044 }
045 return new CommandCompletion(delimiter, completions);
046 }
047 }