From: David ‘Bombe’ Roden Date: Sun, 10 Nov 2024 21:05:57 +0000 (+0100) Subject: 🚸 Ignore configured parameters for email actions X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=3bee10cadd3566c9cb98ec6cda82dd256106e396;p=rhynodge.git 🚸 Ignore configured parameters for email actions --- diff --git a/src/main/java/net/pterodactylus/rhynodge/engine/Starter.java b/src/main/java/net/pterodactylus/rhynodge/engine/Starter.java index 477a755..20611c1 100644 --- a/src/main/java/net/pterodactylus/rhynodge/engine/Starter.java +++ b/src/main/java/net/pterodactylus/rhynodge/engine/Starter.java @@ -51,6 +51,9 @@ public class Starter { createErrorEmailAction(options.smtpHostname, options.errorEmailSender, options.errorEmailRecipient); Injector injector = Guice.createInjector(Arrays.asList( + ObjectBinding.forClass(String.class).named("smtpHostname").is(options.smtpHostname), + ObjectBinding.forClass(String.class).named("emailSender").is(options.emailSender), + ObjectBinding.forClass(String.class).named("emailRecipient").is(options.emailRecipient), ObjectBinding.forClass(StateDirectory.class).is(StateDirectory.of(options.stateDirectory)), ObjectBinding.forClass(ChainDirectory.class).is(ChainDirectory.of(options.chainDirectory)), ObjectBinding.forClass(EmailAction.class).is(errorEmailAction) diff --git a/src/main/java/net/pterodactylus/rhynodge/loader/ChainWatcher.java b/src/main/java/net/pterodactylus/rhynodge/loader/ChainWatcher.java index 2dc071d..eae0505 100644 --- a/src/main/java/net/pterodactylus/rhynodge/loader/ChainWatcher.java +++ b/src/main/java/net/pterodactylus/rhynodge/loader/ChainWatcher.java @@ -61,7 +61,7 @@ public class ChainWatcher extends AbstractExecutionThreadService { private static final ObjectMapper objectMapper = new ObjectMapper(); /** The reaction loader. */ - private final ReactionLoader reactionLoader = new ReactionLoader(); + private final ReactionLoader reactionLoader; /** The engine to load reactions with. */ private final Engine engine; @@ -78,9 +78,10 @@ public class ChainWatcher extends AbstractExecutionThreadService { * The directory to watch */ @Inject - public ChainWatcher(Engine engine, ChainDirectory directory) { + public ChainWatcher(Engine engine, ChainDirectory directory, ReactionLoader reactionLoader) { this.engine = engine; this.directory = directory.getDirectory(); + this.reactionLoader = reactionLoader; } // diff --git a/src/main/java/net/pterodactylus/rhynodge/loader/ReactionLoader.java b/src/main/java/net/pterodactylus/rhynodge/loader/ReactionLoader.java index 94009af..d358c23 100644 --- a/src/main/java/net/pterodactylus/rhynodge/loader/ReactionLoader.java +++ b/src/main/java/net/pterodactylus/rhynodge/loader/ReactionLoader.java @@ -23,6 +23,8 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; +import jakarta.inject.Inject; +import jakarta.inject.Named; import net.pterodactylus.rhynodge.Action; import net.pterodactylus.rhynodge.Filter; import net.pterodactylus.rhynodge.Query; @@ -39,6 +41,13 @@ import net.pterodactylus.rhynodge.Merger; */ public class ReactionLoader { + @Inject + public ReactionLoader(@Named("smtpHostname") String smtpHostname, @Named("emailSender") String emailSender, @Named("emailRecipient") String emailRecipient) { + this.smtpHostname = smtpHostname; + this.emailSender = emailSender; + this.emailRecipient = emailRecipient; + } + /** * Creates a {@link Reaction} from the given {@link Chain}. * @@ -48,7 +57,6 @@ public class ReactionLoader { * @throws LoaderException * if a class can not be loaded */ - @SuppressWarnings("static-method") public Reaction loadReaction(Chain chain) throws LoaderException { /* check if chain is enabled. */ @@ -78,7 +86,7 @@ public class ReactionLoader { /* create filters. */ List filters = new ArrayList(); for (Part filterPart : chain.filters()) { - filters.add(ReactionLoader. createObject(filterPart.name(), "net.pterodactylus.rhynodge.filters", extractParameters(filterPart.parameters()))); + filters.add(createObject(filterPart.name(), "net.pterodactylus.rhynodge.filters", extractParameters(filterPart.parameters()))); } /* create merger. */ @@ -103,7 +111,7 @@ public class ReactionLoader { * The parameters to extract the values from * @return The extracted values */ - private static List extractParameters(List parameters) { + private List extractParameters(List parameters) { List parameterValues = new ArrayList(); for (Parameter parameter : parameters) { @@ -136,7 +144,7 @@ public class ReactionLoader { * if the object can not be created */ @SuppressWarnings("unchecked") - private static T createObject(String className, String packageName, List parameters) throws LoaderException { + private T createObject(String className, String packageName, List parameters) throws LoaderException { /* try to load class without package name. */ Class objectClass = null; @@ -155,11 +163,13 @@ public class ReactionLoader { } } + var effectiveParameters = overrideParameters(className, parameters); + /* locate an eligible constructor. */ Constructor wantedConstructor = null; for (Constructor constructor : objectClass.getConstructors()) { Class[] parameterTypes = constructor.getParameterTypes(); - if (parameterTypes.length != parameters.size()) { + if (parameterTypes.length != effectiveParameters.size()) { continue; } boolean compatibleTypes = true; @@ -180,7 +190,7 @@ public class ReactionLoader { } try { - return (T) wantedConstructor.newInstance(parameters.toArray()); + return (T) wantedConstructor.newInstance(effectiveParameters.toArray()); } catch (IllegalArgumentException iae1) { throw new LoaderException("Could not invoke constructor.", iae1); } catch (InstantiationException ie1) { @@ -193,4 +203,15 @@ public class ReactionLoader { } + private List overrideParameters(String className, List parameters) { + if (className.equals("EmailAction")) { + return List.of(smtpHostname, emailSender, emailRecipient); + } + return parameters; + } + + private final String smtpHostname; + private final String emailSender; + private final String emailRecipient; + }