Skip to content

Commit 5722dfe

Browse files
committed
Add methods to add new context on Message
1 parent a7641c5 commit 5722dfe

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

analytics/src/main/java/com/segment/analytics/Analytics.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
import java.util.Arrays;
1414
import java.util.Collections;
1515
import java.util.Date;
16+
import java.util.HashMap;
1617
import java.util.List;
18+
import java.util.Map;
1719
import java.util.concurrent.ExecutorService;
1820
import java.util.concurrent.ThreadFactory;
1921
import java.util.concurrent.TimeUnit;
@@ -45,6 +47,7 @@ public class Analytics {
4547
private final List<MessageTransformer> messageTransformers;
4648
private final List<MessageInterceptor> messageInterceptors;
4749
private final Log log;
50+
private Map<String, Object> externalContext;
4851

4952
Analytics(
5053
AnalyticsClient client,
@@ -55,6 +58,7 @@ public class Analytics {
5558
this.messageTransformers = messageTransformers;
5659
this.messageInterceptors = messageInterceptors;
5760
this.log = log;
61+
this.externalContext = null;
5862
}
5963

6064
/**
@@ -114,7 +118,11 @@ private Message buildMessage(MessageBuilder builder) {
114118
return null;
115119
}
116120
}
121+
122+
Map<String, Object> newContext = this.existExternalContext(builder.build());
123+
builder.context(newContext);
117124
Message message = builder.build();
125+
118126
for (MessageInterceptor messageInterceptor : messageInterceptors) {
119127
message = messageInterceptor.intercept(message);
120128
if (message == null) {
@@ -125,6 +133,27 @@ private Message buildMessage(MessageBuilder builder) {
125133
return message;
126134
}
127135

136+
private void addExternalContext(String contextKey, Object contextValue) {
137+
this.externalContext = new HashMap<>();
138+
this.externalContext.put(contextKey, contextValue);
139+
}
140+
141+
private Map<String, Object> existExternalContext(Message message) {
142+
143+
// Retrieve the existing context if it exists
144+
Map<String, ?> existingContext = message.context();
145+
if (existingContext == null) {
146+
existingContext = new HashMap<>();
147+
}
148+
149+
// Augment the existing context with new context
150+
Map<String, Object> newContext = new HashMap<>(existingContext);
151+
if (this.externalContext != null) {
152+
newContext.putAll(this.externalContext);
153+
}
154+
return newContext;
155+
}
156+
128157
/** Fluent API for creating {@link Analytics} instances. */
129158
public static class Builder {
130159
private static final String DEFAULT_ENDPOINT = "https://api.segment.io";

0 commit comments

Comments
 (0)