001 package org.crsh.cmdline.matcher.impl; 002 003 import org.crsh.cmdline.CommandCompletion; 004 import org.crsh.cmdline.Delimiter; 005 import org.crsh.cmdline.completers.EmptyCompleter; 006 import org.crsh.cmdline.ParameterDescriptor; 007 import org.crsh.cmdline.matcher.CmdCompletionException; 008 import org.crsh.cmdline.spi.Completer; 009 import org.crsh.cmdline.spi.ValueCompletion; 010 011 /** 012 * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> 013 */ 014 class ParameterCompletion extends Completion { 015 016 /** . */ 017 private final String prefix; 018 019 /** . */ 020 private final Delimiter delimiter; 021 022 /** . */ 023 private final ParameterDescriptor<?> parameter; 024 025 /** . */ 026 private final Completer completer; 027 028 ParameterCompletion(String prefix, Delimiter delimiter, ParameterDescriptor<?> parameter, Completer completer) { 029 this.prefix = prefix; 030 this.delimiter = delimiter; 031 this.parameter = parameter; 032 this.completer = completer; 033 } 034 035 CommandCompletion complete() throws CmdCompletionException { 036 037 Class<? extends Completer> completerType = parameter.getCompleterType(); 038 Completer completer = this.completer; 039 040 // Use the most adapted completer 041 if (completerType != EmptyCompleter.class) { 042 try { 043 completer = completerType.newInstance(); 044 } 045 catch (Exception e) { 046 throw new CmdCompletionException(e); 047 } 048 } 049 050 // 051 if (completer != null) { 052 try { 053 return new CommandCompletion(delimiter, completer.complete(parameter, prefix)); 054 } 055 catch (Exception e) { 056 throw new CmdCompletionException(e); 057 } 058 } else { 059 return new CommandCompletion(delimiter, ValueCompletion.create()); 060 } 061 } 062 }