diff --git a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/ManifestAddonLoader.java b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/ManifestAddonLoader.java index 5dedb696a..fd12f4ea8 100644 --- a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/ManifestAddonLoader.java +++ b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/ManifestAddonLoader.java @@ -1,15 +1,26 @@ package com.dfsek.terra.addons.manifest.impl; -import com.dfsek.terra.api.addon.BaseAddon; -import com.dfsek.terra.api.addon.bootstrap.BootstrapBaseAddon; +import ca.solostudios.strata.version.Version; +import ca.solostudios.strata.version.VersionRange; +import com.dfsek.tectonic.loading.ConfigLoader; import java.nio.file.Path; import java.util.Collections; +import com.dfsek.terra.addons.manifest.impl.config.WebsiteConfig; +import com.dfsek.terra.addons.manifest.impl.config.loaders.VersionLoader; +import com.dfsek.terra.addons.manifest.impl.config.loaders.VersionRangeLoader; +import com.dfsek.terra.api.addon.BaseAddon; +import com.dfsek.terra.api.addon.bootstrap.BootstrapBaseAddon; + public class ManifestAddonLoader implements BootstrapBaseAddon { @Override public Iterable loadAddons(Path addonsFolder, ClassLoader parent) { + ConfigLoader manifestLoader = new ConfigLoader(); + manifestLoader.registerLoader(Version.class, new VersionLoader()) + .registerLoader(VersionRange.class, new VersionRangeLoader()) + .registerLoader(WebsiteConfig.class, WebsiteConfig::new); return Collections.emptySet(); } diff --git a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/AddonManifest.java b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/AddonManifest.java index 1c104a64e..65a1fa3f3 100644 --- a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/AddonManifest.java +++ b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/AddonManifest.java @@ -1,6 +1,7 @@ package com.dfsek.terra.addons.manifest.impl.config; import ca.solostudios.strata.version.Version; +import ca.solostudios.strata.version.VersionRange; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.config.ConfigTemplate; @@ -9,6 +10,7 @@ import com.dfsek.terra.api.util.StringIdentifiable; import java.util.Collections; import java.util.List; +import java.util.Map; @SuppressWarnings("FieldMayBeFinal") @@ -33,7 +35,7 @@ public class AddonManifest implements ConfigTemplate, StringIdentifiable { @Value("depends") @Default - private List dependencies = Collections.emptyList(); + private Map dependencies; @Value("website") private WebsiteConfig website; @@ -67,7 +69,7 @@ public class AddonManifest implements ConfigTemplate, StringIdentifiable { return website; } - public List getDependencies() { + public Map getDependencies() { return dependencies; } } diff --git a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/DependencyConfig.java b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/DependencyConfig.java deleted file mode 100644 index 95d14345a..000000000 --- a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/DependencyConfig.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.dfsek.terra.addons.manifest.impl.config; - -public class DependencyConfig { -} diff --git a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/loaders/VersionLoader.java b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/loaders/VersionLoader.java new file mode 100644 index 000000000..2f477fee6 --- /dev/null +++ b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/loaders/VersionLoader.java @@ -0,0 +1,22 @@ +package com.dfsek.terra.addons.manifest.impl.config.loaders; + +import ca.solostudios.strata.Versions; +import ca.solostudios.strata.parser.tokenizer.ParseException; +import ca.solostudios.strata.version.Version; +import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.ConfigLoader; +import com.dfsek.tectonic.loading.TypeLoader; + +import java.lang.reflect.AnnotatedType; + + +public class VersionLoader implements TypeLoader { + @Override + public Version load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException { + try { + return Versions.parseVersion((String) c); + } catch(ParseException e) { + throw new LoadException("Failed to parse version", e); + } + } +} diff --git a/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/loaders/VersionRangeLoader.java b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/loaders/VersionRangeLoader.java new file mode 100644 index 000000000..00f427689 --- /dev/null +++ b/common/addons/manifest-addon-loader/src/main/java/com/dfsek/terra/addons/manifest/impl/config/loaders/VersionRangeLoader.java @@ -0,0 +1,22 @@ +package com.dfsek.terra.addons.manifest.impl.config.loaders; + +import ca.solostudios.strata.Versions; +import ca.solostudios.strata.parser.tokenizer.ParseException; +import ca.solostudios.strata.version.VersionRange; +import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.ConfigLoader; +import com.dfsek.tectonic.loading.TypeLoader; + +import java.lang.reflect.AnnotatedType; + + +public class VersionRangeLoader implements TypeLoader { + @Override + public VersionRange load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException { + try { + return Versions.parseVersionRange((String) c); + } catch(ParseException e) { + throw new LoadException("Failed to parse version range", e); + } + } +}