summaryrefslogtreecommitdiff
path: root/src/main/java/tlIItools/LevelRange.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/tlIItools/LevelRange.java')
-rw-r--r--src/main/java/tlIItools/LevelRange.java135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/main/java/tlIItools/LevelRange.java b/src/main/java/tlIItools/LevelRange.java
new file mode 100644
index 00000000..b0d620bf
--- /dev/null
+++ b/src/main/java/tlIItools/LevelRange.java
@@ -0,0 +1,135 @@
+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.min(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();
+
+ if (isUnrestricted() && other.isUnrestricted()) {
+ return true;
+ } else if (noLowerBound()) {
+ if (other.noLowerBound()) return maxLevel == other.maxLevel;
+ else return false;
+ } else if (noUpperBound()) {
+ if (other.noUpperBound()) return minLevel == other.minLevel;
+ else return false;
+ } else {
+ return maxLevel == other.maxLevel && minLevel == other.minLevel;
+ }
+ }
+
+ @Override
+ public int compareTo(LevelRange other) {
+ clamp();
+ other.clamp();
+
+ if (this.equals(other)) return 0;
+
+ // Unrestricted ranges sort above all others
+ if (isUnrestricted()) return 1;
+ if (other.isUnrestricted()) return -1;
+
+ if (noLowerBound()) {
+ if (other.noLowerBound()) {
+ return maxLevel - other.maxLevel;
+ } else {
+ return -1;
+ }
+ } else if (noUpperBound()) {
+ if (other.noUpperBound()) {
+ return minLevel - other.minLevel;
+ } else {
+ return 1;
+ }
+ } else {
+ if (minLevel == other.minLevel) return maxLevel - other.maxLevel;
+ else return minLevel - other.minLevel;
+ }
+ }
+}