refactoring Events for better journal
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user