From 816d7d850c5b7a163417ca984731bd222dfa7839 Mon Sep 17 00:00:00 2001 From: rmichela Date: Thu, 22 Mar 2012 00:20:33 -0400 Subject: [Bleeding] Made IndexHelpTopic more conducive to subclassing. Addresses BUKKIT-1263 --- src/main/java/org/bukkit/help/IndexHelpTopic.java | 61 +++++++++++++++++------ 1 file changed, 46 insertions(+), 15 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/bukkit/help/IndexHelpTopic.java b/src/main/java/org/bukkit/help/IndexHelpTopic.java index ce468969..61db6c8d 100644 --- a/src/main/java/org/bukkit/help/IndexHelpTopic.java +++ b/src/main/java/org/bukkit/help/IndexHelpTopic.java @@ -4,7 +4,6 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; -import org.bukkit.help.HelpTopic; import org.bukkit.util.ChatPaginator; import java.util.Collection; @@ -12,23 +11,35 @@ import java.util.Collection; /** * This help topic generates a list of other help topics. This class is useful for adding your own * index help topics. To enforce a particular order, use a sorted collection. + *

+ * If a preamble is provided to the constructor, that text will be displayed before the first item + * in the index. */ public class IndexHelpTopic extends HelpTopic { - private String permission; - private String preamble; - private Collection allTopics; + protected String permission; + protected String preamble; + protected Collection allTopics; public IndexHelpTopic(String name, String shortText, String permission, Collection topics) { this(name, shortText, permission, topics, null); } - + public IndexHelpTopic(String name, String shortText, String permission, Collection topics, String preamble) { this.name = name; this.shortText = shortText; this.permission = permission; - this.allTopics = topics; this.preamble = preamble; + setTopicsCollection(topics); + } + + /** + * Sets the contents of the internal allTopics collection. + * + * @param topics The topics to set. + */ + protected void setTopicsCollection(Collection topics) { + this.allTopics = topics; } public boolean canSee(CommandSender sender) { @@ -50,20 +61,13 @@ public class IndexHelpTopic extends HelpTopic { StringBuilder sb = new StringBuilder(); if (preamble != null) { - sb.append(preamble); + sb.append(buildPreamble(sender)); sb.append("\n"); } for (HelpTopic topic : allTopics) { if (topic.canSee(sender)) { - StringBuilder line = new StringBuilder(); - line.append(ChatColor.GOLD); - line.append(topic.getName()); - line.append(": "); - line.append(ChatColor.WHITE); - line.append(topic.getShortText()); - - String lineStr = line.toString().replace("\n", ". "); + String lineStr = buildIndexLine(sender, topic).replace("\n", ". "); if (sender instanceof Player && lineStr.length() > ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH) { sb.append(lineStr.substring(0, ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH - 3)); sb.append("..."); @@ -75,4 +79,31 @@ public class IndexHelpTopic extends HelpTopic { } return sb.toString(); } + + /** + * Builds the topic preamble. Override this method to change how the index preamble looks. + * + * @param sender The command sender requesting the preamble. + * @return The topic preamble. + */ + protected String buildPreamble(CommandSender sender) { + return ChatColor.GRAY + preamble; + } + + /** + * Builds individual lines in the index topic. Override this method to change how index lines are rendered. + * + * @param sender The command sender requesting the index line. + * @param topic The topic to render into an index line. + * @return The rendered index line. + */ + protected String buildIndexLine(CommandSender sender, HelpTopic topic) { + StringBuilder line = new StringBuilder(); + line.append(ChatColor.GOLD); + line.append(topic.getName()); + line.append(": "); + line.append(ChatColor.WHITE); + line.append(topic.getShortText()); + return line.toString(); + } } -- cgit v1.2.3