introduced ModuleRegistry to easy inter-module dependencies

This commit is contained in:
2025-08-09 13:43:10 +02:00
parent 1d569b4962
commit 8fb94fea4b
25 changed files with 343 additions and 255 deletions

View File

@@ -2,12 +2,13 @@
package de.srsoftware.umbrella.message;
import de.srsoftware.umbrella.core.BaseHandler;
import de.srsoftware.umbrella.core.ModuleRegistry;
public class MessageApi extends BaseHandler {
private final MessageSystem messageSystem;
private final ModuleRegistry registry;
public MessageApi(MessageSystem messageSystem) {
public MessageApi(ModuleRegistry moduleRegistry) {
super();
this.messageSystem = messageSystem;
this.registry = moduleRegistry;
}
}

View File

@@ -9,8 +9,8 @@ import static de.srsoftware.umbrella.message.Constants.*;
import static java.lang.System.Logger.Level.*;
import de.srsoftware.configuration.Configuration;
import de.srsoftware.umbrella.core.ModuleRegistry;
import de.srsoftware.umbrella.core.api.PostBox;
import de.srsoftware.umbrella.core.api.Translator;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.Envelope;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
@@ -32,6 +32,8 @@ import java.util.function.BiFunction;
public class MessageSystem implements PostBox {
public static final System.Logger LOG = System.getLogger(MessageSystem.class.getSimpleName());
private final Timer timer = new Timer();
private final ModuleRegistry registry;
private record Receiver(User user, de.srsoftware.umbrella.core.model.Message message){}
private class SubmissionTask extends TimerTask{
@@ -66,22 +68,20 @@ public class MessageSystem implements PostBox {
private final int port;
private final SqliteMessageDb db;
private Session session;
private List<Envelope> queue = new CopyOnWriteArrayList<>();
private final List<Envelope> queue = new CopyOnWriteArrayList<>();
private String debugAddress;
private final HashMap<Receiver,List<Exception>> exceptions = new HashMap<>();
private final Translator translator;
public MessageSystem(Translator translator, Configuration config) throws UmbrellaException {
var messageDbFile = config.get(CONFIG_DB).orElseThrow(() -> missingConfigException(CONFIG_DB));
db = new SqliteMessageDb(connect(messageDbFile));
this.translator = translator;
public MessageSystem(ModuleRegistry moduleRegistry, Configuration config) throws UmbrellaException {
var dbFile = config.get(CONFIG_DB).orElseThrow(() -> missingConfigException(CONFIG_DB));
db = new SqliteMessageDb(connect(dbFile));
debugAddress = config.get(DEBUG_ADDREESS).map(Object::toString).orElse(null);
port = config.get(CONFIG_SMTP_PORT,587);
host = config.get(CONFIG_SMTP_HOST).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.host not configured!"));
user = config.get(CONFIG_SMTP_USER).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.user not configured!"));
pass = config.get(CONFIG_SMTP_PASS).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.pass not configured!"));
from = user;
port = config.get(CONFIG_SMTP_PORT,587);
host = config.get(CONFIG_SMTP_HOST).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.host not configured!"));
user = config.get(CONFIG_SMTP_USER).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.user not configured!"));
pass = config.get(CONFIG_SMTP_PASS).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.pass not configured!"));
from = user;
registry = moduleRegistry.add(this);
new SubmissionTask(8).schedule();
new SubmissionTask(10).schedule();
new SubmissionTask(12).schedule();
@@ -117,7 +117,7 @@ public class MessageSystem implements PostBox {
var date = new Date();
for (var receiver : dueRecipients){
BiFunction<String,Map<String,String>,String> translateFunction = (text,fills) -> translator.translate(receiver.language(),text,fills);
BiFunction<String,Map<String,String>,String> translateFunction = (text,fills) -> registry.translator().translate(receiver.language(),text,fills);
var combined = new CombinedMessage("Collected messages",translateFunction);
var envelopes = queue.stream().filter(env -> env.isFor(receiver)).toList();