refaturing message system, step 1: making message abstract and add TranslatableMessage and TranslatedMessage

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2026-01-21 18:04:09 +01:00
parent 8c10f820d5
commit 94d430a5a5
11 changed files with 125 additions and 75 deletions

View File

@@ -25,10 +25,7 @@ import de.srsoftware.umbrella.core.BaseHandler;
import de.srsoftware.umbrella.core.ModuleRegistry;
import de.srsoftware.umbrella.core.api.PostBox;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.Envelope;
import de.srsoftware.umbrella.core.model.Token;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import de.srsoftware.umbrella.core.model.User;
import de.srsoftware.umbrella.core.model.*;
import de.srsoftware.umbrella.message.model.*;
import de.srsoftware.umbrella.messagebus.EventListener;
import de.srsoftware.umbrella.messagebus.events.Event;
@@ -44,7 +41,6 @@ import jakarta.mail.util.ByteArrayDataSource;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -52,7 +48,7 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener
public static final System.Logger LOG = System.getLogger(MessageSystem.class.getSimpleName());
private final Timer timer = new Timer();
private record Receiver(User user, de.srsoftware.umbrella.core.model.Message message){}
private record Receiver(User user, Message<?> message){}
private class SubmissionTask extends TimerTask{
@@ -176,7 +172,7 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener
public void onEvent(Event<?> event) {
for (var user : event.audience()){
if (debugAddress != null && !debugAddress.equals(user.email().toString())) continue;
var message = new de.srsoftware.umbrella.core.model.Message(event.initiator(),event.subject(),event.describe(),null);
var message = new TranslatableMessage(event.initiator(),event.subject(),event.describe(),null);
var envelope = new Envelope(message,user);
send(envelope);
}
@@ -251,23 +247,24 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener
if (scheduledHour != null) new SubmissionTask(scheduledHour).schedule();
}
private boolean sendMessage(HttpExchange ex, UmbrellaUser user, Envelope envelope) throws IOException {
private boolean sendMessage(HttpExchange ex, UmbrellaUser user, Envelope<?> envelope) throws IOException {
var message = envelope.message();
var sender = message.sender().name();
var subject = message.subject().translate(user.language());
var body = message.body().translate(user.language());
if (message instanceof TranslatableMessage tm) message = tm.translate(user.language());
return sendContent(ex,Map.of(
SENDER,sender,
SUBJECT,subject,
BODY,body
SENDER,message.sender(),
SUBJECT,message.subject(),
BODY,message.body()
));
}
private static JSONObject summary(Envelope envelope, String lang) {
var sender = envelope.message().sender().name();
var subject = envelope.message().subject().translate(lang);
private static JSONObject summary(Envelope<?> envelope, String lang) {
var message = envelope.message();
if (message instanceof TranslatableMessage tm) message = tm.translate(lang);
var sender = message.sender().name();
var subject = message.subject();
var time = envelope.time().format(TIME_FORMATTER);
var hash = envelope.hashCode();
var hash = envelope.hashCode();
return new JSONObject(Map.of(SENDER,sender,SUBJECT,subject,TIMESTAMP,time,HASH,hash));
}

View File

@@ -15,7 +15,7 @@ public class CombinedMessage {
private final StringBuilder combinedBody = new StringBuilder();
private final User receiver;
private String combinedSubject = null;
private final List<Message> mergedMessages = new ArrayList<>();
private final List<Message<?>> mergedMessages = new ArrayList<>();
private final Translatable subjectForCombinedMessage;
private UmbrellaUser sender = null;
@@ -25,11 +25,12 @@ public class CombinedMessage {
this.receiver = receiver;
}
public void merge(Message message) {
public void merge(Message<?> message) {
LOG.log(TRACE,"Merging {0} into combined message…",message);
var lang = receiver.language();
var body = message.body().translate(lang);
var subject = message.subject().translate(lang);
if (message instanceof TranslatableMessage tm) message = tm.translate(lang);
var body = message.body();
var subject = message.subject().toString();
switch (mergedMessages.size()){
case 0:
combinedBody.append(body);
@@ -57,7 +58,7 @@ public class CombinedMessage {
return combinedBody.toString();
}
public List<Message> messages() {
public List<Message<?>> messages() {
return mergedMessages;
}