From c321b411396dbd6f1d506eff3f84be052601bd00 Mon Sep 17 00:00:00 2001 From: "FOLIO3PK\\muhammadnoman" Date: Fri, 21 Aug 2020 17:32:38 +0500 Subject: [PATCH 1/6] added getDatafile method in project config and optimizelyconfig to return raw datafile --- .../ab/config/DatafileProjectConfig.java | 11 ++++++++++- .../optimizely/ab/config/ProjectConfig.java | 2 ++ .../ab/optimizelyconfig/OptimizelyConfig.java | 18 ++++++++++++++++-- .../OptimizelyConfigService.java | 3 ++- .../java/com/optimizely/ab/OptimizelyTest.java | 7 +++++++ 5 files changed, 37 insertions(+), 4 deletions(-) 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..901ca5695 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 @@ -88,6 +88,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 +303,11 @@ public String getAccountId() { return accountId; } + @Override + public String toDatafile() { + return datafile; + } + @Override public String getProjectId() { return projectId; @@ -436,6 +443,7 @@ public Map> getExperimentFeatureKeyMapping() { public String toString() { return "ProjectConfig{" + "accountId='" + accountId + '\'' + + ", datafile='" + datafile + '\'' + ", projectId='" + projectId + '\'' + ", revision='" + revision + '\'' + ", version='" + version + '\'' + @@ -480,7 +488,8 @@ public ProjectConfig build() throws ConfigParseException { throw new ConfigParseException("Unable to parse empty datafile."); } - ProjectConfig projectConfig = DefaultConfigParser.getInstance().parseProjectConfig(datafile); + DatafileProjectConfig projectConfig = (DatafileProjectConfig) DefaultConfigParser.getInstance().parseProjectConfig(datafile); + 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..01bf0aff9 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 @@ -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..3100f5f95 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 @@ -25,13 +25,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 +55,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; @@ -53,7 +66,8 @@ public boolean equals(Object obj) { OptimizelyConfig optimizelyConfig = (OptimizelyConfig) obj; return revision.equals(optimizelyConfig.getRevision()) && experimentsMap.equals(optimizelyConfig.getExperimentsMap()) && - featuresMap.equals(optimizelyConfig.getFeaturesMap()); + featuresMap.equals(optimizelyConfig.getFeaturesMap()) && + Objects.equals(datafile, optimizelyConfig.getDatafile()); } @Override 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..2d45dd20e 100644 --- a/core-api/src/test/java/com/optimizely/ab/OptimizelyTest.java +++ b/core-api/src/test/java/com/optimizely/ab/OptimizelyTest.java @@ -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); + } + } From 14813200b718012f8e86b9113d9900a53c00efb3 Mon Sep 17 00:00:00 2001 From: "FOLIO3PK\\muhammadnoman" Date: Fri, 21 Aug 2020 18:16:19 +0500 Subject: [PATCH 2/6] added Json ignore to avoid sending datafile in in optimizelyConfig json --- .../com/optimizely/ab/optimizelyconfig/OptimizelyConfig.java | 5 +++++ 1 file changed, 5 insertions(+) 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 3100f5f95..13a71a081 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,8 @@ ***************************************************************************/ package com.optimizely.ab.optimizelyconfig; +import com.fasterxml.jackson.annotation.JsonIgnore; + import java.util.*; /** @@ -25,6 +27,8 @@ public class OptimizelyConfig { private Map experimentsMap; private Map featuresMap; private String revision; + + @JsonIgnore private String datafile; public OptimizelyConfig(Map experimentsMap, @@ -55,6 +59,7 @@ public String getRevision() { return revision; } + @JsonIgnore public String getDatafile() { return datafile; } From ae205ee19bb957b72ec5c7efa1d8a77a03181af4 Mon Sep 17 00:00:00 2001 From: "FOLIO3PK\\muhammadnoman" Date: Fri, 21 Aug 2020 18:21:51 +0500 Subject: [PATCH 3/6] Updated headers --- .../java/com/optimizely/ab/config/DatafileProjectConfig.java | 2 +- .../src/main/java/com/optimizely/ab/config/ProjectConfig.java | 2 +- core-api/src/test/java/com/optimizely/ab/OptimizelyTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 901ca5695..c59009408 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. 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 01bf0aff9..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. 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 2d45dd20e..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. * From 4181c560c5f4c63faa52f0407ab07ea567478bce Mon Sep 17 00:00:00 2001 From: "FOLIO3PK\\muhammadnoman" Date: Tue, 25 Aug 2020 21:24:29 +0500 Subject: [PATCH 4/6] Added to datafile check removed datafile from to string --- .../java/com/optimizely/ab/config/DatafileProjectConfig.java | 1 - .../optimizely/ab/config/DatafileProjectConfigBuilderTest.java | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) 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 c59009408..977a90378 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 @@ -443,7 +443,6 @@ public Map> getExperimentFeatureKeyMapping() { public String toString() { return "ProjectConfig{" + "accountId='" + accountId + '\'' + - ", datafile='" + datafile + '\'' + ", projectId='" + projectId + '\'' + ", revision='" + revision + '\'' + ", version='" + version + '\'' + 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()); } From 31e1d20a4952faf8783871e9b4a04f14bd8bab92 Mon Sep 17 00:00:00 2001 From: "FOLIO3PK\\muhammadnoman" Date: Wed, 26 Aug 2020 13:55:30 +0500 Subject: [PATCH 5/6] Removed jsonIgnore from optimizelyConfig datafile variable --- .../com/optimizely/ab/config/DatafileProjectConfig.java | 7 ++++--- .../optimizely/ab/optimizelyconfig/OptimizelyConfig.java | 5 +---- 2 files changed, 5 insertions(+), 7 deletions(-) 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 977a90378..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 @@ -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 { @@ -487,8 +486,10 @@ public ProjectConfig build() throws ConfigParseException { throw new ConfigParseException("Unable to parse empty datafile."); } - DatafileProjectConfig projectConfig = (DatafileProjectConfig) DefaultConfigParser.getInstance().parseProjectConfig(datafile); - projectConfig.datafile = datafile; + 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/optimizelyconfig/OptimizelyConfig.java b/core-api/src/main/java/com/optimizely/ab/optimizelyconfig/OptimizelyConfig.java index 13a71a081..a13a53ec8 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 @@ -27,8 +27,6 @@ public class OptimizelyConfig { private Map experimentsMap; private Map featuresMap; private String revision; - - @JsonIgnore private String datafile; public OptimizelyConfig(Map experimentsMap, @@ -71,8 +69,7 @@ public boolean equals(Object obj) { OptimizelyConfig optimizelyConfig = (OptimizelyConfig) obj; return revision.equals(optimizelyConfig.getRevision()) && experimentsMap.equals(optimizelyConfig.getExperimentsMap()) && - featuresMap.equals(optimizelyConfig.getFeaturesMap()) && - Objects.equals(datafile, optimizelyConfig.getDatafile()); + featuresMap.equals(optimizelyConfig.getFeaturesMap()); } @Override From 92f56ea78875a903f5d170ecc1a4c57cc3f4363a Mon Sep 17 00:00:00 2001 From: "FOLIO3PK\\muhammadnoman" Date: Wed, 26 Aug 2020 14:51:47 +0500 Subject: [PATCH 6/6] removed jsonIgnore --- .../com/optimizely/ab/optimizelyconfig/OptimizelyConfig.java | 2 -- 1 file changed, 2 deletions(-) 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 a13a53ec8..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,7 +15,6 @@ ***************************************************************************/ package com.optimizely.ab.optimizelyconfig; -import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.*; @@ -57,7 +56,6 @@ public String getRevision() { return revision; } - @JsonIgnore public String getDatafile() { return datafile; }