All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.serialized.client.aggregate.Event Maven / Gradle / Ivy

There is a newer version: 7.8.0
Show newest version
package io.serialized.client.aggregate;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;

import static java.util.Collections.unmodifiableMap;

public class Event {

  private String eventId;
  private String eventType;
  private T data;
  private String encryptedData;

  public String getEventId() {
    return eventId;
  }

  public String getEventType() {
    return eventType;
  }

  public T getData() {
    return data;
  }

  public String getEncryptedData() {
    return encryptedData;
  }

  public static Event.RawBuilder newEvent(String eventType) {
    return new Event.RawBuilder(eventType);
  }

  public static  Event.TypedBuilder newEvent(Class eventType) {
    return new Event.TypedBuilder<>(eventType);
  }

  public static  Event.TypedBuilder newEvent(T data) {
    Class aClass = (Class) data.getClass();
    return new TypedBuilder<>(aClass).data(data);
  }

  public static class TypedBuilder {

    private UUID eventId;
    private String eventType;
    private T data;
    private String encryptedData;

    public TypedBuilder(String eventType) {
      this.eventId = UUID.randomUUID();
      this.eventType = eventType;
    }

    public TypedBuilder(Class eventType) {
      this(eventType.getSimpleName());
    }

    public TypedBuilder eventId(UUID eventId) {
      this.eventId = eventId;
      return this;
    }

    public TypedBuilder data(T dataObject) {
      this.data = dataObject;
      return this;
    }

    public TypedBuilder eventId(String eventId) {
      return eventId(UUID.fromString(eventId));
    }

    public TypedBuilder encryptedData(String data) {
      this.encryptedData = data;
      return this;
    }

    public Event build() {
      Event event = new Event<>();
      event.eventId = eventId.toString();
      event.eventType = eventType;
      event.data = data;
      event.encryptedData = encryptedData;
      return event;
    }

  }

  public static class RawBuilder {

    private UUID eventId;
    private String eventType;
    private Object data = new LinkedHashMap<>();
    private String encryptedData;

    public RawBuilder(String eventType) {
      this.eventId = UUID.randomUUID();
      this.eventType = eventType;
    }

    public RawBuilder eventId(UUID eventId) {
      this.eventId = eventId;
      return this;
    }

    public RawBuilder eventId(String eventId) {
      return eventId(UUID.fromString(eventId));
    }

    public RawBuilder data(Map data) {
      LinkedHashMap dataMap = new LinkedHashMap<>();
      dataMap.putAll(data);
      this.data = dataMap;
      return this;
    }

    public RawBuilder data(String f1, Object d1) {
      Map map = new LinkedHashMap<>();
      map.put(f1, d1);
      this.data = unmodifiableMap(map);
      return this;
    }

    public RawBuilder data(String f1, Object d1, String f2, Object d2) {
      Map map = new LinkedHashMap<>();
      map.put(f1, d1);
      map.put(f2, d2);
      this.data = unmodifiableMap(map);
      return this;
    }

    public RawBuilder data(String f1, Object d1, String f2, Object d2, String f3, Object d3) {
      Map map = new LinkedHashMap<>();
      map.put(f1, d1);
      map.put(f2, d2);
      map.put(f3, d3);
      this.data = unmodifiableMap(map);
      return this;
    }

    public RawBuilder data(String f1, Object d1, String f2, Object d2, String f3, Object d3, String f4, Object d4) {
      Map map = new LinkedHashMap<>();
      map.put(f1, d1);
      map.put(f2, d2);
      map.put(f3, d3);
      map.put(f4, d4);
      this.data = unmodifiableMap(map);
      return this;
    }

    public RawBuilder data(String f1, Object d1, String f2, Object d2, String f3, Object d3, String f4, Object d4, String f5, Object d5) {
      Map map = new LinkedHashMap<>();
      map.put(f1, d1);
      map.put(f2, d2);
      map.put(f3, d3);
      map.put(f4, d4);
      map.put(f5, d5);
      this.data = unmodifiableMap(map);
      return this;
    }

    public RawBuilder encryptedData(String data) {
      this.encryptedData = data;
      return this;
    }

    public Event build() {
      Event event = new Event<>();
      event.eventId = eventId.toString();
      event.eventType = eventType;
      event.data = data;
      event.encryptedData = encryptedData;
      return event;
    }

  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy