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 471f8f8
Showing 1 changed file with 28 additions and 5 deletions.
33 changes: 28 additions & 5 deletions analytics/src/main/java/com/segment/analytics/Analytics.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,8 @@
import com.segment.analytics.internal.AnalyticsVersion;
import com.segment.analytics.messages.Message;
import com.segment.analytics.messages.MessageBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -45,6 +42,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 +53,7 @@ public class Analytics {
this.messageTransformers = messageTransformers;
this.messageInterceptors = messageInterceptors;
this.log = log;
this.externalContext = null;
}

/**
Expand Down Expand Up @@ -114,7 +113,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 +128,26 @@ 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);
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 471f8f8

Please sign in to comment.