diff --git a/lib/src/main/java/net/tomatentum/marinara/registry/InteractionEntry.java b/lib/src/main/java/net/tomatentum/marinara/registry/InteractionEntry.java index 2d2868a..ec7a674 100644 --- a/lib/src/main/java/net/tomatentum/marinara/registry/InteractionEntry.java +++ b/lib/src/main/java/net/tomatentum/marinara/registry/InteractionEntry.java @@ -1,6 +1,8 @@ package net.tomatentum.marinara.registry; +import java.util.Arrays; import java.util.HashSet; +import java.util.Optional; import java.util.Set; import org.slf4j.Logger; @@ -11,6 +13,17 @@ import net.tomatentum.marinara.interaction.methods.InteractionMethod; import net.tomatentum.marinara.util.LoggerUtil; public class InteractionEntry { + + public static InteractionEntry findEntry(Set entries, InteractionIdentifier identifier) { + Optional oentry = entries.stream() + .filter(i -> i.identifier().equals(identifier)) + .findFirst(); + + InteractionEntry entry = oentry.orElse(new InteractionEntry(identifier)); + if (oentry.isEmpty()) entries.add(entry); + return entry; + } + private InteractionIdentifier identifier; private Set methods; @@ -22,11 +35,16 @@ public class InteractionEntry { } public InteractionEntry addMethod(InteractionMethod method) { - if (!method.identifier().equals(this.identifier)) - throw new IllegalArgumentException("Method's identifier did not match the entry's identifier"); + Optional methodId = Arrays.stream(method.identifier()) + .filter(x -> x.name().equals(identifier().name())) + .findFirst(); + + if (methodId.isEmpty()) + throw new IllegalArgumentException("Method's identifiers did not contain the entry's identifier"); this.methods.add(method); - InteractionIdentifier.tryAddDescriptions(identifier, method.identifier()); + InteractionIdentifier.tryAddDescriptions(identifier, methodId.get()); + logger.debug("Added method {} to entry {}", method.method().getName(), this.identifier); return this; } diff --git a/lib/src/main/java/net/tomatentum/marinara/registry/InteractionRegistry.java b/lib/src/main/java/net/tomatentum/marinara/registry/InteractionRegistry.java index be5678d..d1791dc 100644 --- a/lib/src/main/java/net/tomatentum/marinara/registry/InteractionRegistry.java +++ b/lib/src/main/java/net/tomatentum/marinara/registry/InteractionRegistry.java @@ -4,7 +4,6 @@ import java.lang.reflect.Method; import java.util.Arrays; import java.util.HashSet; import java.util.List; -import java.util.Optional; import java.util.Set; import org.slf4j.Logger; @@ -32,20 +31,12 @@ public class InteractionRegistry { this.identifierProvider = marinara.getWrapper().createIdentifierProvider(); marinara.getWrapper().subscribeInteractions(this::handle); } - - /* - * TODO: Maybe relocate InteractionEntry checking to another class with description merging. - */ + public void addInteractions(InteractionHandler interactionHandler) { for (Method method : interactionHandler.getClass().getMethods()) { InteractionMethod iMethod = InteractionMethod.create(method, interactionHandler, marinara); if (iMethod != null) { - Optional oentry = this.interactions.stream() - .filter(i -> i.identifier().equals(iMethod.identifier())) - .findFirst(); - - InteractionEntry entry = oentry.orElse(new InteractionEntry(iMethod.identifier())).addMethod(iMethod); - if (oentry.isEmpty()) this.interactions.add(entry); + InteractionEntry.findEntry(interactions, iMethod.identifier()).addMethod(iMethod); logger.debug("Added {} method from {}", iMethod.method().getName(), interactionHandler.getClass().getSimpleName()); } }