[AB-151] adding ability to define a priority in order to define which listener is executed before another

This commit is contained in:
Sheldan
2020-10-20 21:58:04 +02:00
parent dca98c2953
commit 389b38f4f0
34 changed files with 172 additions and 10 deletions

View File

@@ -14,6 +14,9 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@Service
@@ -57,4 +60,9 @@ public class JoinListenerBean extends ListenerAdapter {
log.trace("Executing join listener {} for member {} in guild {}.", joinListener.getClass().getName(), event.getMember().getId(), event.getGuild().getId());
joinListener.execute(event.getMember(), event.getGuild(), aUserInAServer);
}
@PostConstruct
public void postConstruct() {
listenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
}

View File

@@ -13,6 +13,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List;
@Service
@@ -52,4 +54,9 @@ public class LeaveListenerBean extends ListenerAdapter {
log.trace("Executing leave listener {} for member {} in guild {}.", leaveListener.getClass().getName(), event.getMember().getId(), event.getGuild().getId());
leaveListener.execute(event.getMember(), event.getGuild());
}
@PostConstruct
public void postConstruct() {
listenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
}

View File

@@ -22,6 +22,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;
@@ -106,4 +108,9 @@ public class MessageDeletedListenerBean extends ListenerAdapter {
log.trace("Executing message deleted listener {} for message {} in guild {}.", messageDeletedListener.getClass().getName(), cachedMessage.getMessageId(), cachedMessage.getMessageId());
messageDeletedListener.execute(cachedMessage, authorUser, authorMember);
}
@PostConstruct
public void postConstruct() {
listener.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
}

View File

@@ -16,6 +16,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List;
@Component
@@ -88,4 +90,10 @@ public class MessageReceivedListenerBean extends ListenerAdapter {
log.trace("Executing private message listener {} for member {}.", messageReceivedListener.getClass().getName(), event.getAuthor().getId());
messageReceivedListener.execute(event.getMessage());
}
@PostConstruct
public void postConstruct() {
listenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
privateMessageReceivedListeners.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
}

View File

@@ -16,6 +16,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List;
@Component
@@ -69,4 +71,9 @@ public class MessageUpdatedListener extends ListenerAdapter {
public void executeIndividualMessageUpdatedListener(Message message, CachedMessage cachedMessage, MessageTextUpdatedListener messageTextUpdatedListener) {
messageTextUpdatedListener.execute(cachedMessage, message);
}
@PostConstruct
public void postConstruct() {
listener.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
}

View File

@@ -18,6 +18,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
@@ -198,4 +200,11 @@ public class ReactionUpdatedListener extends ListenerAdapter {
});
}
@PostConstruct
public void postConstruct() {
reactionRemovedListeners.sort(Comparator.comparing(Prioritized::getPriority).reversed());
addedListenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
clearedListenerList.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
}

View File

@@ -0,0 +1,9 @@
package dev.sheldan.abstracto.core.config;
public class ListenerPriority {
public static final Integer HIGHEST = 100;
public static final Integer HIGH = 75;
public static final Integer MEDIUM = 50;
public static final Integer LOW = 25;
public static final Integer LOWEST = 0;
}

View File

@@ -4,6 +4,6 @@ import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
public interface JoinListener extends FeatureAware {
public interface JoinListener extends FeatureAware, Prioritized {
void execute(Member member, Guild guild, AUserInAServer aUserInAServer);
}

View File

@@ -3,6 +3,6 @@ package dev.sheldan.abstracto.core.listener;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
public interface LeaveListener extends FeatureAware {
public interface LeaveListener extends FeatureAware, Prioritized {
void execute(Member member, Guild guild);
}

View File

@@ -4,6 +4,6 @@ import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
import dev.sheldan.abstracto.core.models.GuildChannelMember;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
public interface MessageDeletedListener extends FeatureAware {
public interface MessageDeletedListener extends FeatureAware, Prioritized {
void execute(CachedMessage messageBefore, AServerAChannelAUser authorUser, GuildChannelMember authorMember);
}

View File

@@ -2,6 +2,6 @@ package dev.sheldan.abstracto.core.listener;
import net.dv8tion.jda.api.entities.Message;
public interface MessageReceivedListener extends FeatureAware {
public interface MessageReceivedListener extends FeatureAware, Prioritized {
void execute(Message message);
}

View File

@@ -3,6 +3,6 @@ package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import net.dv8tion.jda.api.entities.Message;
public interface MessageTextUpdatedListener extends FeatureAware {
public interface MessageTextUpdatedListener extends FeatureAware, Prioritized {
void execute(CachedMessage messageBefore, Message messageAfter);
}

View File

@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.core.listener;
public interface Prioritized {
Integer getPriority();
}

View File

@@ -2,6 +2,6 @@ package dev.sheldan.abstracto.core.listener;
import net.dv8tion.jda.api.entities.Message;
public interface PrivateMessageReceivedListener extends FeatureAware {
public interface PrivateMessageReceivedListener extends FeatureAware, Prioritized {
void execute(Message message);
}

View File

@@ -4,6 +4,6 @@ import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionAddEvent;
public interface ReactedAddedListener extends FeatureAware {
public interface ReactedAddedListener extends FeatureAware, Prioritized {
void executeReactionAdded(CachedMessage message, GuildMessageReactionAddEvent event, AUserInAServer userAdding);
}

View File

@@ -4,6 +4,6 @@ import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionRemoveEvent;
public interface ReactedRemovedListener extends FeatureAware {
public interface ReactedRemovedListener extends FeatureAware, Prioritized {
void executeReactionRemoved(CachedMessage message, GuildMessageReactionRemoveEvent reaction, AUserInAServer userRemoving);
}

View File

@@ -2,6 +2,6 @@ package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
public interface ReactionClearedListener extends FeatureAware {
public interface ReactionClearedListener extends FeatureAware, Prioritized {
void executeReactionCleared(CachedMessage message);
}