refactoring Events for better journal

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2026-01-10 01:10:24 +01:00
parent 0dd640de30
commit 10ea200a2e
9 changed files with 89 additions and 55 deletions

View File

@@ -1,35 +1,70 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.messagebus.events;
import static de.srsoftware.umbrella.core.Constants.USER;
import static de.srsoftware.umbrella.core.Constants.*;
import static java.text.MessageFormat.format;
import static java.util.Optional.*;
import de.srsoftware.tools.Mappable;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.json.JSONObject;
public abstract class Event<Payload extends Mappable> {
public enum EventType {
CREATE,
UPDATE,
DELETE;
}
private UmbrellaUser initiator;
private String module;
private Payload payload;
private EventType eventType;
private final UmbrellaUser initiator;
private final String module;
private final Payload payload;
private final EventType eventType;
private final Map<String, Object> oldData;
public Event(UmbrellaUser initiator, String module, Payload payload, EventType type){
this.initiator = initiator;
this.module = module;
this.payload = payload;
this.eventType = type;
this.oldData = null;
}
public Event(UmbrellaUser initiator, String module, Payload payload, Map<String, Object> oldData){
this.initiator = initiator;
this.module = module;
this.payload = payload;
this.eventType = EventType.UPDATE;
this.oldData = oldData;
}
public abstract String describe();
private String diff(Map<String, Object> a, Map<String, Object> b){
// TODO: replace by better implementation
return format("{0}\n→\n{1}",dropMarkdown(a),dropMarkdown(b));
}
private Map<String, Object> dropMarkdown(Map<String, Object> map) {
var result = new HashMap<String, Object>();
for (var entry : map.entrySet()){
var v = entry.getValue();
if (v instanceof Map<?,?> m && m.containsKey(RENDERED) && m.get(SOURCE) instanceof String s) v=s;
result.put(entry.getKey(),v);
}
return result;
}
public Optional<String> diff(){
return oldData == null ? empty() : of(diff(oldData,payload.toMap()));
}
public String eventType(){
return eventType.toString();
}

View File

@@ -5,6 +5,7 @@ import static de.srsoftware.umbrella.core.Constants.PROJECT;
import de.srsoftware.umbrella.core.model.Project;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.util.Map;
public class ProjectEvent extends Event<Project>{
@@ -12,9 +13,13 @@ public class ProjectEvent extends Event<Project>{
super(initiator, PROJECT, project, type);
}
public ProjectEvent(UmbrellaUser initiator, Project project, Map<String, Object> oldData){
super(initiator, PROJECT, project, oldData);
}
@Override
public String describe() {
return "[TODO: ProjectEvent.describe]";
return diff().orElse("[TODO: ProjectEvent.describe]");
}
@Override

View File

@@ -5,6 +5,7 @@ import static de.srsoftware.umbrella.core.Constants.TASK;
import de.srsoftware.umbrella.core.model.Task;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.util.Map;
public class TaskEvent extends Event<Task>{
@@ -12,9 +13,13 @@ public class TaskEvent extends Event<Task>{
super(initiator, TASK, task, type);
}
public TaskEvent(UmbrellaUser initiator, Task task, Map<String, Object> oldData){
super(initiator, TASK, task, oldData);
}
@Override
public String describe() {
return "[TODO: TaskEvent.describe()]";
return diff().orElse("[TODO: TaskEvent.describe()]");
}
@Override