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    }