ProjectAres/Util/core/src/main/java/tc/oc/commons/core/configuration/ConfigUtils.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;
}
}