From 83d23dca87fae70841cce73f2da5beef228bbcd6 Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Wed, 8 Oct 2025 12:26:42 -0500 Subject: [PATCH] Add envId field to Match class to report environment ID MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds an Optional envId field to the Match class that reports the environment ID of the ConfigRow that matched during config evaluation. This allows consumers to know which environment's configuration was used. Changes: - Add envId field to Match class with getter - Update ConfigRuleEvaluator to extract project_env_id from ConfigRow - Update ConfigResolver to preserve envId when reifying matches - Update test files to include envId parameter in Match constructors Ported from https://github.com/prefab-cloud/prefab-cloud-java/pull/154 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../java/com/reforge/sdk/config/Match.java | 10 ++++++++- .../reforge/sdk/internal/ConfigResolver.java | 3 ++- .../sdk/internal/ConfigRuleEvaluator.java | 22 ++++++++++++++----- .../sdk/internal/ConfigResolverTest.java | 1 + .../internal/MatchStatsAggregatorTest.java | 4 ++++ .../sdk/internal/TelemetryManagerTest.java | 5 +++++ 6 files changed, 37 insertions(+), 8 deletions(-) diff --git a/sdk/src/main/java/com/reforge/sdk/config/Match.java b/sdk/src/main/java/com/reforge/sdk/config/Match.java index d553f864..cb9b4f28 100644 --- a/sdk/src/main/java/com/reforge/sdk/config/Match.java +++ b/sdk/src/main/java/com/reforge/sdk/config/Match.java @@ -13,6 +13,7 @@ public class Match { private final int rowIndex; private final int conditionalValueIndex; private final Optional weightedValueIndex; + private final Optional envId; public Match( Prefab.ConfigValue configValue, @@ -20,7 +21,8 @@ public Match( List evaluatedCriterion, int rowIndex, int conditionalValueIndex, - Optional weightedValueIndex + Optional weightedValueIndex, + Optional envId ) { this.configValue = configValue; this.configElement = configElement; @@ -28,6 +30,7 @@ public Match( this.rowIndex = rowIndex; this.conditionalValueIndex = conditionalValueIndex; this.weightedValueIndex = weightedValueIndex; + this.envId = envId; } public int getRowIndex() { @@ -42,6 +45,10 @@ public Optional getWeightedValueIndex() { return weightedValueIndex; } + public Optional getEnvId() { + return envId; + } + public Prefab.ConfigValue getConfigValue() { return configValue; } @@ -74,6 +81,7 @@ public String toString() { .add("rowIndex", rowIndex) .add("conditionalValueIndex", conditionalValueIndex) .add("weightedValueIndex", weightedValueIndex) + .add("envId", envId) .toString(); } } diff --git a/sdk/src/main/java/com/reforge/sdk/internal/ConfigResolver.java b/sdk/src/main/java/com/reforge/sdk/internal/ConfigResolver.java index 9ccc22bd..0ddc0b08 100644 --- a/sdk/src/main/java/com/reforge/sdk/internal/ConfigResolver.java +++ b/sdk/src/main/java/com/reforge/sdk/internal/ConfigResolver.java @@ -89,7 +89,8 @@ private Match reify(Match match, LookupContext lookupContext) { match.getEvaluatedCriterion(), match.getRowIndex(), match.getConditionalValueIndex(), - match.getWeightedValueIndex() + match.getWeightedValueIndex(), + match.getEnvId() ); } diff --git a/sdk/src/main/java/com/reforge/sdk/internal/ConfigRuleEvaluator.java b/sdk/src/main/java/com/reforge/sdk/internal/ConfigRuleEvaluator.java index dd7fd3aa..50af61ca 100644 --- a/sdk/src/main/java/com/reforge/sdk/internal/ConfigRuleEvaluator.java +++ b/sdk/src/main/java/com/reforge/sdk/internal/ConfigRuleEvaluator.java @@ -113,7 +113,8 @@ private Optional getMatch( conditionalValueIndex, lookupContext, rowPropertiesStack, - configElement + configElement, + configRow ); if (optionalMatch.isPresent()) { @@ -145,7 +146,8 @@ private Optional evaluateConditionalValue( int conditionalValueIndex, LookupContext lookupContext, Deque> rowProperties, - ConfigElement configElement + ConfigElement configElement, + Prefab.ConfigRow configRow ) { List evaluatedCriteria = new ArrayList<>(); for (Prefab.Criterion criterion : conditionalValue.getCriteriaList()) { @@ -167,7 +169,8 @@ private Optional evaluateConditionalValue( conditionalValueIndex, configElement, lookupContext, - evaluatedCriteria + evaluatedCriteria, + configRow ) ); } @@ -181,8 +184,13 @@ private Match simplifyToMatch( int conditionalValueIndex, ConfigElement configElement, LookupContext lookupContext, - List evaluatedCriteria + List evaluatedCriteria, + Prefab.ConfigRow configRow ) { + Optional envId = configRow.hasProjectEnvId() + ? Optional.of(configRow.getProjectEnvId()) + : Optional.empty(); + if (selectedConditionalValue.getValue().hasWeightedValues()) { WeightedValueEvaluator.Result result = weightedValueEvaluator.toResult( selectedConditionalValue.getValue().getWeightedValues(), @@ -195,7 +203,8 @@ private Match simplifyToMatch( evaluatedCriteria, (int) rowIndex, conditionalValueIndex, - Optional.of(result.getIndex()) + Optional.of(result.getIndex()), + envId ); } else { return new Match( @@ -204,7 +213,8 @@ private Match simplifyToMatch( evaluatedCriteria, (int) rowIndex, conditionalValueIndex, - Optional.empty() + Optional.empty(), + envId ); } } diff --git a/sdk/src/test/java/com/reforge/sdk/internal/ConfigResolverTest.java b/sdk/src/test/java/com/reforge/sdk/internal/ConfigResolverTest.java index b61c5271..21924489 100644 --- a/sdk/src/test/java/com/reforge/sdk/internal/ConfigResolverTest.java +++ b/sdk/src/test/java/com/reforge/sdk/internal/ConfigResolverTest.java @@ -241,6 +241,7 @@ Match match(Prefab.ConfigValue configValue, Prefab.Config config) { Collections.emptyList(), 0, 0, + Optional.empty(), Optional.empty() ); } diff --git a/sdk/src/test/java/com/reforge/sdk/internal/MatchStatsAggregatorTest.java b/sdk/src/test/java/com/reforge/sdk/internal/MatchStatsAggregatorTest.java index 3adc70e8..9f8e8d6b 100644 --- a/sdk/src/test/java/com/reforge/sdk/internal/MatchStatsAggregatorTest.java +++ b/sdk/src/test/java/com/reforge/sdk/internal/MatchStatsAggregatorTest.java @@ -69,6 +69,7 @@ void itAggregates() { Collections.emptyList(), 0, 2, + Optional.empty(), Optional.empty() ), 101 @@ -81,6 +82,7 @@ void itAggregates() { Collections.emptyList(), 0, 2, + Optional.empty(), Optional.empty() ), 102 @@ -93,6 +95,7 @@ void itAggregates() { Collections.emptyList(), 0, 2, + Optional.empty(), Optional.empty() ), 102 @@ -108,6 +111,7 @@ void itAggregates() { Collections.emptyList(), 0, 3, + Optional.empty(), Optional.empty() ), 107 diff --git a/sdk/src/test/java/com/reforge/sdk/internal/TelemetryManagerTest.java b/sdk/src/test/java/com/reforge/sdk/internal/TelemetryManagerTest.java index 4e6da76c..1b859c3f 100644 --- a/sdk/src/test/java/com/reforge/sdk/internal/TelemetryManagerTest.java +++ b/sdk/src/test/java/com/reforge/sdk/internal/TelemetryManagerTest.java @@ -358,6 +358,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 1, 2, + Optional.empty(), Optional.empty() ), new LookupContext( @@ -379,6 +380,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 1, 2, + Optional.empty(), Optional.empty() ), new LookupContext( @@ -400,6 +402,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 1, 2, + Optional.empty(), Optional.empty() ), new LookupContext( @@ -418,6 +421,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 0, 0, + Optional.empty(), Optional.empty() ), new LookupContext( @@ -436,6 +440,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 0, 0, + Optional.empty(), Optional.empty() ), new LookupContext(