Skip to content

Commit

Permalink
Add methods to add new context on Message
Browse files Browse the repository at this point in the history
  • Loading branch information
edsonjab committed Aug 14, 2024
1 parent a7641c5 commit 5722dfe
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions analytics/src/main/java/com/segment/analytics/Analytics.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -45,6 +47,7 @@ public class Analytics {
private final List<MessageTransformer> messageTransformers;
private final List<MessageInterceptor> messageInterceptors;
private final Log log;
private Map<String, Object> externalContext;

Analytics(
AnalyticsClient client,
Expand All @@ -55,6 +58,7 @@ public class Analytics {
this.messageTransformers = messageTransformers;
this.messageInterceptors = messageInterceptors;
this.log = log;
this.externalContext = null;
}

/**
Expand Down Expand Up @@ -114,7 +118,11 @@ private Message buildMessage(MessageBuilder builder) {
return null;
}
}

Map<String, Object> newContext = this.existExternalContext(builder.build());
builder.context(newContext);
Message message = builder.build();

for (MessageInterceptor messageInterceptor : messageInterceptors) {
message = messageInterceptor.intercept(message);
if (message == null) {
Expand All @@ -125,6 +133,27 @@ private Message buildMessage(MessageBuilder builder) {
return message;
}

private void addExternalContext(String contextKey, Object contextValue) {
this.externalContext = new HashMap<>();
this.externalContext.put(contextKey, contextValue);
}

private Map<String, Object> existExternalContext(Message message) {

// Retrieve the existing context if it exists
Map<String, ?> existingContext = message.context();
if (existingContext == null) {
existingContext = new HashMap<>();
}

// Augment the existing context with new context
Map<String, Object> newContext = new HashMap<>(existingContext);
if (this.externalContext != null) {
newContext.putAll(this.externalContext);
}
return newContext;
}

/** Fluent API for creating {@link Analytics} instances. */
public static class Builder {
private static final String DEFAULT_ENDPOINT = "https://api.segment.io";
Expand Down

0 comments on commit 5722dfe

Please sign in to comment.