001 package org.bukkit.help;
002
003 import org.bukkit.help.HelpTopic;
004
005 import java.util.Comparator;
006
007 /**
008 * Used to impose a custom total ordering on help topics.
009 * <p>
010 * All topics are listed in alphabetic order, but topics that start with a
011 * slash come after topics that don't.
012 */
013 public class HelpTopicComparator implements Comparator<HelpTopic> {
014
015 // Singleton implementations
016 private static final TopicNameComparator tnc = new TopicNameComparator();
017 public static TopicNameComparator topicNameComparatorInstance() {
018 return tnc;
019 }
020
021 private static final HelpTopicComparator htc = new HelpTopicComparator();
022 public static HelpTopicComparator helpTopicComparatorInstance() {
023 return htc;
024 }
025
026 private HelpTopicComparator() {}
027
028 public int compare(HelpTopic lhs, HelpTopic rhs) {
029 return tnc.compare(lhs.getName(), rhs.getName());
030 }
031
032 public static class TopicNameComparator implements Comparator<String> {
033 private TopicNameComparator(){}
034
035 public int compare(String lhs, String rhs) {
036 boolean lhsStartSlash = lhs.startsWith("/");
037 boolean rhsStartSlash = rhs.startsWith("/");
038
039 if (lhsStartSlash && !rhsStartSlash) {
040 return 1;
041 } else if (!lhsStartSlash && rhsStartSlash) {
042 return -1;
043 } else {
044 return lhs.compareToIgnoreCase(rhs);
045 }
046 }
047 }
048 }