From f90f7bd06315fe4edc9817fe9b50adf39622826b Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 10 Jun 2021 00:16:14 -0700 Subject: [PATCH] more metaconfig API --- .../terra/api/config/meta/MetaContext.java | 12 +++++++++- .../terra/api/config/meta/MetaValue.java | 5 ++-- .../meta/specific/number/MetaNumber.java | 6 +++++ .../loaders/meta/GenericMetaValueLoader.java | 24 +++++++++++++++++++ .../config/loaders/meta/MetaValueLoader.java | 2 +- 5 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 common/src/main/java/com/dfsek/terra/api/config/meta/specific/number/MetaNumber.java create mode 100644 common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java diff --git a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaContext.java b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaContext.java index bee5b7c82..4535c3f09 100644 --- a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaContext.java +++ b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaContext.java @@ -4,5 +4,15 @@ package com.dfsek.terra.api.config.meta; * Context from which to pull {@link MetaValue}s */ public interface MetaContext { - T load(Object metaCandidate); + T load(Object in, Class clazz); + + /** + * Load method for when class is unknown. + * + * @param in Object to load/load metavalue for + * @return Loaded object + */ + default Object load(Object in) { + return load(in, in.getClass()); + } } diff --git a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java index 0e27efe24..6e2f3d23b 100644 --- a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java +++ b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java @@ -1,5 +1,6 @@ package com.dfsek.terra.api.config.meta; -public interface MetaValue { - T load(MetaContext context); +import java.util.function.Supplier; + +public interface MetaValue extends Supplier { } diff --git a/common/src/main/java/com/dfsek/terra/api/config/meta/specific/number/MetaNumber.java b/common/src/main/java/com/dfsek/terra/api/config/meta/specific/number/MetaNumber.java new file mode 100644 index 000000000..ecb49cc90 --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/config/meta/specific/number/MetaNumber.java @@ -0,0 +1,6 @@ +package com.dfsek.terra.api.config.meta.specific.number; + +import com.dfsek.terra.api.config.meta.MetaValue; + +public interface MetaNumber extends MetaValue { +} diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java b/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java new file mode 100644 index 000000000..cdf88fab4 --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.config.loaders.meta; + +import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.ConfigLoader; +import com.dfsek.terra.api.config.meta.MetaContext; +import com.dfsek.terra.api.config.meta.MetaValue; + +import java.lang.reflect.Type; + +public class GenericMetaValueLoader extends MetaValueLoader, Object> { + protected GenericMetaValueLoader(MetaContext context) { + super(context); + } + + @Override + public MetaValue load(Type t, Object c, ConfigLoader loader) throws LoadException { + return null; + } + + @Override + public Object get() { + return null; + } +} diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/meta/MetaValueLoader.java b/common/src/main/java/com/dfsek/terra/config/loaders/meta/MetaValueLoader.java index d554f6297..014ee4a6b 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/meta/MetaValueLoader.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/meta/MetaValueLoader.java @@ -7,7 +7,7 @@ import com.dfsek.terra.api.config.meta.MetaValue; import java.util.function.Supplier; public abstract class MetaValueLoader, T> implements TypeLoader, Supplier { - private final MetaContext context; + protected final MetaContext context; protected MetaValueLoader(MetaContext context) { this.context = context;