-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathEventDataBuilder.java
107 lines (93 loc) · 3.1 KB
/
EventDataBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package io.kurrent.dbclient;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.json.JsonMapper;
import java.util.UUID;
/**
* Utility class to help building an <i>EventData</i>.
*/
public class EventDataBuilder {
private byte[] eventData;
private byte[] metadata;
private String eventType;
private boolean isJson;
private UUID id;
EventDataBuilder(){}
/**
* Configures an event data builder to host a JSON payload.
* @param eventType event's type.
* @param eventData event's payload.
* @return an event data builder.
*/
public static EventDataBuilder json(String eventType, byte[] eventData) {
return json(null, eventType, eventData);
}
/**
* Configures an event data builder to host a JSON payload.
* @param id event's id.
* @param eventType event's type.
* @param eventData event's payload.
* @return an event data builder.
*/
public static EventDataBuilder json(UUID id, String eventType, byte[] eventData) {
return binary(id, eventType, eventData, true);
}
/**
* Configures an event data builder to host a binary payload.
* @param eventType event's type.
* @param eventData event's payload.
* @return an event data builder.
*/
public static EventDataBuilder binary(String eventType, byte[] eventData) {
return binary(null, eventType, eventData);
}
/**
* Configures an event data builder to host a binary payload.
* @param id event's id.
* @param eventType event's type.
* @param eventData event's payload.
* @return an event data builder.
*/
public static EventDataBuilder binary(UUID id, String eventType, byte[] eventData) {
return binary(id, eventType, eventData, false);
}
/**
* Configures an event data builder to host a binary payload.
* @param id event's id.
* @param eventType event's type.
* @param eventData event's payload.
* @param isJson whether the payload is JSON or not.
* @return an event data builder.
*/
public static EventDataBuilder binary(UUID id, String eventType, byte[] eventData, boolean isJson) {
EventDataBuilder self = new EventDataBuilder();
self.eventData = eventData;
self.eventType = eventType;
self.isJson = isJson;
self.id = id;
return self;
}
/**
* Sets event's unique identifier.
*/
public EventDataBuilder eventId(UUID id) {
this.id = id;
return this;
}
/**
* Sets event's custom user metadata.
*/
public EventDataBuilder metadataAsBytes(byte[] value) {
this.metadata = value;
return this;
}
/**
* Builds an event ready to be sent to EventStoreDB.
*
* @see EventData
*/
public EventData build() {
UUID eventId = this.id == null ? UUID.randomUUID() : this.id;
String contentType = this.isJson ? ContentType.JSON : ContentType.BYTES;
return new EventData(eventId, this.eventType, contentType, this.eventData, this.metadata);
}
}