From 070319853aff34a1d72286a6b842a7390755c95b Mon Sep 17 00:00:00 2001 From: tueem Date: Mon, 7 Apr 2025 00:35:06 +0200 Subject: [PATCH] refactor(core): restructure MethodProcessors --- .../net/tomatentum/marinara/Marinara.java | 16 ++++---- .../AutocompleteInteractionProcessor.java | 21 ++++++---- .../processor/DirectInteractionProcessor.java | 23 ++++------- .../processor/InteractionMethodProcessor.java | 35 ++++++++++++++++ .../processor/InteractionProcessor.java | 10 ----- .../marinara/reflection/MethodExecutor.java | 7 ++++ .../marinara/reflection/MethodProcessor.java | 7 ++++ .../reflection/ProcessorContainer.java | 7 ++++ .../reflection/ProcessorMethodExecutor.java | 32 +++++++++++++++ .../registry/InteractionExecutor.java | 7 ---- .../ProcessorInteractionExecutor.java | 41 ------------------- 11 files changed, 120 insertions(+), 86 deletions(-) create mode 100644 lib/src/main/java/net/tomatentum/marinara/interaction/processor/InteractionMethodProcessor.java delete mode 100644 lib/src/main/java/net/tomatentum/marinara/interaction/processor/InteractionProcessor.java create mode 100644 lib/src/main/java/net/tomatentum/marinara/reflection/MethodExecutor.java create mode 100644 lib/src/main/java/net/tomatentum/marinara/reflection/MethodProcessor.java create mode 100644 lib/src/main/java/net/tomatentum/marinara/reflection/ProcessorContainer.java create mode 100644 lib/src/main/java/net/tomatentum/marinara/reflection/ProcessorMethodExecutor.java delete mode 100644 lib/src/main/java/net/tomatentum/marinara/registry/InteractionExecutor.java delete mode 100644 lib/src/main/java/net/tomatentum/marinara/registry/ProcessorInteractionExecutor.java diff --git a/lib/src/main/java/net/tomatentum/marinara/Marinara.java b/lib/src/main/java/net/tomatentum/marinara/Marinara.java index 19ac092..77c57d7 100644 --- a/lib/src/main/java/net/tomatentum/marinara/Marinara.java +++ b/lib/src/main/java/net/tomatentum/marinara/Marinara.java @@ -5,13 +5,14 @@ import org.slf4j.Logger; import net.tomatentum.marinara.interaction.InteractionType; import net.tomatentum.marinara.interaction.processor.AutocompleteInteractionProcessor; import net.tomatentum.marinara.interaction.processor.DirectInteractionProcessor; +import net.tomatentum.marinara.reflection.MethodExecutor; +import net.tomatentum.marinara.reflection.ProcessorMethodExecutor; import net.tomatentum.marinara.reflection.ReflectedMethodFactory; import net.tomatentum.marinara.reflection.ReflectedMethodFactoryImpl; import net.tomatentum.marinara.registry.InteractionCheckRegistry; -import net.tomatentum.marinara.registry.InteractionExecutor; import net.tomatentum.marinara.registry.InteractionRegistry; -import net.tomatentum.marinara.registry.ProcessorInteractionExecutor; import net.tomatentum.marinara.util.LoggerUtil; +import net.tomatentum.marinara.wrapper.IdentifierProvider; import net.tomatentum.marinara.wrapper.LibraryWrapper; public class Marinara { @@ -26,16 +27,17 @@ public class Marinara { private ReflectedMethodFactory reflectedMethodFactory; private InteractionRegistry registry; private InteractionCheckRegistry checkRegistry; - private InteractionExecutor interactionExecutor; + private MethodExecutor interactionExecutor; private Marinara(LibraryWrapper wrapper) { this.wrapper = wrapper; this.reflectedMethodFactory = new ReflectedMethodFactoryImpl(this); this.registry = new InteractionRegistry(this); this.checkRegistry = new InteractionCheckRegistry(); - this.interactionExecutor = new ProcessorInteractionExecutor(wrapper.createIdentifierProvider(), this) - .addProcessor(new DirectInteractionProcessor(InteractionType.COMMAND, InteractionType.BUTTON)) - .addProcessor(new AutocompleteInteractionProcessor()); + IdentifierProvider provider = wrapper.createIdentifierProvider(); + this.interactionExecutor = (MethodExecutor) new ProcessorMethodExecutor() + .addProcessor(new DirectInteractionProcessor(getRegistry(), provider, InteractionType.COMMAND, InteractionType.BUTTON)) + .addProcessor(new AutocompleteInteractionProcessor(this, provider)); wrapper.subscribeInteractions(this.interactionExecutor::handle); logger.info("Marinara loaded successfully!"); } @@ -56,7 +58,7 @@ public class Marinara { return this.reflectedMethodFactory; } - public InteractionExecutor getInteractionExecutor() { + public MethodExecutor getInteractionExecutor() { return interactionExecutor; } diff --git a/lib/src/main/java/net/tomatentum/marinara/interaction/processor/AutocompleteInteractionProcessor.java b/lib/src/main/java/net/tomatentum/marinara/interaction/processor/AutocompleteInteractionProcessor.java index 4483659..b194946 100644 --- a/lib/src/main/java/net/tomatentum/marinara/interaction/processor/AutocompleteInteractionProcessor.java +++ b/lib/src/main/java/net/tomatentum/marinara/interaction/processor/AutocompleteInteractionProcessor.java @@ -4,24 +4,31 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.Set; import net.tomatentum.marinara.Marinara; import net.tomatentum.marinara.interaction.InteractionType; import net.tomatentum.marinara.interaction.ident.InteractionIdentifier; import net.tomatentum.marinara.interaction.ident.SlashCommandIdentifier; import net.tomatentum.marinara.registry.InteractionEntry; +import net.tomatentum.marinara.wrapper.IdentifierProvider; -public class AutocompleteInteractionProcessor implements InteractionProcessor { +public class AutocompleteInteractionProcessor extends InteractionMethodProcessor { + + private Marinara marinara; + + public AutocompleteInteractionProcessor(Marinara marinara, IdentifierProvider provider) { + super(provider, Set.of(InteractionType.AUTOCOMPLETE)); + this.marinara = marinara; + } @Override - public void process(Object context, InteractionIdentifier identifier, Marinara marinara) { - if (!identifier.type().equals(InteractionType.AUTOCOMPLETE)) - return; - Optional entry = marinara.getRegistry().findFor(convertToCommandIdentifier(identifier)); + public void processInteraction(Object context, InteractionIdentifier identifier) { + Optional entry = this.marinara.getRegistry().findFor(convertToCommandIdentifier(identifier)); if (entry.isPresent() && entry.get().identifier() instanceof SlashCommandIdentifier sIdent) { - List autocompleteRefs = Arrays.asList(marinara.getWrapper().getContextObjectProvider() + List autocompleteRefs = Arrays.asList(this.marinara.getWrapper().getContextObjectProvider() .getAutocompleteFocusedOption(context).getAutocompleteRefs(sIdent.options())); - List results = marinara.getRegistry().interactions().stream() + List results = this.marinara.getRegistry().interactions().stream() .filter(e -> e.type().equals(InteractionType.AUTOCOMPLETE)) .filter(e -> autocompleteRefs.contains(e.identifier().name())) .map(e -> e.runAll(context)) diff --git a/lib/src/main/java/net/tomatentum/marinara/interaction/processor/DirectInteractionProcessor.java b/lib/src/main/java/net/tomatentum/marinara/interaction/processor/DirectInteractionProcessor.java index b2d2296..3d1cf7a 100644 --- a/lib/src/main/java/net/tomatentum/marinara/interaction/processor/DirectInteractionProcessor.java +++ b/lib/src/main/java/net/tomatentum/marinara/interaction/processor/DirectInteractionProcessor.java @@ -2,28 +2,23 @@ package net.tomatentum.marinara.interaction.processor; import java.util.Set; -import org.slf4j.Logger; - -import net.tomatentum.marinara.Marinara; import net.tomatentum.marinara.interaction.InteractionType; import net.tomatentum.marinara.interaction.ident.InteractionIdentifier; -import net.tomatentum.marinara.util.LoggerUtil; +import net.tomatentum.marinara.registry.InteractionRegistry; +import net.tomatentum.marinara.wrapper.IdentifierProvider; -public class DirectInteractionProcessor implements InteractionProcessor { +public class DirectInteractionProcessor extends InteractionMethodProcessor { - private Logger logger = LoggerUtil.getLogger(getClass()); - private Set types; + private InteractionRegistry registry; - public DirectInteractionProcessor(InteractionType... types) { - this.types = Set.of(types); + public DirectInteractionProcessor(InteractionRegistry registry, IdentifierProvider provider, InteractionType... types) { + super(provider, Set.of(types)); + this.registry = registry; } @Override - public void process(Object context, InteractionIdentifier identifier, Marinara marinara) { - if (!types.contains(identifier.type())) - return; - logger.debug("Processing {} : {} with context {}", identifier, identifier.type(), context); - marinara.getRegistry().interactions().stream() + protected void processInteraction(Object context, InteractionIdentifier identifier) { + this.registry.interactions().stream() .filter(e -> e.identifier().equals(identifier)) .findFirst() .ifPresent(e -> e.runAll(context)); diff --git a/lib/src/main/java/net/tomatentum/marinara/interaction/processor/InteractionMethodProcessor.java b/lib/src/main/java/net/tomatentum/marinara/interaction/processor/InteractionMethodProcessor.java new file mode 100644 index 0000000..38a2742 --- /dev/null +++ b/lib/src/main/java/net/tomatentum/marinara/interaction/processor/InteractionMethodProcessor.java @@ -0,0 +1,35 @@ +package net.tomatentum.marinara.interaction.processor; + +import java.util.Set; + +import org.slf4j.Logger; + +import net.tomatentum.marinara.interaction.InteractionType; +import net.tomatentum.marinara.interaction.ident.InteractionIdentifier; +import net.tomatentum.marinara.reflection.MethodProcessor; +import net.tomatentum.marinara.util.LoggerUtil; +import net.tomatentum.marinara.wrapper.IdentifierProvider; + +public abstract class InteractionMethodProcessor implements MethodProcessor { + + private Logger logger = LoggerUtil.getLogger(getClass()); + + private IdentifierProvider provider; + private Set types; + + protected InteractionMethodProcessor(IdentifierProvider provider, Set types) { + this.provider = provider; + this.types = types; + } + + @Override + public void process(Object context) { + InteractionIdentifier identifier = this.provider.provide(context); + if (!this.types.contains(identifier.type())) return; + logger.debug("Processing {} : {} with context {}", identifier, identifier.type(), context); + this.processInteraction(context, identifier); + } + + protected abstract void processInteraction(Object context, InteractionIdentifier identifier); + +} diff --git a/lib/src/main/java/net/tomatentum/marinara/interaction/processor/InteractionProcessor.java b/lib/src/main/java/net/tomatentum/marinara/interaction/processor/InteractionProcessor.java deleted file mode 100644 index 24f0bbc..0000000 --- a/lib/src/main/java/net/tomatentum/marinara/interaction/processor/InteractionProcessor.java +++ /dev/null @@ -1,10 +0,0 @@ -package net.tomatentum.marinara.interaction.processor; - -import net.tomatentum.marinara.Marinara; -import net.tomatentum.marinara.interaction.ident.InteractionIdentifier; - -public interface InteractionProcessor { - - void process(Object context, InteractionIdentifier identifier, Marinara marinara); - -} diff --git a/lib/src/main/java/net/tomatentum/marinara/reflection/MethodExecutor.java b/lib/src/main/java/net/tomatentum/marinara/reflection/MethodExecutor.java new file mode 100644 index 0000000..a16c48f --- /dev/null +++ b/lib/src/main/java/net/tomatentum/marinara/reflection/MethodExecutor.java @@ -0,0 +1,7 @@ +package net.tomatentum.marinara.reflection; + +public interface MethodExecutor { + + void handle(Object context); + +} diff --git a/lib/src/main/java/net/tomatentum/marinara/reflection/MethodProcessor.java b/lib/src/main/java/net/tomatentum/marinara/reflection/MethodProcessor.java new file mode 100644 index 0000000..7cc4ce8 --- /dev/null +++ b/lib/src/main/java/net/tomatentum/marinara/reflection/MethodProcessor.java @@ -0,0 +1,7 @@ +package net.tomatentum.marinara.reflection; + +public interface MethodProcessor { + + void process(Object context); + +} diff --git a/lib/src/main/java/net/tomatentum/marinara/reflection/ProcessorContainer.java b/lib/src/main/java/net/tomatentum/marinara/reflection/ProcessorContainer.java new file mode 100644 index 0000000..0e33fe7 --- /dev/null +++ b/lib/src/main/java/net/tomatentum/marinara/reflection/ProcessorContainer.java @@ -0,0 +1,7 @@ +package net.tomatentum.marinara.reflection; + +public interface ProcessorContainer { + + ProcessorContainer addProcessor(MethodProcessor processor); + +} diff --git a/lib/src/main/java/net/tomatentum/marinara/reflection/ProcessorMethodExecutor.java b/lib/src/main/java/net/tomatentum/marinara/reflection/ProcessorMethodExecutor.java new file mode 100644 index 0000000..373ef93 --- /dev/null +++ b/lib/src/main/java/net/tomatentum/marinara/reflection/ProcessorMethodExecutor.java @@ -0,0 +1,32 @@ +package net.tomatentum.marinara.reflection; + +import java.util.HashSet; +import java.util.Set; + +import org.slf4j.Logger; + +import net.tomatentum.marinara.util.LoggerUtil; + +public class ProcessorMethodExecutor implements MethodExecutor, ProcessorContainer { + + private Logger logger = LoggerUtil.getLogger(getClass()); + + private Set processors; + + public ProcessorMethodExecutor() { + this.processors = new HashSet<>(); + } + + @Override + public ProcessorContainer addProcessor(MethodProcessor processor) { + processors.add(processor); + return this; + } + + @Override + public void handle(Object context) { + logger.debug("Received {} interaction ", context); + processors.forEach(x -> x.process(context)); + } + +} diff --git a/lib/src/main/java/net/tomatentum/marinara/registry/InteractionExecutor.java b/lib/src/main/java/net/tomatentum/marinara/registry/InteractionExecutor.java deleted file mode 100644 index 02d52bc..0000000 --- a/lib/src/main/java/net/tomatentum/marinara/registry/InteractionExecutor.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.tomatentum.marinara.registry; - -public interface InteractionExecutor { - - void handle(Object context); - -} diff --git a/lib/src/main/java/net/tomatentum/marinara/registry/ProcessorInteractionExecutor.java b/lib/src/main/java/net/tomatentum/marinara/registry/ProcessorInteractionExecutor.java deleted file mode 100644 index 03c2785..0000000 --- a/lib/src/main/java/net/tomatentum/marinara/registry/ProcessorInteractionExecutor.java +++ /dev/null @@ -1,41 +0,0 @@ -package net.tomatentum.marinara.registry; - -import java.util.HashSet; -import java.util.Set; - -import org.slf4j.Logger; - -import net.tomatentum.marinara.Marinara; -import net.tomatentum.marinara.interaction.ident.InteractionIdentifier; -import net.tomatentum.marinara.interaction.processor.InteractionProcessor; -import net.tomatentum.marinara.util.LoggerUtil; -import net.tomatentum.marinara.wrapper.IdentifierProvider; - -public class ProcessorInteractionExecutor implements InteractionExecutor { - - private Logger logger = LoggerUtil.getLogger(getClass()); - - private Set processors; - private IdentifierProvider identifierProvider; - private Marinara marinara; - - public ProcessorInteractionExecutor(IdentifierProvider identifierProvider, Marinara marinara) { - this.processors = new HashSet<>(); - this.identifierProvider = identifierProvider; - this.marinara = marinara; - } - - public ProcessorInteractionExecutor addProcessor(InteractionProcessor processor) { - this.processors.add(processor); - return this; - } - - @Override - public void handle(Object context) { - logger.debug("Received {} interaction ", context); - InteractionIdentifier identifier = this.identifierProvider.provide(context); - logger.debug("Processing {} : {} interaction ", identifier, identifier.type()); - processors.forEach(x -> x.process(context, identifier, this.marinara)); - } - -}