public String getDisplayText(Interaction interaction)
     throws ContextDataRequired, GeneralInteractionError, AbortInteraction {
   // TOOD: Pagination support...
   // see if we have an active paginator
   PaginationAssistant paginator =
       interaction.getContextData(
           PaginationAssistant.class, interaction, getTranslationKey(interaction) + "_paginator");
   if (paginator != null) {
     return paginator.getDisplayText();
   } else {
     // generate page content, and if there's too much, then activate a paginator..
     if (hasChoices) {
       Choices choices = Choices.getChoices(this, interaction);
       if (choices == null) choices = generateChoices(interaction);
       String text = generateDisplayBody(interaction) + "\n";
       String choiceText =
           interaction.parseMessage(StringUtils.join(choices.generateChoiceList(), ""));
       if (text.split("\n").length + choiceText.split("\n").length + 1 > maxLines) {
         // we'll need a paginator
         paginator = new PaginationAssistant(choiceText, maxLines, text);
         interaction.context.put(getTranslationKey(interaction) + "_paginator", paginator);
         return paginator.getDisplayText();
       } else return text + "\n" + choiceText;
     } else {
       String text = generateDisplayBody(interaction);
       if (text.split("\n").length > maxLines) {
         paginator = new PaginationAssistant(text, maxLines, "");
         interaction.context.put(getTranslationKey(interaction) + "_paginator", paginator);
         return paginator.getDisplayText();
       } else return text;
     }
   }
 }
 public String inputHandler(Interaction interaction, Object data)
     throws ContextDataRequired, GeneralInteractionError, AbortInteraction {
   // first, check for pagination...
   PaginationAssistant paginator =
       interaction.getContextData(
           PaginationAssistant.class, interaction, getTranslationKey(interaction) + "_paginator");
   if (paginator != null) {
     boolean paginationCommand = paginator.processPageCommand(data.toString());
     if (paginationCommand) {
       interaction.pageWaitingForInput = true;
       return null;
     } else {
       // it wasn't a pagination command, so we kill the paginator
       // so we don't end up with a cache of old data if the player
       // comes back to this interaction page
       interaction.context.remove(getTranslationKey(interaction) + "_paginator");
     }
   }
   // if we don't have pagination (or it wasn't a pagination command..)
   //  see if we are using a choice model, or straight to direct input
   if (hasChoices) {
     Choices choices = Choices.getChoices(this, interaction);
     return choices.takeAction(this, interaction, data);
   } else return acceptValidatedInput(interaction, data);
 }