mirror of
https://github.com/CarmJos/EasyConfiguration.git
synced 2026-06-04 10:38:19 +08:00
feat: Optimized comments & sections behavior
This commit is contained in:
@@ -10,12 +10,6 @@ import java.util.Arrays;
|
||||
|
||||
public class PrimitiveAdapter<T> extends ValueAdapter<T> {
|
||||
|
||||
public static final PrimitiveAdapter<?>[] ADAPTERS = new PrimitiveAdapter[]{
|
||||
ofString(), ofBoolean(), ofBooleanType(), ofCharacter(), ofCharacterType(),
|
||||
ofInteger(), ofIntegerType(), ofLong(), ofLongType(), ofDouble(), ofDoubleType(),
|
||||
ofFloat(), ofFloatType(), ofShort(), ofShortType(), ofByte(), ofByteType()
|
||||
};
|
||||
|
||||
public static final String[] TRUE_VALUES = new String[]{
|
||||
"true", "yes", "on", "1", "enabled", "enable", "active"
|
||||
};
|
||||
|
||||
+12
-1
@@ -3,10 +3,21 @@ package cc.carm.lib.configuration.adapter.strandard;
|
||||
import cc.carm.lib.configuration.adapter.ValueAdapter;
|
||||
import cc.carm.lib.configuration.adapter.ValueType;
|
||||
import cc.carm.lib.configuration.source.section.ConfigureSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static cc.carm.lib.configuration.adapter.strandard.PrimitiveAdapter.*;
|
||||
|
||||
public interface StandardAdapters {
|
||||
|
||||
ValueAdapter<ConfigureSection> SECTION_ADAPTER = new ValueAdapter<>(
|
||||
@NotNull PrimitiveAdapter<?>[] PRIMITIVES = new PrimitiveAdapter[]{
|
||||
ofString(), ofBoolean(), ofBooleanType(), ofCharacter(), ofCharacterType(),
|
||||
ofInteger(), ofIntegerType(), ofLong(), ofLongType(), ofDouble(), ofDoubleType(),
|
||||
ofFloat(), ofFloatType(), ofShort(), ofShortType(), ofByte(), ofByteType()
|
||||
};
|
||||
|
||||
@NotNull ValueAdapter<Enum<?>> ENUMS = PrimitiveAdapter.ofEnum();
|
||||
|
||||
@NotNull ValueAdapter<ConfigureSection> SECTIONS = new ValueAdapter<>(
|
||||
ValueType.of(ConfigureSection.class),
|
||||
(provider, type, value) -> value,
|
||||
(provider, type, value) -> {
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
package cc.carm.lib.configuration.source;
|
||||
|
||||
import cc.carm.lib.configuration.adapter.*;
|
||||
import cc.carm.lib.configuration.adapter.strandard.PrimitiveAdapter;
|
||||
import cc.carm.lib.configuration.adapter.strandard.StandardAdapters;
|
||||
import cc.carm.lib.configuration.function.DataFunction;
|
||||
import cc.carm.lib.configuration.source.loader.ConfigurationInitializer;
|
||||
import cc.carm.lib.configuration.source.loader.PathGenerator;
|
||||
import cc.carm.lib.configuration.source.meta.ConfigurationMetaHolder;
|
||||
import cc.carm.lib.configuration.source.meta.ConfigurationMetadata;
|
||||
import cc.carm.lib.configuration.source.option.ConfigurationOption;
|
||||
import cc.carm.lib.configuration.source.option.ConfigurationOptionHolder;
|
||||
import cc.carm.lib.configuration.source.section.ConfigureSource;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
@@ -25,11 +28,13 @@ public abstract class ConfigurationFactory<
|
||||
|
||||
protected ValueAdapterRegistry adapters = new ValueAdapterRegistry();
|
||||
protected ConfigurationOptionHolder options = new ConfigurationOptionHolder();
|
||||
protected @NotNull Map<String, ConfigurationMetaHolder> metadata = new HashMap<>();
|
||||
protected ConfigurationInitializer initializer = new ConfigurationInitializer();
|
||||
|
||||
public ConfigurationFactory() {
|
||||
this.adapters.register(PrimitiveAdapter.ADAPTERS);
|
||||
this.adapters.register(StandardAdapters.SECTION_ADAPTER);
|
||||
this.adapters.register(StandardAdapters.PRIMITIVES);
|
||||
this.adapters.register(StandardAdapters.SECTIONS);
|
||||
this.adapters.register(StandardAdapters.ENUMS);
|
||||
}
|
||||
|
||||
protected abstract SELF self();
|
||||
@@ -102,6 +107,27 @@ public abstract class ConfigurationFactory<
|
||||
});
|
||||
}
|
||||
|
||||
public SELF metadata(@NotNull Map<String, ConfigurationMetaHolder> metadata) {
|
||||
this.metadata = metadata;
|
||||
return self();
|
||||
}
|
||||
|
||||
public SELF metadata(@NotNull Consumer<Map<String, ConfigurationMetaHolder>> handler) {
|
||||
handler.accept(this.metadata);
|
||||
return self();
|
||||
}
|
||||
|
||||
public SELF metadata(@Nullable String path, @NotNull ConfigurationMetaHolder meta) {
|
||||
return metadata(m -> m.put(path, meta));
|
||||
}
|
||||
|
||||
public SELF metadata(@Nullable String path, @NotNull Consumer<ConfigurationMetaHolder> handler) {
|
||||
return metadata(map -> {
|
||||
ConfigurationMetaHolder meta = map.computeIfAbsent(path, k -> new ConfigurationMetaHolder());
|
||||
handler.accept(meta);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public SELF initializer(ConfigurationInitializer initializer) {
|
||||
this.initializer = initializer;
|
||||
|
||||
@@ -5,13 +5,17 @@ import cc.carm.lib.configuration.adapter.ValueAdapterRegistry;
|
||||
import cc.carm.lib.configuration.adapter.ValueType;
|
||||
import cc.carm.lib.configuration.source.loader.ConfigurationInitializer;
|
||||
import cc.carm.lib.configuration.source.meta.ConfigurationMetaHolder;
|
||||
import cc.carm.lib.configuration.source.meta.ConfigurationMetadata;
|
||||
import cc.carm.lib.configuration.source.option.ConfigurationOptionHolder;
|
||||
import cc.carm.lib.configuration.source.section.ConfigureSource;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.UnmodifiableView;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class ConfigurationHolder<SOURCE extends ConfigureSource<?, ?, SOURCE>> {
|
||||
@@ -54,6 +58,16 @@ public abstract class ConfigurationHolder<SOURCE extends ConfigureSource<?, ?, S
|
||||
return metadata().computeIfAbsent(path, k -> new ConfigurationMetaHolder());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@UnmodifiableView
|
||||
public <M> Map<String, M> extractMetadata(@NotNull ConfigurationMetadata<M> type) {
|
||||
Map<String, M> metas = new LinkedHashMap<>();
|
||||
for (Map.Entry<String, ConfigurationMetaHolder> entry : this.metadata.entrySet()) {
|
||||
M data = entry.getValue().get(type);
|
||||
if (data != null) metas.put(entry.getKey(), data);
|
||||
}
|
||||
return Collections.unmodifiableMap(metas);
|
||||
}
|
||||
|
||||
public ValueAdapterRegistry adapters() {
|
||||
return this.adapters;
|
||||
|
||||
@@ -72,7 +72,7 @@ public abstract class ConfigValue<T> extends ValueManifest<T> {
|
||||
*
|
||||
* @return Non-null value
|
||||
* @throws NullPointerException Thrown when the corresponding data is null
|
||||
* @see #resolve()
|
||||
* @see #resolve() for a more descriptive function
|
||||
*/
|
||||
public @NotNull T getNotNull() {
|
||||
return resolve();
|
||||
@@ -114,7 +114,7 @@ public abstract class ConfigValue<T> extends ValueManifest<T> {
|
||||
*/
|
||||
public void setDefault(boolean override) {
|
||||
if (!override && config().contains(path())) return;
|
||||
Optional.ofNullable(defaults()).ifPresent(this::set);
|
||||
set(defaults()); // Set the default value
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user