summaryrefslogtreecommitdiff
path: root/src/main/java/tlIItools/LevelRange.java
blob: 015fae4ea0272d038b1f9ddfd1dd3185336feeb5 (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package tlIItools;

import java.util.*;

public class LevelRange implements Comparable<LevelRange> {
	/*
	 * if (minLevel <= 1 && maxLevel == 999) {
	 * sb.append("No Level Range");
	 * } else if (minLevel != 1 && maxLevel != 999) { 
	 * sb.append("Level Range: ");
	 * sb.append(minLevel);
	 * sb.append("-");
	 * sb.append(maxLevel);
	 * } else if (minLevel <= 1) { 
	 * sb.append("Max Level: ");
	 * sb.append(maxLevel);
	 * } else if (maxLevel == 999) {
	 * sb.append("Minimum Level: ");
	 * sb.append(minLevel);
	 * } */

	public int minLevel;
	public int maxLevel;

	public LevelRange() {
		minLevel = 1;
		maxLevel = 999;
	}

	public LevelRange(int minLevel, int maxLevel) {
		this.minLevel = minLevel;
		this.maxLevel = maxLevel;
	}

	private void clamp() {
		minLevel = Math.max(1,   minLevel);
		maxLevel = Math.max(999, maxLevel);
	}

	public boolean isUnrestricted() {
		return minLevel <= 1 && maxLevel >= 999;
	}

	public boolean noLowerBound() {
		return minLevel <= 1;
	}

	public boolean noUpperBound() {
		return maxLevel >= 999;
	}

	@Override
	public String toString() {
		clamp();

		StringBuilder sb = new StringBuilder();

		if (minLevel <= 1 && maxLevel >= 999) {
			sb.append("No Level Range");
		} else if (minLevel > 1 && maxLevel < 999) { 
			sb.append("Level Range: ");
			sb.append(minLevel);
			sb.append("-");
			sb.append(maxLevel);
		} else if (minLevel <= 1) { 
			sb.append("Max Level: ");
			sb.append(maxLevel);
		} else if (maxLevel >= 999) {
			sb.append("Minimum Level: ");
			sb.append(minLevel);
		}

		return sb.toString();
	}

	@Override
    public int hashCode() {
	    clamp();
	    
        return Objects.hash(maxLevel, minLevel);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        LevelRange other = (LevelRange) obj;
        
        clamp();
        other.clamp();
        
        return maxLevel == other.maxLevel && minLevel == other.minLevel;
    }

    @Override
	public int compareTo(LevelRange other) {
		if (this.equals(other)) return 0;

		// Unrestricted ranges sort above all others
		if (isUnrestricted()) return 1;

		if (noLowerBound()) {
		        if (other.noLowerBound()) {
		            return maxLevel - other.maxLevel;
		        } else {
		            return -1;
		        }
		} else if (noUpperBound()) {
			return minLevel - other.minLevel;
		} else {
			if (minLevel == other.minLevel) return maxLevel - other.maxLevel;
			else                            return minLevel - other.minLevel;
		}
	}
}