From 5722dfed41e0cf916e5b5031a650def038e52d95 Mon Sep 17 00:00:00 2001 From: Edson Amaya Date: Tue, 13 Aug 2024 18:49:13 -0600 Subject: [PATCH] Add methods to add new context on Message --- .../java/com/segment/analytics/Analytics.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/analytics/src/main/java/com/segment/analytics/Analytics.java b/analytics/src/main/java/com/segment/analytics/Analytics.java index 81af36c7..7c79c70a 100644 --- a/analytics/src/main/java/com/segment/analytics/Analytics.java +++ b/analytics/src/main/java/com/segment/analytics/Analytics.java @@ -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; @@ -45,6 +47,7 @@ public class Analytics { private final List messageTransformers; private final List messageInterceptors; private final Log log; + private Map externalContext; Analytics( AnalyticsClient client, @@ -55,6 +58,7 @@ public class Analytics { this.messageTransformers = messageTransformers; this.messageInterceptors = messageInterceptors; this.log = log; + this.externalContext = null; } /** @@ -114,7 +118,11 @@ private Message buildMessage(MessageBuilder builder) { return null; } } + + Map newContext = this.existExternalContext(builder.build()); + builder.context(newContext); Message message = builder.build(); + for (MessageInterceptor messageInterceptor : messageInterceptors) { message = messageInterceptor.intercept(message); if (message == null) { @@ -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 existExternalContext(Message message) { + + // Retrieve the existing context if it exists + Map existingContext = message.context(); + if (existingContext == null) { + existingContext = new HashMap<>(); + } + + // Augment the existing context with new context + Map 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";