diff --git a/core-api/src/main/java/com/optimizely/ab/config/DatafileProjectConfig.java b/core-api/src/main/java/com/optimizely/ab/config/DatafileProjectConfig.java index 050f57add..0b188f064 100644 --- a/core-api/src/main/java/com/optimizely/ab/config/DatafileProjectConfig.java +++ b/core-api/src/main/java/com/optimizely/ab/config/DatafileProjectConfig.java @@ -1,6 +1,6 @@ /** * - * Copyright 2016-2019, Optimizely and contributors + * Copyright 2016-2020, Optimizely and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,7 +43,6 @@ * Optimizely provides custom JSON parsers to extract objects from the JSON payload * to populate the members of this class. {@link DefaultConfigParser} for details. */ -@Immutable @JsonIgnoreProperties(ignoreUnknown = true) public class DatafileProjectConfig implements ProjectConfig { @@ -88,6 +87,8 @@ public class DatafileProjectConfig implements ProjectConfig { // other mappings private final Map variationIdToExperimentMapping; + private String datafile; + // v2 constructor public DatafileProjectConfig(String accountId, String projectId, String version, String revision, List groups, List experiments, List attributes, List eventType, @@ -301,6 +302,11 @@ public String getAccountId() { return accountId; } + @Override + public String toDatafile() { + return datafile; + } + @Override public String getProjectId() { return projectId; @@ -481,6 +487,9 @@ public ProjectConfig build() throws ConfigParseException { } ProjectConfig projectConfig = DefaultConfigParser.getInstance().parseProjectConfig(datafile); + if (projectConfig instanceof DatafileProjectConfig) { + ((DatafileProjectConfig) projectConfig).datafile = datafile; + } if (!supportedVersions.contains(projectConfig.getVersion())) { throw new ConfigParseException("This version of the Java SDK does not support the given datafile version: " + projectConfig.getVersion()); diff --git a/core-api/src/main/java/com/optimizely/ab/config/ProjectConfig.java b/core-api/src/main/java/com/optimizely/ab/config/ProjectConfig.java index 6f7f3f066..7f83e30b8 100644 --- a/core-api/src/main/java/com/optimizely/ab/config/ProjectConfig.java +++ b/core-api/src/main/java/com/optimizely/ab/config/ProjectConfig.java @@ -1,6 +1,6 @@ /** * - * Copyright 2016-2019, Optimizely and contributors + * Copyright 2016-2020, Optimizely and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -47,6 +47,8 @@ Experiment getExperimentForKey(@Nonnull String experimentKey, String getAccountId(); + String toDatafile(); + String getProjectId(); String getVersion(); diff --git a/core-api/src/main/java/com/optimizely/ab/optimizelyconfig/OptimizelyConfig.java b/core-api/src/main/java/com/optimizely/ab/optimizelyconfig/OptimizelyConfig.java index 2696a4b1c..3e1ab5d5b 100644 --- a/core-api/src/main/java/com/optimizely/ab/optimizelyconfig/OptimizelyConfig.java +++ b/core-api/src/main/java/com/optimizely/ab/optimizelyconfig/OptimizelyConfig.java @@ -15,6 +15,7 @@ ***************************************************************************/ package com.optimizely.ab.optimizelyconfig; + import java.util.*; /** @@ -25,13 +26,22 @@ public class OptimizelyConfig { private Map experimentsMap; private Map featuresMap; private String revision; + private String datafile; public OptimizelyConfig(Map experimentsMap, Map featuresMap, String revision) { + this(experimentsMap, featuresMap, revision, null); + } + + public OptimizelyConfig(Map experimentsMap, + Map featuresMap, + String revision, + String datafile) { this.experimentsMap = experimentsMap; this.featuresMap = featuresMap; - this.revision = revision; + this.revision = revision; + this.datafile = datafile; } public Map getExperimentsMap() { @@ -46,6 +56,10 @@ public String getRevision() { return revision; } + public String getDatafile() { + return datafile; + } + @Override public boolean equals(Object obj) { if (obj == null || getClass() != obj.getClass()) return false; diff --git a/core-api/src/main/java/com/optimizely/ab/optimizelyconfig/OptimizelyConfigService.java b/core-api/src/main/java/com/optimizely/ab/optimizelyconfig/OptimizelyConfigService.java index 4ec447ead..f739ae549 100644 --- a/core-api/src/main/java/com/optimizely/ab/optimizelyconfig/OptimizelyConfigService.java +++ b/core-api/src/main/java/com/optimizely/ab/optimizelyconfig/OptimizelyConfigService.java @@ -31,7 +31,8 @@ public OptimizelyConfigService(ProjectConfig projectConfig) { optimizelyConfig = new OptimizelyConfig( experimentsMap, getFeaturesMap(experimentsMap), - projectConfig.getRevision() + projectConfig.getRevision(), + projectConfig.toDatafile() ); } diff --git a/core-api/src/test/java/com/optimizely/ab/OptimizelyTest.java b/core-api/src/test/java/com/optimizely/ab/OptimizelyTest.java index 6c32975a8..21dcd017e 100644 --- a/core-api/src/test/java/com/optimizely/ab/OptimizelyTest.java +++ b/core-api/src/test/java/com/optimizely/ab/OptimizelyTest.java @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2016-2019, Optimizely, Inc. and contributors * + * Copyright 2016-2020, Optimizely, Inc. and contributors * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * @@ -4572,4 +4572,11 @@ public void getForcedVariationEmptyExperimentKey() { Optimizely optimizely = optimizelyBuilder.build(); assertNull(optimizely.getForcedVariation("", "testUser1")); } + + @Test + public void getOptimizelyConfigValidDatafile() { + Optimizely optimizely = optimizelyBuilder.build(); + assertEquals(optimizely.getOptimizelyConfig().getDatafile(), validDatafile); + } + } diff --git a/core-api/src/test/java/com/optimizely/ab/config/DatafileProjectConfigBuilderTest.java b/core-api/src/test/java/com/optimizely/ab/config/DatafileProjectConfigBuilderTest.java index 7b4f78bf9..533be8be2 100644 --- a/core-api/src/test/java/com/optimizely/ab/config/DatafileProjectConfigBuilderTest.java +++ b/core-api/src/test/java/com/optimizely/ab/config/DatafileProjectConfigBuilderTest.java @@ -55,6 +55,8 @@ public void withValidDatafile() throws Exception { ProjectConfig projectConfig = new DatafileProjectConfig.Builder() .withDatafile(validConfigJsonV4()) .build(); + + assertEquals(projectConfig.toDatafile(), validConfigJsonV4()); assertNotNull(projectConfig); assertEquals("4", projectConfig.getVersion()); }