spring-shell
spring-shell copied to clipboard
Can you replace user's input when using CompletionProposal?
Let's say the options are an enum of DayOfWeek; and each day has an associated number and color (just for the sake of an example).
public enum DayOfWeek {
MONDAY(0, "yellow"),
TUESDAY(1, "blue"),
WEDNESDAY(2, "pink"),
THURSDAY(3, "purple"),
FRIDAY(4, "orange"),
SATURDAY(5, "green"),
SUNDAY(6, "red");
public int num;
public String color;
public DayOfWeek(int num, String color) {
this.num = num;
this.color = color;
}
public static List<CompletionProposal> completion() {
return Arrays.stream(values()).map(Enum::name).map(CompletionProposal::new).toList();
}
}
I want the user to get autocomplete with all the properties, in addition to the enum name.
If I give the List<CompletionProposal> of the names of the enum constants, this will work:
MON -> MONDAY
What if I want the user to type gre or green and then have it change to SATURDAY?
Even if that is not possible, what if I type satur? It won't autocomplete to SATURDAY or saturday, unless I include the day twice as upper and lower cases, which is confusing to the user.
The only way I can think of showing it to the user is to use the displayText, category, or description method to the user, but it's still a chore to type exactly the words.
In my case I have IDs of a huge list, and the user won't remember the entire IDs of the list, so I would like them to autocomplete with a sort of a "search" feature. Let's say I type "Mark Twain" or "Tom Sawyer", I want to get "94782293" to replace the words I typed, since the final value will be an ID, but the other words help search. So far I'm using displayText as Tom Sawyer by Mark Twain: 94782293, but the value is 94782293, which is obscuring what's happening to the user.