summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/bukkit/help/HelpTopicComparator.java
blob: 5ab094c056d7d5ac07f9e4bd055ac7424be7949e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package org.bukkit.help;

import org.bukkit.help.HelpTopic;

import java.util.Comparator;

/**
 * Used to impose a custom total ordering on help topics. All topics are listed in alphabetic order, but topics
 * that start with a slash come after topics that don't.
 */
public class HelpTopicComparator implements Comparator<HelpTopic> {
    
    // Singleton implementations
    private static final TopicNameComparator tnc = new TopicNameComparator();
    public static TopicNameComparator topicNameComparatorInstance() {
        return tnc;
    }
    
    private static final HelpTopicComparator htc = new HelpTopicComparator();
    public static HelpTopicComparator helpTopicComparatorInstance() {
        return htc;
    }
    
    private HelpTopicComparator() {}

    public int compare(HelpTopic lhs, HelpTopic rhs) {
        return tnc.compare(lhs.getName(), rhs.getName());
    }

    public static class TopicNameComparator implements Comparator<String> {
        private TopicNameComparator(){}
        
        public int compare(String lhs, String rhs) {
            boolean lhsStartSlash = lhs.startsWith("/");
            boolean rhsStartSlash = rhs.startsWith("/");
            
            if (lhsStartSlash && !rhsStartSlash) {
                return 1;
            } else if (!lhsStartSlash && rhsStartSlash) {
                return -1;
            } else {
                return lhs.compareToIgnoreCase(rhs);
            }
        }
    }
}