core: Add CommandFlag-accepting getters to FlagContext
This allows for type-safe access to the collection of available flags.
This commit is contained in:
parent
2068b5a43c
commit
ef85fa9ee9
2 changed files with 97 additions and 4 deletions
|
|
@ -91,6 +91,19 @@ public final class FlagContext {
|
||||||
return FLAG_PRESENCE_VALUE.equals(value);
|
return FLAG_PRESENCE_VALUE.equals(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether a presence flag is present. This will return {@code false}
|
||||||
|
* for all value flags.
|
||||||
|
*
|
||||||
|
* @param flag A presence flag instance
|
||||||
|
* @return {@code true} if the flag is a presence flag and is present,
|
||||||
|
* else {@code false}
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public boolean isPresent(final @NonNull CommandFlag<Void> flag) {
|
||||||
|
return this.isPresent(flag.getName());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a flag value as an optional. Will be empty if the value is not present.
|
* Get a flag value as an optional. Will be empty if the value is not present.
|
||||||
*
|
*
|
||||||
|
|
@ -110,6 +123,20 @@ public final class FlagContext {
|
||||||
return Optional.of(casted);
|
return Optional.of(casted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a flag value as an optional. Will be empty if the value is not present.
|
||||||
|
*
|
||||||
|
* @param flag Flag type
|
||||||
|
* @param <T> Value type
|
||||||
|
* @return Optional containing stored value if present
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public <T> @NonNull Optional<T> getValue(
|
||||||
|
final @NonNull CommandFlag<T> flag
|
||||||
|
) {
|
||||||
|
return this.getValue(flag.getName());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a flag value
|
* Get a flag value
|
||||||
*
|
*
|
||||||
|
|
@ -125,6 +152,22 @@ public final class FlagContext {
|
||||||
return this.<T>getValue(name).orElse(defaultValue);
|
return this.<T>getValue(name).orElse(defaultValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a flag value
|
||||||
|
*
|
||||||
|
* @param name Flag value
|
||||||
|
* @param defaultValue Default value
|
||||||
|
* @param <T> Value type
|
||||||
|
* @return Stored value, or the supplied default value
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public <T> @Nullable T getValue(
|
||||||
|
final @NonNull CommandFlag<T> name,
|
||||||
|
final @Nullable T defaultValue
|
||||||
|
) {
|
||||||
|
return this.getValue(name).orElse(defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether a flag is present. This will return {@code true} if the flag
|
* Check whether a flag is present. This will return {@code true} if the flag
|
||||||
* is a presence flag and is present, or if the flag is a value flag and has
|
* is a presence flag and is present, or if the flag is a value flag and has
|
||||||
|
|
@ -140,6 +183,21 @@ public final class FlagContext {
|
||||||
return this.getValue(name).isPresent();
|
return this.getValue(name).isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether a flag is present. This will return {@code true} if the flag
|
||||||
|
* is a presence flag and is present, or if the flag is a value flag and has
|
||||||
|
* a value provided.
|
||||||
|
*
|
||||||
|
* @param flag The flag instance
|
||||||
|
* @return whether the flag is present
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public boolean hasFlag(
|
||||||
|
final @NonNull CommandFlag<?> flag
|
||||||
|
) {
|
||||||
|
return this.getValue(flag).isPresent();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether a flag is present. This will return {@code true} if the flag
|
* Check whether a flag is present. This will return {@code true} if the flag
|
||||||
* is a presence flag and is present, or if the flag is a value flag and has
|
* is a presence flag and is present, or if the flag is a value flag and has
|
||||||
|
|
@ -153,6 +211,19 @@ public final class FlagContext {
|
||||||
return this.hasFlag(name);
|
return this.hasFlag(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether a flag is present. This will return {@code true} if the flag
|
||||||
|
* is a presence flag and is present, or if the flag is a value flag and has
|
||||||
|
* a value provided.
|
||||||
|
*
|
||||||
|
* @param flag Flag instance
|
||||||
|
* @return whether the flag is present
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public boolean contains(final @NonNull CommandFlag<?> flag) {
|
||||||
|
return this.hasFlag(flag);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a flag value
|
* Get a flag value
|
||||||
*
|
*
|
||||||
|
|
@ -168,4 +239,18 @@ public final class FlagContext {
|
||||||
return this.<T>getValue(name).orElse(null);
|
return this.<T>getValue(name).orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a flag value
|
||||||
|
*
|
||||||
|
* @param flag Flag name
|
||||||
|
* @param <T> Value type
|
||||||
|
* @return Stored value if present, else {@code null}
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public <T> @Nullable T get(
|
||||||
|
final @NonNull CommandFlag<T> flag
|
||||||
|
) {
|
||||||
|
return this.getValue(flag).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ package cloud.commandframework;
|
||||||
|
|
||||||
import cloud.commandframework.arguments.CommandArgument;
|
import cloud.commandframework.arguments.CommandArgument;
|
||||||
import cloud.commandframework.arguments.compound.ArgumentPair;
|
import cloud.commandframework.arguments.compound.ArgumentPair;
|
||||||
|
import cloud.commandframework.arguments.flags.CommandFlag;
|
||||||
import cloud.commandframework.arguments.preprocessor.RegexPreprocessor;
|
import cloud.commandframework.arguments.preprocessor.RegexPreprocessor;
|
||||||
import cloud.commandframework.arguments.standard.EnumArgument;
|
import cloud.commandframework.arguments.standard.EnumArgument;
|
||||||
import cloud.commandframework.arguments.standard.FloatArgument;
|
import cloud.commandframework.arguments.standard.FloatArgument;
|
||||||
|
|
@ -116,6 +117,14 @@ class CommandTreeTest {
|
||||||
}));
|
}));
|
||||||
|
|
||||||
/* Build command for testing flags */
|
/* Build command for testing flags */
|
||||||
|
final CommandFlag<Void> test = manager.flagBuilder("test")
|
||||||
|
.withAliases("t")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
final CommandFlag<Integer> num = manager.flagBuilder("num")
|
||||||
|
.withArgument(IntegerArgument.of("num"))
|
||||||
|
.build();
|
||||||
|
|
||||||
manager.command(manager.commandBuilder("flags")
|
manager.command(manager.commandBuilder("flags")
|
||||||
.flag(manager.flagBuilder("test")
|
.flag(manager.flagBuilder("test")
|
||||||
.withAliases("t")
|
.withAliases("t")
|
||||||
|
|
@ -123,14 +132,13 @@ class CommandTreeTest {
|
||||||
.flag(manager.flagBuilder("test2")
|
.flag(manager.flagBuilder("test2")
|
||||||
.withAliases("f")
|
.withAliases("f")
|
||||||
.build())
|
.build())
|
||||||
.flag(manager.flagBuilder("num")
|
.flag(num)
|
||||||
.withArgument(IntegerArgument.of("num")).build())
|
|
||||||
.flag(manager.flagBuilder("enum")
|
.flag(manager.flagBuilder("enum")
|
||||||
.withArgument(EnumArgument.of(FlagEnum.class, "enum")))
|
.withArgument(EnumArgument.of(FlagEnum.class, "enum")))
|
||||||
.handler(c -> {
|
.handler(c -> {
|
||||||
System.out.println("Flag present? " + c.flags().isPresent("test"));
|
System.out.println("Flag present? " + c.flags().isPresent(test));
|
||||||
System.out.println("Second flag present? " + c.flags().isPresent("test2"));
|
System.out.println("Second flag present? " + c.flags().isPresent("test2"));
|
||||||
System.out.println("Numerical flag: " + c.flags().getValue("num", -10));
|
System.out.println("Numerical flag: " + c.flags().getValue(num, -10));
|
||||||
System.out.println("Enum: " + c.flags().getValue("enum", FlagEnum.PROXI));
|
System.out.println("Enum: " + c.flags().getValue("enum", FlagEnum.PROXI));
|
||||||
})
|
})
|
||||||
.build());
|
.build());
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue