-
-
Notifications
You must be signed in to change notification settings - Fork 53
/
DataKey.java
140 lines (107 loc) · 3.59 KB
/
DataKey.java
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package net.citizensnpcs.api.util;
import java.util.Map;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
public abstract class DataKey {
protected final String path;
protected DataKey(String path) {
this.path = path;
}
protected String createRelativeKey(String from) {
if (from.isEmpty())
return path;
if (from.charAt(0) == '.')
return path.isEmpty() ? from.substring(1, from.length()) : path + from;
return path.isEmpty() ? from : path + "." + from;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
DataKey other = (DataKey) obj;
if (path == null) {
if (other.path != null) {
return false;
}
} else if (!path.equals(other.path)) {
return false;
}
return true;
}
public abstract boolean getBoolean(String key);
public boolean getBoolean(String key, boolean value) {
if (keyExists(key))
return getBoolean(key);
setBoolean(key, value);
return value;
}
public abstract double getDouble(String key);
public double getDouble(String key, double value) {
if (keyExists(key))
return getDouble(key);
setDouble(key, value);
return value;
}
public abstract int getInt(String key);
public int getInt(String key, int value) {
if (keyExists(key))
return getInt(key);
setInt(key, value);
return value;
}
public Iterable<DataKey> getIntegerSubKeys() {
return Iterables.filter(getSubKeys(), SIMPLE_INTEGER_FILTER);
}
public abstract long getLong(String key);
public long getLong(String key, long value) {
if (keyExists(key))
return getLong(key);
setLong(key, value);
return value;
}
public abstract Object getRaw(String key);
public DataKey getRelative(int key) {
return getRelative(Integer.toString(key));
}
public abstract DataKey getRelative(String relative);
public abstract String getString(String key);
public String getString(String key, String value) {
if (keyExists(key))
return getString(key);
setString(key, value);
return value;
}
public abstract Iterable<DataKey> getSubKeys();
public abstract Map<String, Object> getValuesDeep();
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((path == null) ? 0 : path.hashCode());
return result;
}
public abstract boolean keyExists(String key);
public abstract String name();
public abstract void removeKey(String key);
public abstract void setBoolean(String key, boolean value);
public abstract void setDouble(String key, double value);
public abstract void setInt(String key, int value);
public abstract void setLong(String key, long value);
public abstract void setRaw(String key, Object value);
public abstract void setString(String key, String value);
private static final Predicate<DataKey> SIMPLE_INTEGER_FILTER = new Predicate<DataKey>() {
@Override
public boolean apply(DataKey key) {
try {
Integer.parseInt(key.name());
return true;
} catch (NumberFormatException ex) {
return false;
}
}
};
}