From 167bbb0f8b90555501a7306d11c34588fa71c610 Mon Sep 17 00:00:00 2001
From: Sheldan <5037282+Sheldan@users.noreply.github.com>
Date: Tue, 17 Mar 2020 19:41:25 +0100
Subject: [PATCH] added template support to echo replaced HashMaps for
templates with concrete models, so the interface is easier known added
rendering method for objects directly added default parameters available for
commands split up service beans for server/channel into management and
service bean added server reference in AChannel refactored join/leave
listener
---
.../channels/SetPostTargetCommand.java | 18 +++---
.../command/command-base/pom.xml | 18 ------
.../abstracto/command/support/Help.java | 10 ++-
.../abstracto/command/utility/Echo.java | 19 ++++--
.../abstracto/command/utility/Ping.java | 16 ++---
.../command/utility/model/EchoModel.java | 17 +++++
.../command/utility/model/PingModel.java | 16 +++++
.../templates/commands/echo/echo_en_US.ftl | 1 +
.../command/command-int/pom.xml | 6 ++
.../sheldan/abstracto/command/Command.java | 4 +-
.../command/PostCommandExecution.java | 4 +-
.../{Context.java => CommandContext.java} | 3 +-
.../execution/CommandTemplateContext.java | 18 ++++++
.../commands/management/CommandManager.java | 1 +
.../management/CommandReceivedHandler.java | 29 ++++++---
.../management/ReactionPostExecution.java | 6 +-
.../CommandNotFoundException.java | 2 +-
.../core/exception}/PostTargetException.java | 2 +-
.../ChannelManagementServiceBean.java | 25 ++++++++
.../PostTargetManagementBean.java} | 27 +++++---
.../RoleManagementServiceBean.java} | 5 +-
.../ServerManagementServiceBean.java | 64 +++++++++++++++++++
.../core/service/ChannelServiceBean.java | 31 +++++----
.../core/service/PostTargetServiceBean.java | 37 +++++++++++
.../core/service/ServerServiceBean.java | 36 -----------
.../core/service/StartupManager.java | 17 +++--
.../abstracto/listener/JoinLeaveListener.java | 53 +++++++--------
.../management/ChannelManagementService.java | 9 +++
.../core/management/PostTargetManagement.java | 15 +++++
.../management/RoleManagementService.java | 7 ++
.../management/ServerManagementService.java | 15 +++++
.../abstracto/core/models/AChannel.java | 9 +--
.../abstracto/core/models/AServer.java | 6 +-
.../core/service/ChannelService.java | 4 +-
.../core/service/PostTargetService.java | 9 +--
.../abstracto/core/service/RoleService.java | 7 --
.../abstracto/core/service/ServerService.java | 10 ---
.../loading/DatabaseTemplateLoader.java | 7 +-
.../loading/TemplateServiceBean.java | 18 ++++--
.../TemplateSeedDataLoader.java | 2 +-
.../abstracto/templating/TemplateService.java | 1 +
41 files changed, 399 insertions(+), 205 deletions(-)
create mode 100644 abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/EchoModel.java
create mode 100644 abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/PingModel.java
create mode 100644 abstracto-application/command/command-base/utility/src/main/resources/seedData/templates/commands/echo/echo_en_US.ftl
rename abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/{Context.java => CommandContext.java} (84%)
create mode 100644 abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandTemplateContext.java
rename abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/{ => exception}/CommandNotFoundException.java (52%)
rename abstracto-application/{command/command-management/src/main/java/dev/sheldan/abstracto/commands/management => core/core-impl/src/main/java/dev/sheldan/abstracto/core/exception}/PostTargetException.java (73%)
create mode 100644 abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementServiceBean.java
rename abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/{service/PostTargetServiceServiceBean.java => management/PostTargetManagementBean.java} (68%)
rename abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/{service/RoleServiceBean.java => management/RoleManagementServiceBean.java} (67%)
create mode 100644 abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementServiceBean.java
create mode 100644 abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java
delete mode 100644 abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ServerServiceBean.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementService.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagement.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementService.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementService.java
delete mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java
delete mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ServerService.java
rename abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/{seeddata => seeding}/TemplateSeedDataLoader.java (96%)
diff --git a/abstracto-application/command/command-base/channels/src/main/java/dev/sheldan/abstracto/command/channels/SetPostTargetCommand.java b/abstracto-application/command/command-base/channels/src/main/java/dev/sheldan/abstracto/command/channels/SetPostTargetCommand.java
index e1d3218f0..21d332ca6 100644
--- a/abstracto-application/command/command-base/channels/src/main/java/dev/sheldan/abstracto/command/channels/SetPostTargetCommand.java
+++ b/abstracto-application/command/command-base/channels/src/main/java/dev/sheldan/abstracto/command/channels/SetPostTargetCommand.java
@@ -2,11 +2,11 @@ package dev.sheldan.abstracto.command.channels;
import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.execution.Configuration;
-import dev.sheldan.abstracto.command.execution.Context;
+import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.Parameter;
import dev.sheldan.abstracto.command.execution.Result;
-import dev.sheldan.abstracto.core.service.ChannelService;
-import dev.sheldan.abstracto.core.service.PostTargetService;
+import dev.sheldan.abstracto.core.management.ChannelManagementService;
+import dev.sheldan.abstracto.core.management.PostTargetManagement;
import net.dv8tion.jda.api.entities.GuildChannel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,17 +19,17 @@ import java.util.List;
public class SetPostTargetCommand implements Command {
@Autowired
- private PostTargetService postTargetService;
+ private PostTargetManagement postTargetManagement;
@Autowired
- private ChannelService channelService;
+ private ChannelManagementService channelManagementService;
@Override
@Transactional
- public Result execute(Context context) {
- GuildChannel channel = (GuildChannel) context.getParameters().getParameters().get(1);
- String targetName = (String) context.getParameters().getParameters().get(0);
- postTargetService.createOrUpdate(targetName, channel.getIdLong(), channel.getGuild().getIdLong());
+ public Result execute(CommandContext commandContext) {
+ GuildChannel channel = (GuildChannel) commandContext.getParameters().getParameters().get(1);
+ String targetName = (String) commandContext.getParameters().getParameters().get(0);
+ postTargetManagement.createOrUpdate(targetName, channel.getIdLong(), channel.getGuild().getIdLong());
return Result.fromSuccess();
}
diff --git a/abstracto-application/command/command-base/pom.xml b/abstracto-application/command/command-base/pom.xml
index 7ec7a2b40..aba258069 100644
--- a/abstracto-application/command/command-base/pom.xml
+++ b/abstracto-application/command/command-base/pom.xml
@@ -26,22 +26,4 @@
-
-
-
- maven-compiler-plugin
-
-
-
- only
-
- dev.sheldan.abstracto.command.annotations.CommandSpecProcessor
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/abstracto-application/command/command-base/support/src/main/java/dev/sheldan/abstracto/command/support/Help.java b/abstracto-application/command/command-base/support/src/main/java/dev/sheldan/abstracto/command/support/Help.java
index fa6226a6d..f8611c13b 100644
--- a/abstracto-application/command/command-base/support/src/main/java/dev/sheldan/abstracto/command/support/Help.java
+++ b/abstracto-application/command/command-base/support/src/main/java/dev/sheldan/abstracto/command/support/Help.java
@@ -11,8 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
@Service
@@ -23,10 +21,10 @@ public class Help implements Command {
private ModuleRegistry registry;
@Override
- public Result execute(Context context) {
+ public Result execute(CommandContext commandContext) {
CommandHierarchy commandStructure = registry.getDetailedModules();
StringBuilder sb = new StringBuilder();
- if(context.getParameters().getParameters().isEmpty()){
+ if(commandContext.getParameters().getParameters().isEmpty()){
sb.append("Help | Module overview \n");
sb.append("```");
commandStructure.getRootModules().forEach(packedModule -> {
@@ -35,7 +33,7 @@ public class Help implements Command {
});
sb.append("```");
} else {
- String parameterValue = context.getParameters().getParameters().get(0).toString();
+ String parameterValue = commandContext.getParameters().getParameters().get(0).toString();
PackedModule module = commandStructure.getModuleWithName(parameterValue);
if(module != null){
sb.append("Help | Module overview \n");
@@ -53,7 +51,7 @@ public class Help implements Command {
}
}
- context.getChannel().sendMessage(sb.toString()).queue();
+ commandContext.getChannel().sendMessage(sb.toString()).queue();
return Result.fromSuccess();
}
diff --git a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Echo.java b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Echo.java
index ff6e1e57a..b1ee351f1 100644
--- a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Echo.java
+++ b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Echo.java
@@ -3,10 +3,14 @@ package dev.sheldan.abstracto.command.utility;
import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.HelpInfo;
import dev.sheldan.abstracto.command.execution.Configuration;
-import dev.sheldan.abstracto.command.execution.Context;
+import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.Parameter;
import dev.sheldan.abstracto.command.execution.Result;
+import dev.sheldan.abstracto.command.utility.model.EchoModel;
+import dev.sheldan.abstracto.templating.TemplateService;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -14,13 +18,20 @@ import java.util.List;
@Service
public class Echo implements Command {
+ private static final String TEMPLATE_NAME = "echo";
+
+ @Autowired
+ private TemplateService templateService;
+
@Override
- public Result execute(Context context) {
+ @Transactional
+ public Result execute(CommandContext commandContext) {
StringBuilder sb = new StringBuilder();
- context.getParameters().getParameters().forEach(o -> {
+ commandContext.getParameters().getParameters().forEach(o -> {
sb.append(o.toString());
});
- context.getChannel().sendMessage(sb.toString()).queue();
+ EchoModel model = EchoModel.parentBuilder().parent(commandContext.getCommandTemplateContext()).text(sb.toString()).build();
+ commandContext.getChannel().sendMessage(templateService.renderTemplate(TEMPLATE_NAME, model)).queue();
return Result.fromSuccess();
}
diff --git a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Ping.java b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Ping.java
index b279e2e86..d6ad9a612 100644
--- a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Ping.java
+++ b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Ping.java
@@ -2,15 +2,14 @@ package dev.sheldan.abstracto.command.utility;
import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.execution.Configuration;
-import dev.sheldan.abstracto.command.execution.Context;
+import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.Result;
+import dev.sheldan.abstracto.command.utility.model.PingModel;
import dev.sheldan.abstracto.templating.TemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.HashMap;
-
@Service
public class Ping implements Command {
@@ -21,12 +20,11 @@ public class Ping implements Command {
@Override
@Transactional
- public Result execute(Context context) {
- long ping = context.getJda().getGatewayPing();
- HashMap parameters = new HashMap<>();
- parameters.put("latency", ping);
- String text = templateService.renderTemplate(PING_TEMPLATE, parameters);
- context.getChannel().sendMessage(text).queue();
+ public Result execute(CommandContext commandContext) {
+ long ping = commandContext.getJda().getGatewayPing();
+ PingModel model = PingModel.parentBuilder().parent(commandContext.getCommandTemplateContext()).latency(ping).build();
+ String text = templateService.renderTemplate(PING_TEMPLATE, model);
+ commandContext.getChannel().sendMessage(text).queue();
return Result.fromSuccess();
}
diff --git a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/EchoModel.java b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/EchoModel.java
new file mode 100644
index 000000000..cae56578a
--- /dev/null
+++ b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/EchoModel.java
@@ -0,0 +1,17 @@
+package dev.sheldan.abstracto.command.utility.model;
+
+
+import dev.sheldan.abstracto.command.execution.CommandTemplateContext;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+public class EchoModel extends CommandTemplateContext {
+ private String text;
+
+ @Builder(builderMethodName = "parentBuilder")
+ private EchoModel(CommandTemplateContext parent, String text) {
+ super(parent);
+ this.text = text;
+ }
+}
diff --git a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/PingModel.java b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/PingModel.java
new file mode 100644
index 000000000..b8e13e6c5
--- /dev/null
+++ b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/PingModel.java
@@ -0,0 +1,16 @@
+package dev.sheldan.abstracto.command.utility.model;
+
+import dev.sheldan.abstracto.command.execution.CommandTemplateContext;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+public class PingModel extends CommandTemplateContext {
+ private Long latency;
+
+ @Builder(builderMethodName = "parentBuilder")
+ private PingModel(CommandTemplateContext parent, Long latency) {
+ super(parent);
+ this.latency = latency;
+ }
+}
diff --git a/abstracto-application/command/command-base/utility/src/main/resources/seedData/templates/commands/echo/echo_en_US.ftl b/abstracto-application/command/command-base/utility/src/main/resources/seedData/templates/commands/echo/echo_en_US.ftl
new file mode 100644
index 000000000..e07b42c79
--- /dev/null
+++ b/abstracto-application/command/command-base/utility/src/main/resources/seedData/templates/commands/echo/echo_en_US.ftl
@@ -0,0 +1 @@
+${text}
\ No newline at end of file
diff --git a/abstracto-application/command/command-int/pom.xml b/abstracto-application/command/command-int/pom.xml
index 34bb48bb3..4e4ae2044 100644
--- a/abstracto-application/command/command-int/pom.xml
+++ b/abstracto-application/command/command-int/pom.xml
@@ -35,6 +35,12 @@
${project.version}
+
+ dev.sheldan.abstracto.core
+ core-interface
+ ${project.version}
+
+
diff --git a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/Command.java b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/Command.java
index 859bb679c..8c5644f3a 100644
--- a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/Command.java
+++ b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/Command.java
@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.command;
import dev.sheldan.abstracto.command.execution.Configuration;
-import dev.sheldan.abstracto.command.execution.Context;
+import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.Result;
public interface Command {
- Result execute(Context context);
+ Result execute(CommandContext commandContext);
Configuration getConfiguration();
}
diff --git a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/PostCommandExecution.java b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/PostCommandExecution.java
index c3cc3e507..409b8554d 100644
--- a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/PostCommandExecution.java
+++ b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/PostCommandExecution.java
@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.command;
-import dev.sheldan.abstracto.command.execution.Context;
+import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.Result;
public interface PostCommandExecution {
- void execute(Context context, Result result, Command command);
+ void execute(CommandContext commandContext, Result result, Command command);
}
diff --git a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/Context.java b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandContext.java
similarity index 84%
rename from abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/Context.java
rename to abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandContext.java
index 753b95e55..e54b4514d 100644
--- a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/Context.java
+++ b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandContext.java
@@ -10,11 +10,12 @@ import net.dv8tion.jda.api.entities.User;
@Builder
@Getter
-public class Context {
+public class CommandContext {
private TextChannel channel;
private Guild guild;
private User author;
private Message message;
+ private CommandTemplateContext commandTemplateContext;
private Parameters parameters;
private JDA jda;
}
diff --git a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandTemplateContext.java b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandTemplateContext.java
new file mode 100644
index 000000000..a648525ae
--- /dev/null
+++ b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandTemplateContext.java
@@ -0,0 +1,18 @@
+package dev.sheldan.abstracto.command.execution;
+
+import dev.sheldan.abstracto.core.models.AChannel;
+import dev.sheldan.abstracto.core.models.AServer;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter @Builder @AllArgsConstructor
+public class CommandTemplateContext {
+ private AChannel channel;
+ private AServer server;
+
+ public CommandTemplateContext(CommandTemplateContext commandTemplateContext) {
+ this.channel = commandTemplateContext.channel;
+ this.server = commandTemplateContext.server;
+ }
+}
diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandManager.java b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandManager.java
index 7c2290fab..5d2d965f8 100644
--- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandManager.java
+++ b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandManager.java
@@ -6,6 +6,7 @@ import dev.sheldan.abstracto.command.execution.Configuration;
import dev.sheldan.abstracto.command.execution.Parameter;
import dev.sheldan.abstracto.command.meta.CommandRegistry;
import dev.sheldan.abstracto.command.meta.UnParsedCommandParameter;
+import dev.sheldan.abstracto.commands.management.exception.CommandNotFoundException;
import net.dv8tion.jda.api.entities.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandReceivedHandler.java b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandReceivedHandler.java
index d4291364c..d5e7efb24 100644
--- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandReceivedHandler.java
+++ b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandReceivedHandler.java
@@ -2,12 +2,12 @@ package dev.sheldan.abstracto.commands.management;
import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.PostCommandExecution;
-import dev.sheldan.abstracto.command.execution.Context;
-import dev.sheldan.abstracto.command.execution.Parameter;
-import dev.sheldan.abstracto.command.execution.Parameters;
-import dev.sheldan.abstracto.command.execution.Result;
+import dev.sheldan.abstracto.command.execution.*;
import dev.sheldan.abstracto.command.meta.UnParsedCommandParameter;
-import net.dv8tion.jda.api.entities.Guild;
+import dev.sheldan.abstracto.core.management.ChannelManagementService;
+import dev.sheldan.abstracto.core.management.ServerManagementService;
+import dev.sheldan.abstracto.core.models.AChannel;
+import dev.sheldan.abstracto.core.models.AServer;
import net.dv8tion.jda.api.entities.GuildChannel;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
@@ -29,6 +29,12 @@ public class CommandReceivedHandler extends ListenerAdapter {
@Autowired
private PostCommandExecution execution;
+ @Autowired
+ private ServerManagementService serverManagementService;
+
+ @Autowired
+ private ChannelManagementService channelManagementService;
+
@Override
public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
if(!manager.isCommand(event.getMessage())) {
@@ -40,16 +46,23 @@ public class CommandReceivedHandler extends ListenerAdapter {
String withoutPrefix = parameters.get(0).substring(1);
Command foundCommand = manager.findCommandByParameters(withoutPrefix, unparsedParameter);
Parameters parsedParameters = getParsedParameters(unparsedParameter, foundCommand, event.getMessage());
- Context context = Context.builder()
+ CommandContext commandContext = CommandContext.builder()
.author(event.getAuthor())
.guild(event.getGuild())
.channel(event.getTextChannel())
.message(event.getMessage())
.parameters(parsedParameters)
.jda(event.getJDA())
+ .commandTemplateContext(buildTemplateParameter(event))
.build();
- Result result = foundCommand.execute(context);
- execution.execute(context, result, foundCommand);
+ Result result = foundCommand.execute(commandContext);
+ execution.execute(commandContext, result, foundCommand);
+ }
+
+ private CommandTemplateContext buildTemplateParameter(MessageReceivedEvent event) {
+ AChannel channel = channelManagementService.loadChannel(event.getChannel().getIdLong());
+ AServer server = serverManagementService.loadServer(event.getGuild().getIdLong());
+ return CommandTemplateContext.builder().channel(channel).server(server).build();
}
public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){
diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/ReactionPostExecution.java b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/ReactionPostExecution.java
index c50472f67..6ba95bd4a 100644
--- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/ReactionPostExecution.java
+++ b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/ReactionPostExecution.java
@@ -2,16 +2,16 @@ package dev.sheldan.abstracto.commands.management;
import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.PostCommandExecution;
-import dev.sheldan.abstracto.command.execution.Context;
+import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.Result;
import org.springframework.stereotype.Service;
@Service
public class ReactionPostExecution implements PostCommandExecution {
@Override
- public void execute(Context context, Result result, Command command) {
+ public void execute(CommandContext commandContext, Result result, Command command) {
if(command.getConfiguration().isCausesReaction()){
- context.getMessage().addReaction("⭐").queue();
+ commandContext.getMessage().addReaction("⭐").queue();
}
}
}
diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandNotFoundException.java b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/exception/CommandNotFoundException.java
similarity index 52%
rename from abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandNotFoundException.java
rename to abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/exception/CommandNotFoundException.java
index 31923a1ac..c294cc42b 100644
--- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandNotFoundException.java
+++ b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/exception/CommandNotFoundException.java
@@ -1,4 +1,4 @@
-package dev.sheldan.abstracto.commands.management;
+package dev.sheldan.abstracto.commands.management.exception;
public class CommandNotFoundException extends RuntimeException {
}
diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/PostTargetException.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/exception/PostTargetException.java
similarity index 73%
rename from abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/PostTargetException.java
rename to abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/exception/PostTargetException.java
index c3c30fa0b..5f1b914ee 100644
--- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/PostTargetException.java
+++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/exception/PostTargetException.java
@@ -1,4 +1,4 @@
-package dev.sheldan.abstracto.commands.management;
+package dev.sheldan.abstracto.core.exception;
public class PostTargetException extends RuntimeException {
public PostTargetException(String message) {
diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementServiceBean.java
new file mode 100644
index 000000000..cb6999be3
--- /dev/null
+++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementServiceBean.java
@@ -0,0 +1,25 @@
+package dev.sheldan.abstracto.core.service.management;
+
+import dev.sheldan.abstracto.core.models.AChannel;
+import dev.sheldan.abstracto.core.models.AChannelType;
+import dev.sheldan.abstracto.core.management.ChannelManagementService;
+import dev.sheldan.abstracto.repository.ChannelRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ChannelManagementServiceBean implements ChannelManagementService {
+
+ @Autowired
+ private ChannelRepository repository;
+
+ @Override
+ public AChannel loadChannel(Long id) {
+ return repository.getOne(id);
+ }
+
+ @Override
+ public AChannel createChannel(Long id, AChannelType type) {
+ return repository.save(AChannel.builder().id(id).type(type).build());
+ }
+}
diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagementBean.java
similarity index 68%
rename from abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceServiceBean.java
rename to abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagementBean.java
index 468bc13b9..879bf51af 100644
--- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceServiceBean.java
+++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagementBean.java
@@ -1,28 +1,29 @@
-package dev.sheldan.abstracto.core.service;
+package dev.sheldan.abstracto.core.service.management;
-import dev.sheldan.abstracto.commands.management.PostTargetException;
+import dev.sheldan.abstracto.core.exception.PostTargetException;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.PostTarget;
+import dev.sheldan.abstracto.core.management.ChannelManagementService;
+import dev.sheldan.abstracto.core.management.PostTargetManagement;
+import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.repository.PostTargetRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
-import javax.transaction.Transactional;
-
@Service
@Slf4j
-public class PostTargetServiceServiceBean implements PostTargetService {
+public class PostTargetManagementBean implements PostTargetManagement {
@Autowired
private PostTargetRepository postTargetRepository;
@Autowired
- private ChannelService channelService;
+ private ChannelManagementService channelManagementService;
@Autowired
- private ServerService serverService;
+ private ServerManagementService serverManagementService;
@Override
public void createPostTarget(String name, AChannel targetChannel, AServer server) {
@@ -45,14 +46,14 @@ public class PostTargetServiceServiceBean implements PostTargetService {
@Override
public void createOrUpdate(String name, Long channelId, AServer server) {
- AChannel dbChannel = channelService.loadChannel(channelId);
+ AChannel dbChannel = channelManagementService.loadChannel(channelId);
createOrUpdate(name, dbChannel, server);
}
@Override
public void createOrUpdate(String name, Long channelId, Long serverId) {
- AChannel dbChannel = channelService.loadChannel(channelId);
- AServer dbServer = serverService.loadServer(serverId);
+ AChannel dbChannel = channelManagementService.loadChannel(channelId);
+ AServer dbServer = serverManagementService.loadServer(serverId);
createOrUpdate(name, dbChannel, dbServer);
}
@@ -62,6 +63,12 @@ public class PostTargetServiceServiceBean implements PostTargetService {
return postTargetRepository.findPostTargetByName(name);
}
+ @Override
+ public PostTarget getPostTarget(String name, Long serverId) {
+ AServer server = serverManagementService.loadServer(serverId);
+ return getPostTarget(name, server);
+ }
+
@Override
public void updatePostTarget(PostTarget target, AChannel newTargetChannel, AServer server) {
postTargetRepository.getOne(target.getId()).setChannelReference(newTargetChannel);
diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementServiceBean.java
similarity index 67%
rename from abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java
rename to abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementServiceBean.java
index f59aeb265..68e285e8d 100644
--- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java
+++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementServiceBean.java
@@ -1,12 +1,13 @@
-package dev.sheldan.abstracto.core.service;
+package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.ARole;
+import dev.sheldan.abstracto.core.management.RoleManagementService;
import dev.sheldan.abstracto.repository.RoleRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
-public class RoleServiceBean implements RoleService {
+public class RoleManagementServiceBean implements RoleManagementService {
@Autowired
private RoleRepository repository;
diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementServiceBean.java
new file mode 100644
index 000000000..3ff98b40b
--- /dev/null
+++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementServiceBean.java
@@ -0,0 +1,64 @@
+package dev.sheldan.abstracto.core.service.management;
+
+import dev.sheldan.abstracto.core.models.AChannel;
+import dev.sheldan.abstracto.core.models.AServer;
+import dev.sheldan.abstracto.core.models.PostTarget;
+import dev.sheldan.abstracto.core.management.ChannelManagementService;
+import dev.sheldan.abstracto.core.management.PostTargetManagement;
+import dev.sheldan.abstracto.core.management.ServerManagementService;
+import dev.sheldan.abstracto.repository.ServerRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ServerManagementServiceBean implements ServerManagementService {
+
+ @Autowired
+ private ServerRepository repository;
+
+ @Autowired
+ private PostTargetManagement postTargetManagement;
+
+ @Autowired
+ private ChannelManagementService channelManagementService;
+
+ @Override
+ public AServer createServer(Long id) {
+ return repository.save(AServer.builder().id(id).build());
+ }
+
+ @Override
+ public AServer loadServer(Long id) {
+ return repository.getOne(id);
+ }
+
+ @Override
+ public void addChannelToServer(AServer server, AChannel channel) {
+ server.getChannels().add(channel);
+ }
+
+ @Override
+ public AChannel getPostTarget(Long serverId, String name) {
+ AServer server = this.loadServer(serverId);
+ return getPostTarget(server, name);
+ }
+
+ @Override
+ public AChannel getPostTarget(Long serverId, PostTarget target) {
+ AServer server = this.loadServer(serverId);
+ return getPostTarget(server, target);
+ }
+
+ @Override
+ public AChannel getPostTarget(AServer server, PostTarget target) {
+ return target.getChannelReference();
+ }
+
+ @Override
+ public AChannel getPostTarget(AServer server, String name) {
+ PostTarget target = postTargetManagement.getPostTarget(name, server);
+ return getPostTarget(server, target);
+ }
+
+
+}
diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ChannelServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ChannelServiceBean.java
index d3691793b..a886d0113 100644
--- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ChannelServiceBean.java
+++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ChannelServiceBean.java
@@ -1,24 +1,31 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.AChannel;
-import dev.sheldan.abstracto.core.models.AChannelType;
-import dev.sheldan.abstracto.repository.ChannelRepository;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.entities.Guild;
+import net.dv8tion.jda.api.entities.TextChannel;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import org.springframework.stereotype.Component;
-@Service
+@Slf4j
+@Component
public class ChannelServiceBean implements ChannelService {
@Autowired
- private ChannelRepository repository;
+ private BotService botService;
@Override
- public AChannel loadChannel(Long id) {
- return repository.getOne(id);
- }
-
- @Override
- public AChannel createChannel(Long id, AChannelType type) {
- return repository.save(AChannel.builder().id(id).type(type).build());
+ public void sendTextInAChannel(String text, AChannel channel) {
+ Guild guild = botService.getInstance().getGuildById(channel.getServer().getId());
+ if (guild != null) {
+ TextChannel textChannel = guild.getTextChannelById(channel.getId());
+ if(textChannel != null) {
+ textChannel.sendMessage(text).queue();
+ } else {
+ log.warn("Channel {} to post towards was not found in server {}", channel.getId(), channel.getServer().getId());
+ }
+ } else {
+ log.warn("Guild {} was not found when trying to post a message", channel.getServer().getId());
+ }
}
}
diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java
new file mode 100644
index 000000000..601d006ba
--- /dev/null
+++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java
@@ -0,0 +1,37 @@
+package dev.sheldan.abstracto.core.service;
+
+import dev.sheldan.abstracto.core.management.ServerManagementService;
+import dev.sheldan.abstracto.core.models.PostTarget;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.entities.Guild;
+import net.dv8tion.jda.api.entities.TextChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Slf4j
+@Component
+public class PostTargetServiceBean implements PostTargetService {
+
+ @Autowired
+ private ServerManagementService serverManagementService;
+
+ @Autowired
+ private BotService botService;
+
+ @Override
+ public void sendTextInPostTarget(String text, PostTarget target) {
+ Guild guild = botService.getInstance().getGuildById(target.getServerReference().getId());
+ if(guild != null) {
+ TextChannel textChannelById = guild.getTextChannelById(target.getChannelReference().getId());
+ if(textChannelById != null) {
+ textChannelById.sendMessage(text).queue();
+ } else {
+ log.warn("Incorrect post target configuration: {} points to {} on server {}", target.getName(),
+ target.getChannelReference().getId(), target.getServerReference().getId());
+ }
+ } else {
+ log.warn("Incorrect post target configuration: Guild id {} was not found.", target.getServerReference().getId());
+ }
+ }
+}
diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ServerServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ServerServiceBean.java
deleted file mode 100644
index ef500ee21..000000000
--- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ServerServiceBean.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package dev.sheldan.abstracto.core.service;
-
-import dev.sheldan.abstracto.core.models.AChannel;
-import dev.sheldan.abstracto.core.models.AServer;
-import dev.sheldan.abstracto.repository.ServerRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import javax.transaction.Transactional;
-
-@Service
-public class ServerServiceBean implements ServerService {
-
- @Autowired
- private ServerRepository repository;
-
- @Override
- @Transactional
- public AServer createServer(Long id) {
- return repository.save(AServer.builder().id(id).build());
- }
-
- @Override
- @Transactional
- public AServer loadServer(Long id) {
- return repository.getOne(id);
- }
-
- @Override
- @Transactional
- public void addChannelToServer(AServer server, AChannel channel) {
- server.getChannels().add(channel);
- }
-
-
-}
diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/StartupManager.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/StartupManager.java
index 2d99589da..ee5f74b3e 100644
--- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/StartupManager.java
+++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/StartupManager.java
@@ -1,6 +1,9 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.SnowflakeUtils;
+import dev.sheldan.abstracto.core.management.ChannelManagementService;
+import dev.sheldan.abstracto.core.management.RoleManagementService;
+import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AChannelType;
import dev.sheldan.abstracto.core.models.ARole;
@@ -31,13 +34,13 @@ public class StartupManager implements Startup {
private List extends ListenerAdapter> listeners;
@Autowired
- private ServerService serverService;
+ private ServerManagementService serverManagementService;
@Autowired
- private ChannelService channelService;
+ private ChannelManagementService channelManagementService;
@Autowired
- private RoleService roleService;
+ private RoleManagementService roleManagementService;
@Override
@@ -59,7 +62,7 @@ public class StartupManager implements Startup {
List onlineGuilds = instance.getGuilds();
Set availableServers = SnowflakeUtils.getSnowflakeIds(onlineGuilds);
availableServers.forEach(aLong -> {
- AServer newAServer = serverService.createServer(aLong);
+ AServer newAServer = serverManagementService.createServer(aLong);
Guild newGuild = instance.getGuildById(aLong);
log.debug("Synchronizing server: {}", aLong);
if(newGuild != null){
@@ -77,7 +80,7 @@ public class StartupManager implements Startup {
Set availableRoles = SnowflakeUtils.getSnowflakeIds(existingRoles);
Set newRoles = SetUtils.disjunction(availableRoles, knownRolesId);
newRoles.forEach(aLong -> {
- ARole newRole = roleService.createRole(aLong);
+ ARole newRole = roleManagementService.createRole(aLong);
log.debug("Adding new role: {}", aLong);
existingAServer.getRoles().add(newRole);
});
@@ -93,8 +96,8 @@ public class StartupManager implements Startup {
GuildChannel channel1 = available.stream().filter(channel -> channel.getIdLong() == aLong).findFirst().get();
log.debug("Adding new channel: {}", aLong);
AChannelType type = AChannel.getAChannelType(channel1.getType());
- AChannel newChannel = channelService.createChannel(channel1.getIdLong(), type);
- serverService.addChannelToServer(existingServer, newChannel);
+ AChannel newChannel = channelManagementService.createChannel(channel1.getIdLong(), type);
+ serverManagementService.addChannelToServer(existingServer, newChannel);
});
}
}
diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/listener/JoinLeaveListener.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/listener/JoinLeaveListener.java
index 62838e424..913ca7c87 100644
--- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/listener/JoinLeaveListener.java
+++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/listener/JoinLeaveListener.java
@@ -1,12 +1,11 @@
package dev.sheldan.abstracto.listener;
-import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.PostTarget;
+import dev.sheldan.abstracto.core.management.PostTargetManagement;
import dev.sheldan.abstracto.core.service.PostTargetService;
-import dev.sheldan.abstracto.core.service.ServerService;
+import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.templating.TemplateService;
import lombok.extern.slf4j.Slf4j;
-import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
import net.dv8tion.jda.api.events.guild.member.GuildMemberLeaveEvent;
@@ -23,30 +22,34 @@ import java.util.HashMap;
@Slf4j
public class JoinLeaveListener extends ListenerAdapter {
- public static final String USER_JOIN_TEMPLATE = "user_join";
- public static final String USER_LEAVE_TEMPLATE = "user_leave";
+ private static final String USER_JOIN_TEMPLATE = "user_join";
+ private static final String USER_LEAVE_TEMPLATE = "user_leave";
@Autowired
- private PostTargetService postTargetService;
+ private PostTargetManagement postTargetManagement;
@Autowired
- private ServerService serverService;
+ private ServerManagementService serverManagementService;
@Autowired
private TemplateService templateService;
+ @Autowired
+ private PostTargetService postTargetService;
+
@Override
@Transactional
public void onGuildMemberJoin(@Nonnull GuildMemberJoinEvent event) {
- AServer server = serverService.loadServer(event.getGuild().getIdLong());
- PostTarget target = postTargetService.getPostTarget(PostTarget.JOIN_LOG, server);
- TextChannel textChannelById = event.getGuild().getTextChannelById(target.getChannelReference().getId());
- if(textChannelById != null){
- HashMap parameters = getUserParameter(event.getUser());
- String text = templateService.renderTemplate(USER_JOIN_TEMPLATE, parameters);
- textChannelById.sendMessage(text).queue();
- } else {
- log.warn("{} post target is not defined for server {}", PostTarget.JOIN_LOG, server.getId());
- }
+ String text = getRenderedEvent(event.getUser(), USER_JOIN_TEMPLATE);
+ PostTarget postTarget = postTargetManagement.getPostTarget(PostTarget.JOIN_LOG, event.getGuild().getIdLong());
+ postTargetService.sendTextInPostTarget(text, postTarget);
+ }
+
+ @Override
+ @Transactional
+ public void onGuildMemberLeave(@Nonnull GuildMemberLeaveEvent event) {
+ String text = getRenderedEvent(event.getUser(), USER_LEAVE_TEMPLATE);
+ PostTarget postTarget = postTargetManagement.getPostTarget(PostTarget.LEAVE_LOG, event.getGuild().getIdLong());
+ postTargetService.sendTextInPostTarget(text, postTarget);
}
@NotNull
@@ -57,18 +60,8 @@ public class JoinLeaveListener extends ListenerAdapter {
return parameters;
}
- @Override
- @Transactional
- public void onGuildMemberLeave(@Nonnull GuildMemberLeaveEvent event) {
- AServer server = serverService.loadServer(event.getGuild().getIdLong());
- PostTarget target = postTargetService.getPostTarget(PostTarget.LEAVE_LOG, server);
- TextChannel textChannelById = event.getGuild().getTextChannelById(target.getChannelReference().getId());
- if(textChannelById != null){
- HashMap parameters = getUserParameter(event.getUser());
- String text = templateService.renderTemplate(USER_LEAVE_TEMPLATE, parameters);
- textChannelById.sendMessage(text).queue();
- } else {
- log.warn("{} post target is not defined for server {}", PostTarget.LEAVE_LOG, server.getId());
- }
+ private String getRenderedEvent(User user, String templateName) {
+ HashMap parameters = getUserParameter(user);
+ return templateService.renderTemplate(templateName, parameters);
}
}
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementService.java
new file mode 100644
index 000000000..70f3c030b
--- /dev/null
+++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementService.java
@@ -0,0 +1,9 @@
+package dev.sheldan.abstracto.core.management;
+
+import dev.sheldan.abstracto.core.models.AChannel;
+import dev.sheldan.abstracto.core.models.AChannelType;
+
+public interface ChannelManagementService {
+ AChannel loadChannel(Long id);
+ AChannel createChannel(Long id, AChannelType type);
+}
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagement.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagement.java
new file mode 100644
index 000000000..bd0e8243d
--- /dev/null
+++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagement.java
@@ -0,0 +1,15 @@
+package dev.sheldan.abstracto.core.management;
+
+import dev.sheldan.abstracto.core.models.AChannel;
+import dev.sheldan.abstracto.core.models.AServer;
+import dev.sheldan.abstracto.core.models.PostTarget;
+
+public interface PostTargetManagement {
+ void createPostTarget(String name, AChannel targetChanel, AServer server);
+ void createOrUpdate(String name, AChannel targetChannel, AServer server);
+ void createOrUpdate(String name, Long channelId, AServer server);
+ void createOrUpdate(String name, Long channelId, Long serverId);
+ PostTarget getPostTarget(String name, AServer server);
+ PostTarget getPostTarget(String name, Long serverId);
+ void updatePostTarget(PostTarget target, AChannel newTargetChannel, AServer server);
+}
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementService.java
new file mode 100644
index 000000000..3309ebe75
--- /dev/null
+++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementService.java
@@ -0,0 +1,7 @@
+package dev.sheldan.abstracto.core.management;
+
+import dev.sheldan.abstracto.core.models.ARole;
+
+public interface RoleManagementService {
+ ARole createRole(Long id);
+}
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementService.java
new file mode 100644
index 000000000..be4ef2307
--- /dev/null
+++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementService.java
@@ -0,0 +1,15 @@
+package dev.sheldan.abstracto.core.management;
+
+import dev.sheldan.abstracto.core.models.AChannel;
+import dev.sheldan.abstracto.core.models.AServer;
+import dev.sheldan.abstracto.core.models.PostTarget;
+
+public interface ServerManagementService {
+ AServer createServer(Long id);
+ AServer loadServer(Long id);
+ void addChannelToServer(AServer server, AChannel channel);
+ AChannel getPostTarget(Long serverId, String name);
+ AChannel getPostTarget(Long serverId, PostTarget target);
+ AChannel getPostTarget(AServer server, PostTarget target);
+ AChannel getPostTarget(AServer server, String name);
+}
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AChannel.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AChannel.java
index 61d9c7531..801e9432b 100644
--- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AChannel.java
+++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AChannel.java
@@ -1,9 +1,6 @@
package dev.sheldan.abstracto.core.models;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
+import lombok.*;
import net.dv8tion.jda.api.entities.ChannelType;
import javax.persistence.*;
@@ -24,6 +21,10 @@ public class AChannel implements SnowFlake {
@ManyToMany(mappedBy = "channels")
private Set groups;
+ @ManyToOne(fetch = FetchType.LAZY)
+ @Getter @Setter
+ private AServer server;
+
@Getter
@Enumerated(EnumType.STRING)
private AChannelType type;
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AServer.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AServer.java
index 15eede8fd..003f16bb6 100644
--- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AServer.java
+++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AServer.java
@@ -25,7 +25,11 @@ public class AServer implements SnowFlake {
@Builder.Default
private List roles = new ArrayList<>();
- @OneToMany(fetch = FetchType.LAZY)
+ @OneToMany(
+ fetch = FetchType.LAZY,
+ mappedBy = "server",
+ cascade = CascadeType.ALL,
+ orphanRemoval = true)
@Getter
@Builder.Default
private List channels = new ArrayList<>();
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ChannelService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ChannelService.java
index 5551e61bc..b54ff59e2 100644
--- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ChannelService.java
+++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ChannelService.java
@@ -1,9 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.AChannel;
-import dev.sheldan.abstracto.core.models.AChannelType;
public interface ChannelService {
- AChannel loadChannel(Long id);
- AChannel createChannel(Long id, AChannelType type);
+ void sendTextInAChannel(String text, AChannel channel);
}
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/PostTargetService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/PostTargetService.java
index e9ea1c9a0..833e4cdc0 100644
--- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/PostTargetService.java
+++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/PostTargetService.java
@@ -1,14 +1,7 @@
package dev.sheldan.abstracto.core.service;
-import dev.sheldan.abstracto.core.models.AChannel;
-import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.PostTarget;
public interface PostTargetService {
- void createPostTarget(String name, AChannel targetChanel, AServer server);
- void createOrUpdate(String name, AChannel targetChannel, AServer server);
- void createOrUpdate(String name, Long channelId, AServer server);
- void createOrUpdate(String name, Long channelId, Long serverId);
- PostTarget getPostTarget(String name, AServer server);
- void updatePostTarget(PostTarget target, AChannel newTargetChannel, AServer server);
+ void sendTextInPostTarget(String text, PostTarget target);
}
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java
deleted file mode 100644
index 587117483..000000000
--- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package dev.sheldan.abstracto.core.service;
-
-import dev.sheldan.abstracto.core.models.ARole;
-
-public interface RoleService {
- ARole createRole(Long id);
-}
diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ServerService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ServerService.java
deleted file mode 100644
index f5ad6ca63..000000000
--- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ServerService.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package dev.sheldan.abstracto.core.service;
-
-import dev.sheldan.abstracto.core.models.AChannel;
-import dev.sheldan.abstracto.core.models.AServer;
-
-public interface ServerService {
- AServer createServer(Long id);
- AServer loadServer(Long id);
- void addChannelToServer(AServer server, AChannel channel);
-}
diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/DatabaseTemplateLoader.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/DatabaseTemplateLoader.java
index 5149cf91f..e2acdab5a 100644
--- a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/DatabaseTemplateLoader.java
+++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/DatabaseTemplateLoader.java
@@ -18,12 +18,7 @@ public class DatabaseTemplateLoader implements TemplateLoader {
@Override
public Object findTemplateSource(String s) throws IOException {
- TemplateDto templateDtoByKey = templateService.getTemplateByKey(s);
- if(templateDtoByKey != null){
- return templateDtoByKey;
- } else {
- return null;
- }
+ return templateService.getTemplateByKey(s);
}
@Override
diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java
index 5ba5c29e0..cf637ecb3 100644
--- a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java
+++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java
@@ -4,6 +4,7 @@ import dev.sheldan.abstracto.templating.TemplateDto;
import dev.sheldan.abstracto.templating.TemplateService;
import freemarker.template.Configuration;
import freemarker.template.TemplateException;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
@@ -13,6 +14,7 @@ import java.io.IOException;
import java.time.Instant;
import java.util.HashMap;
+@Slf4j
@Component
public class TemplateServiceBean implements TemplateService {
@@ -37,10 +39,18 @@ public class TemplateServiceBean implements TemplateService {
public String renderTemplate(String key, HashMap parameters) {
try {
return FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate(key), parameters);
- } catch (IOException e) {
- e.printStackTrace();
- } catch (TemplateException e) {
- e.printStackTrace();
+ } catch (IOException | TemplateException e) {
+ log.warn("Failed to render template: {}", e.getMessage());
+ }
+ return "";
+ }
+
+ @Override
+ public String renderTemplate(String key, Object model) {
+ try {
+ return FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate(key), model);
+ } catch (IOException | TemplateException e) {
+ log.warn("Failed to render template: {}", e.getMessage());
}
return "";
}
diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeddata/TemplateSeedDataLoader.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeding/TemplateSeedDataLoader.java
similarity index 96%
rename from abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeddata/TemplateSeedDataLoader.java
rename to abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeding/TemplateSeedDataLoader.java
index 857a6ef04..eb62d7eb6 100644
--- a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeddata/TemplateSeedDataLoader.java
+++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeding/TemplateSeedDataLoader.java
@@ -1,4 +1,4 @@
-package dev.sheldan.abstracto.templating.seeddata;
+package dev.sheldan.abstracto.templating.seeding;
import dev.sheldan.abstracto.templating.TemplateService;
import org.apache.commons.io.FilenameUtils;
diff --git a/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/TemplateService.java b/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/TemplateService.java
index fada54cab..6725c41e0 100644
--- a/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/TemplateService.java
+++ b/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/TemplateService.java
@@ -6,5 +6,6 @@ public interface TemplateService {
TemplateDto getTemplateByKey(String key);
String renderTemplate(TemplateDto templateDto);
String renderTemplate(String key, HashMap parameters);
+ String renderTemplate(String key, Object model);
void createTemplate(String key, String content);
}