aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2023-10-08 00:01:34 -0400
committerGitHub <noreply@github.com>2023-10-08 00:01:34 -0400
commit0c9381191663a74a9ec3cff9aae1c8b523215f0e (patch)
treea649e4800fb2ef497b7f6986a2832f8ba9cda881 /src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java
parentaed9c89764b84da3944e450e877a5707f430fe8b (diff)
downloadSkyblocker-0c9381191663a74a9ec3cff9aae1c8b523215f0e.tar.gz
Skyblocker-0c9381191663a74a9ec3cff9aae1c8b523215f0e.tar.bz2
Skyblocker-0c9381191663a74a9ec3cff9aae1c8b523215f0e.zip
Add Support for Custom toString Function for Enum Dropdowns (#344)
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java b/src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java
index cf40c7d5..6db0028c 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java
@@ -8,16 +8,23 @@ import dev.isxander.yacl3.gui.controllers.dropdown.AbstractDropdownController;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
+import java.util.function.Function;
import java.util.stream.Stream;
public class EnumDropdownController<E extends Enum<E>> extends AbstractDropdownController<E> {
- protected EnumDropdownController(Option<E> option) {
+ /**
+ * The function used to convert enum constants to strings used for display, suggestion, and validation. Defaults to {@link Enum#toString}.
+ */
+ protected final Function<E, String> toString;
+
+ protected EnumDropdownController(Option<E> option, Function<E, String> toString) {
super(option);
+ this.toString = toString;
}
@Override
public String getString() {
- return option().pendingValue().toString();
+ return toString.apply(option().pendingValue());
}
@Override
@@ -26,15 +33,15 @@ public class EnumDropdownController<E extends Enum<E>> extends AbstractDropdownC
}
/**
- * Searches through enum constants for one whose {@link Enum#toString()} result equals {@code value}
+ * Searches through enum constants for one whose {@link #toString} result equals {@code value}
*
* @return The enum constant associated with the {@code value} or the pending value if none are found
- * @implNote The return value of {@link Enum#toString()} on each enum constant should be unique in order to ensure accuracy
+ * @implNote The return value of {@link #toString} on each enum constant should be unique in order to ensure accuracy
*/
private E getEnumFromString(String value) {
value = value.toLowerCase();
for (E constant : option().pendingValue().getDeclaringClass().getEnumConstants()) {
- if (constant.toString().toLowerCase().equals(value)) return constant;
+ if (toString.apply(constant).toLowerCase().equals(value)) return constant;
}
return option().pendingValue();
@@ -44,7 +51,7 @@ public class EnumDropdownController<E extends Enum<E>> extends AbstractDropdownC
public boolean isValueValid(String value) {
value = value.toLowerCase();
for (E constant : option().pendingValue().getDeclaringClass().getEnumConstants()) {
- if (constant.toString().equals(value)) return true;
+ if (toString.apply(constant).equals(value)) return true;
}
return false;
@@ -59,16 +66,16 @@ public class EnumDropdownController<E extends Enum<E>> extends AbstractDropdownC
}
/**
- * Filters and sorts through enum constants for those whose {@link Enum#toString()} result equals {@code value}
+ * Filters and sorts through enum constants for those whose {@link #toString} result equals {@code value}
*
* @return a sorted stream containing enum constants associated with the {@code value}
- * @implNote The return value of {@link Enum#toString()} on each enum constant should be unique in order to ensure accuracy
+ * @implNote The return value of {@link #toString} on each enum constant should be unique in order to ensure accuracy
*/
@NotNull
protected Stream<String> getValidEnumConstants(String value) {
String valueLowerCase = value.toLowerCase();
return Arrays.stream(option().pendingValue().getDeclaringClass().getEnumConstants())
- .map(Enum::toString)
+ .map(this.toString)
.filter(constant -> constant.toLowerCase().contains(valueLowerCase))
.sorted((s1, s2) -> {
String s1LowerCase = s1.toLowerCase();