99 lines
3.7 KiB
Java
99 lines
3.7 KiB
Java
package tc.oc.commons.core.configuration;
|
|
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
import java.util.Collection;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.function.Predicate;
|
|
import javax.annotation.Nullable;
|
|
|
|
import com.google.common.collect.ImmutableList;
|
|
import com.google.common.collect.ImmutableSet;
|
|
import java.time.Duration;
|
|
import tc.oc.commons.core.util.Predicates;
|
|
import tc.oc.commons.core.util.TimeUtils;
|
|
import tc.oc.minecraft.api.configuration.ConfigurationSection;
|
|
import tc.oc.minecraft.api.configuration.InvalidConfigurationException;
|
|
|
|
public final class ConfigUtils {
|
|
private ConfigUtils() {}
|
|
|
|
public static List<String> getStringList(ConfigurationSection section, String path, List<String> def) {
|
|
final Collection<String> v = (Collection<String>) section.get(path);
|
|
return v != null ? ImmutableList.copyOf(v) : def;
|
|
}
|
|
|
|
public static Set<String> getStringSet(ConfigurationSection section, String path, Set<String> def) {
|
|
final Collection<String> v = (Collection<String>) section.get(path);
|
|
return v != null ? ImmutableSet.copyOf(v) : def;
|
|
}
|
|
|
|
public static Set<String> getStringSet(ConfigurationSection section, String path) {
|
|
return getStringSet(section, path, Collections.emptySet());
|
|
}
|
|
|
|
public static Predicate<String> getStringSetPredicate(ConfigurationSection section, String path, Predicate<String> def) {
|
|
Set<String> set = getStringSet(section, path, null);
|
|
return set != null ? set::contains : def;
|
|
}
|
|
|
|
public static Predicate<String> getStringSetPredicate(ConfigurationSection section, String path) {
|
|
return getStringSetPredicate(section, path, Predicates.alwaysFalse());
|
|
}
|
|
|
|
public static Duration getDuration(ConfigurationSection section, String path, Duration def) {
|
|
return TimeUtils.parseDuration(section.getString(path), def);
|
|
}
|
|
|
|
public static @Nullable Duration getDuration(ConfigurationSection section, String path) {
|
|
return getDuration(section, path, null);
|
|
}
|
|
|
|
public static URL needUrl(ConfigurationSection section, String path) {
|
|
return parseUrl(section, path, section.needString(path), null);
|
|
}
|
|
|
|
public static @Nullable URL getUrl(ConfigurationSection section, String path) {
|
|
return getUrl(section, path, null);
|
|
}
|
|
|
|
public static URL getUrl(ConfigurationSection section, String path, URL def) {
|
|
return parseUrl(section, path, section.getString(path), def);
|
|
}
|
|
|
|
private static URL parseUrl(ConfigurationSection section, String path, @Nullable String value, URL def) {
|
|
try {
|
|
return value == null ? def : new URL(value);
|
|
} catch(MalformedURLException e) {
|
|
throw new InvalidConfigurationException(section, path, e.getMessage());
|
|
}
|
|
}
|
|
|
|
private static void buildDeepMap(Map<String, Object> map, ConfigurationSection section, String prefix) {
|
|
for(String key : section.getKeys()) {
|
|
final Object obj = section.get(key);
|
|
if(obj instanceof ConfigurationSection || obj instanceof Map) {
|
|
buildDeepMap(map, section.getSection(key), prefix + key + ".");
|
|
} else {
|
|
map.put(prefix + key, obj);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static Map<String, Object> asMap(ConfigurationSection section, boolean deep) {
|
|
Map<String, Object> map = new HashMap<>();
|
|
if(deep) {
|
|
buildDeepMap(map, section, "");
|
|
} else {
|
|
for(String key : section.getKeys()) {
|
|
map.put(key, section.get(key));
|
|
}
|
|
}
|
|
return map;
|
|
}
|
|
}
|