From 58a5160d533d042126b8677300da0f173998cfe9 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 5 Jul 2021 02:05:26 -0700 Subject: [PATCH] api to access Loader --- .../dfsek/terra/api/config/ConfigPack.java | 2 + .../com/dfsek/terra/api/config/Loader.java | 45 +++++++++++++++++++ .../terra/api/util}/ExceptionalConsumer.java | 2 +- .../config/fileloaders/FolderLoader.java | 3 +- .../{Loader.java => LoaderImpl.java} | 21 ++++----- .../terra/config/fileloaders/ZIPLoader.java | 3 +- .../loaders/config/BufferedImageLoader.java | 2 +- .../terra/config/pack/ConfigPackImpl.java | 7 ++- 8 files changed, 66 insertions(+), 19 deletions(-) create mode 100644 common/api/src/main/java/com/dfsek/terra/api/config/Loader.java rename common/{implementation/src/main/java/com/dfsek/terra/config/fileloaders => api/src/main/java/com/dfsek/terra/api/util}/ExceptionalConsumer.java (78%) rename common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/{Loader.java => LoaderImpl.java} (83%) diff --git a/common/api/src/main/java/com/dfsek/terra/api/config/ConfigPack.java b/common/api/src/main/java/com/dfsek/terra/api/config/ConfigPack.java index 7a7b45a8e..25543703c 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/config/ConfigPack.java +++ b/common/api/src/main/java/com/dfsek/terra/api/config/ConfigPack.java @@ -21,6 +21,8 @@ public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolde void registerConfigType(ConfigType type, String id, int priority); + Loader getLoader(); + Set addons(); String getID(); diff --git a/common/api/src/main/java/com/dfsek/terra/api/config/Loader.java b/common/api/src/main/java/com/dfsek/terra/api/config/Loader.java new file mode 100644 index 000000000..596ec8b63 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/config/Loader.java @@ -0,0 +1,45 @@ +package com.dfsek.terra.api.config; + +import com.dfsek.tectonic.config.Configuration; +import com.dfsek.tectonic.exception.ConfigException; +import com.dfsek.terra.api.util.ExceptionalConsumer; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public interface Loader { + /** + * Do something with the InputStreams. + * + * @param consumer Something to do with the streams. + */ + Loader then(ExceptionalConsumer> consumer) throws ConfigException; + + Loader thenNames(ExceptionalConsumer> consumer) throws ConfigException; + + Loader thenEntries(ExceptionalConsumer>> consumer) throws ConfigException; + + /** + * Get a single file from this Loader. + * + * @param singleFile File to get + * @return InputStream from file. + */ + InputStream get(String singleFile) throws IOException; + + /** + * Open a subdirectory. + * + * @param directory Directory to open + * @param extension + */ + Loader open(String directory, String extension); + + /** + * Close all InputStreams opened. + */ + Loader close(); +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ExceptionalConsumer.java b/common/api/src/main/java/com/dfsek/terra/api/util/ExceptionalConsumer.java similarity index 78% rename from common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ExceptionalConsumer.java rename to common/api/src/main/java/com/dfsek/terra/api/util/ExceptionalConsumer.java index 9037f4d00..2c80c66f1 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ExceptionalConsumer.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/ExceptionalConsumer.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.config.fileloaders; +package com.dfsek.terra.api.util; import com.dfsek.tectonic.exception.ConfigException; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/FolderLoader.java b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/FolderLoader.java index f27728d92..b1ebb1aea 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/FolderLoader.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/FolderLoader.java @@ -12,7 +12,7 @@ import java.util.stream.Stream; /** * Load all {@code *.yml} files from a {@link java.nio.file.Path}. */ -public class FolderLoader extends Loader { +public class FolderLoader extends LoaderImpl { private final Path path; public FolderLoader(Path path) { @@ -24,7 +24,6 @@ public class FolderLoader extends Loader { return new FileInputStream(new File(path.toFile(), singleFile)); } - @Override protected void load(String directory, String extension) { File newPath = new File(path.toFile(), directory); newPath.mkdirs(); diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/Loader.java b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java similarity index 83% rename from common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/Loader.java rename to common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java index b80abe274..19744af05 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/Loader.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/LoaderImpl.java @@ -2,6 +2,8 @@ package com.dfsek.terra.config.fileloaders; import com.dfsek.tectonic.config.Configuration; import com.dfsek.tectonic.exception.ConfigException; +import com.dfsek.terra.api.config.Loader; +import com.dfsek.terra.api.util.ExceptionalConsumer; import com.dfsek.terra.api.util.GlueList; import java.io.IOException; @@ -11,7 +13,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -public abstract class Loader { +public abstract class LoaderImpl implements Loader { protected final Map streams = new HashMap<>(); /** @@ -19,6 +21,7 @@ public abstract class Loader { * * @param consumer Something to do with the streams. */ + @Override public Loader then(ExceptionalConsumer> consumer) throws ConfigException { List list = new GlueList<>(); streams.forEach((id, stream) -> { @@ -28,41 +31,35 @@ public abstract class Loader { return this; } + @Override public Loader thenNames(ExceptionalConsumer> consumer) throws ConfigException { consumer.accept(new GlueList<>(streams.keySet())); return this; } + @Override public Loader thenEntries(ExceptionalConsumer>> consumer) throws ConfigException { consumer.accept(streams.entrySet()); return this; } - /** - * Get a single file from this Loader. - * - * @param singleFile File to get - * @return InputStream from file. - */ - public abstract InputStream get(String singleFile) throws IOException; - /** * Open a subdirectory. * * @param directory Directory to open * @param extension */ - public Loader open(String directory, String extension) { + @Override + public LoaderImpl open(String directory, String extension) { if(streams.size() != 0) throw new IllegalStateException("Attempted to load new directory before closing existing InputStreams"); load(directory, extension); return this; } - protected abstract void load(String directory, String extension); - /** * Close all InputStreams opened. */ + @Override public Loader close() { streams.forEach((name, input) -> { try { diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ZIPLoader.java b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ZIPLoader.java index fd571baa9..573494354 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ZIPLoader.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/fileloaders/ZIPLoader.java @@ -6,7 +6,7 @@ import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -public class ZIPLoader extends Loader { +public class ZIPLoader extends LoaderImpl { private final ZipFile file; public ZIPLoader(ZipFile file) { @@ -23,7 +23,6 @@ public class ZIPLoader extends Loader { throw new IllegalArgumentException("No such file: " + singleFile); } - @Override protected void load(String directory, String extension) { Enumeration entries = file.entries(); while(entries.hasMoreElements()) { diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/BufferedImageLoader.java b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/BufferedImageLoader.java index 191477d4c..0b450ea67 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/BufferedImageLoader.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/BufferedImageLoader.java @@ -3,7 +3,7 @@ package com.dfsek.terra.config.loaders.config; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeLoader; -import com.dfsek.terra.config.fileloaders.Loader; +import com.dfsek.terra.api.config.Loader; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index 8b34f9f89..f6e9a988c 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -17,6 +17,7 @@ import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; +import com.dfsek.terra.api.config.Loader; import com.dfsek.terra.api.event.events.config.ConfigPackPostLoadEvent; import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent; import com.dfsek.terra.api.registry.CheckedRegistry; @@ -31,7 +32,6 @@ import com.dfsek.terra.api.world.TerraWorld; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.config.dummy.DummyWorld; import com.dfsek.terra.config.fileloaders.FolderLoader; -import com.dfsek.terra.config.fileloaders.Loader; import com.dfsek.terra.config.fileloaders.ZIPLoader; import com.dfsek.terra.config.loaders.config.BufferedImageLoader; import com.dfsek.terra.config.prototype.ProtoConfig; @@ -318,6 +318,11 @@ public class ConfigPackImpl implements ConfigPack { configTypes.computeIfAbsent(priority, p -> new ArrayList<>()).add(ImmutablePair.of(id, type)); } + @Override + public Loader getLoader() { + return loader; + } + @Override public Set addons() { return template.getAddons();