package io.muoncore.protocol.event;
import io.muoncore.codec.Codecs;
import io.muoncore.config.AutoConfiguration;
import java.util.HashMap;
import java.util.Map;
public class EventCodec {
private static final String STREAM_NAME = "stream-name";
private static final String PAYLOAD = "payload";
private static final String EVENT_TYPE = "event-type";
private static final String CAUSED_BY = "caused-by";
private static final String CAUSED_BY_RELATION = "caused-by-relation";
private static final String SERVICE = "service-id";
private static final String ORDER_ID = "order-id";
private static final String EVENT_TIME = "event-time";
private static final String SCHEMA = "schema";
public static Event getEventFromMap(Map<String, Object> data, Codecs codecs) {
return new Event(
(String) data.get(EVENT_TYPE),
(String) data.get(STREAM_NAME),
(String) data.get(SCHEMA),
getCausedByIdAsLong(data.get(CAUSED_BY)),
(String) data.get(CAUSED_BY_RELATION),
(String) data.get(SERVICE),
(Long) data.get(ORDER_ID),
(Long) data.get(EVENT_TIME),
(Map)data.get(PAYLOAD),
codecs
);
}
private static Long getCausedByIdAsLong(Object val) {
if (val instanceof Double) {
Double dat = (Double) val;
return dat.longValue();
}
return (Long) val;
}
public static Map<String, Object> getMapFromClientEvent(ClientEvent event, AutoConfiguration config) {
Map<String, Object> payload = new HashMap<>();
payload.put(STREAM_NAME, event.getStreamName());
payload.put(PAYLOAD, event.getPayload());
payload.put(EVENT_TYPE, event.getEventType());
payload.put(CAUSED_BY, event.getCausedById());
payload.put(CAUSED_BY_RELATION, event.getCausedByRelation());
payload.put(SERVICE, config.getServiceName());
payload.put(SCHEMA, event.getSchema());
return payload;
}
public static Map<String, Object> getMapFromEvent(Event event) {
Map<String, Object> payload = new HashMap<>();
payload.put(STREAM_NAME, event.getStreamName());
payload.put(PAYLOAD, event.getPayload(Map.class));
payload.put(EVENT_TYPE, event.getEventType());
payload.put(CAUSED_BY, event.getCausedById());
payload.put(CAUSED_BY_RELATION, event.getCausedByRelation());
payload.put(SERVICE, event.getService());
payload.put(ORDER_ID, event.getOrderId());
payload.put(EVENT_TIME, event.getEventTime());
payload.put(SCHEMA, event.getSchema());
return payload;
}
}