initialize manifest addons

This commit is contained in:
dfsek
2021-11-17 16:22:14 -07:00
parent 42ece3f27a
commit a5d9fca932
2 changed files with 31 additions and 7 deletions

View File

@@ -1,14 +1,26 @@
package com.dfsek.terra.addons.manifest.impl;
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.addons.manifest.impl.config.AddonManifest;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.inject.Injector;
import com.dfsek.terra.api.inject.annotations.Inject;
import java.util.List;
public class ManifestAddon implements BaseAddon {
private final AddonManifest manifest;
public ManifestAddon(AddonManifest manifest) {
private final List<AddonInitializer> initializers;
@Inject
private Platform platform;
public ManifestAddon(AddonManifest manifest, List<AddonInitializer> initializers) {
this.manifest = manifest;
this.initializers = initializers;
}
@Override
@@ -17,6 +29,18 @@ public class ManifestAddon implements BaseAddon {
}
public void initialize() {
Injector<BaseAddon> addonInjector = Injector.get(this);
addonInjector.addExplicitTarget(BaseAddon.class);
Injector<Platform> platformInjector = Injector.get(platform);
platformInjector.addExplicitTarget(Platform.class);
platform.logger().info("Initializing addon " + getID());
initializers.forEach(initializer -> {
addonInjector.inject(initializer);
platformInjector.inject(initializer);
initializer.initialize();
});
}
}

View File

@@ -45,7 +45,7 @@ public class ManifestAddonLoader implements BootstrapBaseAddon<ManifestAddon> {
try {
return Files.walk(addonsFolder, 1)
.filter(path -> path.toFile().isFile() && path.toString().endsWith(".jar"))
.flatMap(path -> {
.map(path -> {
try {
platform.getDebugLogger().info("Loading addon from JAR " + path);
JarFile jar = new JarFile(path.toFile());
@@ -66,14 +66,14 @@ public class ManifestAddonLoader implements BootstrapBaseAddon<ManifestAddon> {
ManifestAddonClassLoader loader = new ManifestAddonClassLoader(new URL[]{ path.toUri().toURL() },
getClass().getClassLoader());
return manifest.getEntryPoints().stream().map(entryPoint -> {
return new ManifestAddon(manifest, manifest.getEntryPoints().stream().map(entryPoint -> {
try {
Object in = loader.loadClass(entryPoint).getConstructor().newInstance();
if(!(in instanceof AddonInitializer)) {
throw new AddonException(in.getClass() + " does not extend " + AddonInitializer.class);
}
return new ManifestAddon(manifest);
return (AddonInitializer) in;
} catch(InvocationTargetException e) {
throw new AddonException("Exception occurred while instantiating addon: ", e);
} catch(NoSuchMethodException | IllegalAccessException | InstantiationException e) {
@@ -81,7 +81,7 @@ public class ManifestAddonLoader implements BootstrapBaseAddon<ManifestAddon> {
} catch(ClassNotFoundException e) {
throw new AddonException("Entry point " + entryPoint + " not found in JAR.");
}
});
}).collect(Collectors.toList()));
} catch(LoadException e) {
throw new ManifestException("Failed to load addon manifest", e);