summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/bukkit/conversations/ValidatingPrompt.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/bukkit/conversations/ValidatingPrompt.java')
-rw-r--r--src/main/java/org/bukkit/conversations/ValidatingPrompt.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/conversations/ValidatingPrompt.java b/src/main/java/org/bukkit/conversations/ValidatingPrompt.java
new file mode 100644
index 00000000..d6050a85
--- /dev/null
+++ b/src/main/java/org/bukkit/conversations/ValidatingPrompt.java
@@ -0,0 +1,69 @@
+package org.bukkit.conversations;
+
+import org.bukkit.ChatColor;
+
+/**
+ * ValidatingPrompt is the base class for any prompt that requires validation. ValidatingPrompt will keep replaying
+ * the prompt text until the user enters a valid response.
+ */
+public abstract class ValidatingPrompt implements Prompt {
+ public ValidatingPrompt() {
+ super();
+ }
+
+ /**
+ * Accepts and processes input from the user and validates it. If validation fails, this prompt is returned for
+ * re-execution, otherwise the next Prompt in the prompt graph is returned.
+ * @param context Context information about the conversation.
+ * @param input The input text from the user.
+ * @return This prompt or the next Prompt in the prompt graph.
+ */
+ public Prompt acceptInput(ConversationContext context, String input) {
+ if (isInputValid(context, input)) {
+ return acceptValidatedInput(context, input);
+ } else {
+ String failPrompt = getFailedValidationText(context, input);
+ if (failPrompt != null) {
+ context.getForWhom().sendRawMessage(ChatColor.RED + failPrompt);
+ }
+ // Redisplay this prompt to the user to re-collect input
+ return this;
+ }
+ }
+
+ /**
+ * Ensures that the prompt waits for the user to provide input.
+ * @param context Context information about the conversation.
+ * @return True.
+ */
+ public boolean blocksForInput(ConversationContext context) {
+ return true;
+ }
+
+ /**
+ * Override this method to check the validity of the player's input.
+ * @param context Context information about the conversation.
+ * @param input The player's raw console input.
+ * @return True or false depending on the validity of the input.
+ */
+ protected abstract boolean isInputValid(ConversationContext context, String input);
+
+ /**
+ * Override this method to accept and processes the validated input from the user. Using the input, the next Prompt
+ * in the prompt graph should be returned.
+ * @param context Context information about the conversation.
+ * @param input The validated input text from the user.
+ * @return The next Prompt in the prompt graph.
+ */
+ protected abstract Prompt acceptValidatedInput(ConversationContext context, String input);
+
+ /**
+ * Optionally override this method to display an additional message if the user enters an invalid input.
+ * @param context Context information about the conversation.
+ * @param invalidInput The invalid input provided by the user.
+ * @return A message explaining how to correct the input.
+ */
+ protected String getFailedValidationText(ConversationContext context, String invalidInput) {
+ return null;
+ }
+}