Skip to content

Commit 724d73e

Browse files
committed
Add JsonSimple FeatureFlag parsing
Fix JsonSimple ProjectConfig parsing Signed-off-by: wangjoshuah <wangjoshuah@gmail.com>
1 parent b0f277c commit 724d73e

File tree

1 file changed

+59
-8
lines changed

1 file changed

+59
-8
lines changed

core-api/src/main/java/com/optimizely/ab/config/parser/JsonSimpleConfigParser.java

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.optimizely.ab.config.EventType;
2121
import com.optimizely.ab.config.Experiment;
2222
import com.optimizely.ab.config.Experiment.ExperimentStatus;
23+
import com.optimizely.ab.config.FeatureFlag;
2324
import com.optimizely.ab.config.Group;
2425
import com.optimizely.ab.config.LiveVariable;
2526
import com.optimizely.ab.config.LiveVariable.VariableStatus;
@@ -60,6 +61,7 @@ public ProjectConfig parseProjectConfig(@Nonnull String json) throws ConfigParse
6061
String projectId = (String)rootObject.get("projectId");
6162
String revision = (String)rootObject.get("revision");
6263
String version = (String)rootObject.get("version");
64+
int datafileVersion = Integer.parseInt(version);
6365

6466
List<Experiment> experiments = parseExperiments((JSONArray)rootObject.get("experiments"));
6567

@@ -72,14 +74,31 @@ public ProjectConfig parseProjectConfig(@Nonnull String json) throws ConfigParse
7274

7375
boolean anonymizeIP = false;
7476
List<LiveVariable> liveVariables = null;
75-
if (version.equals(ProjectConfig.Version.V3.toString())) {
77+
if (datafileVersion >= 3) {
7678
liveVariables = parseLiveVariables((JSONArray)rootObject.get("variables"));
7779

7880
anonymizeIP = (Boolean)rootObject.get("anonymizeIP");
7981
}
8082

81-
return new ProjectConfig(accountId, projectId, version, revision, groups, experiments, attributes, events,
82-
audiences, anonymizeIP, liveVariables);
83+
List<FeatureFlag> featureFlags = null;
84+
if (datafileVersion >= 4) {
85+
featureFlags = parseFeatureFlags((JSONArray) rootObject.get("featureFlags"));
86+
}
87+
88+
return new ProjectConfig(
89+
accountId,
90+
anonymizeIP,
91+
projectId,
92+
revision,
93+
version,
94+
attributes,
95+
audiences,
96+
events,
97+
experiments,
98+
featureFlags,
99+
groups,
100+
liveVariables
101+
);
83102
} catch (Exception e) {
84103
throw new ConfigParseException("Unable to parse datafile: " + json, e);
85104
}
@@ -125,6 +144,42 @@ private List<Experiment> parseExperiments(JSONArray experimentJson, String group
125144
return experiments;
126145
}
127146

147+
private List<String> parseExperimentIds(JSONArray experimentIdsJsonArray) {
148+
List<String> experimentIds = new ArrayList<String>(experimentIdsJsonArray.size());
149+
150+
for (Object experimentIdObj : experimentIdsJsonArray) {
151+
experimentIds.add((String)experimentIdObj);
152+
}
153+
154+
return experimentIds;
155+
}
156+
157+
private List<FeatureFlag> parseFeatureFlags(JSONArray featureFlagJson) {
158+
List<FeatureFlag> featureFlags = new ArrayList<FeatureFlag>(featureFlagJson.size());
159+
160+
for (Object obj : featureFlagJson) {
161+
JSONObject featureFlagObject = (JSONObject)obj;
162+
String id = (String)featureFlagObject.get("id");
163+
String key = (String)featureFlagObject.get("key");
164+
String layerId = (String)featureFlagObject.get("layerId");
165+
166+
JSONArray experimentIdsJsonArray = (JSONArray)featureFlagObject.get("experimentIds");
167+
List<String> experimentIds = parseExperimentIds(experimentIdsJsonArray);
168+
169+
List<LiveVariable> liveVariables = parseLiveVariables((JSONArray) featureFlagObject.get("variables"));
170+
171+
featureFlags.add(new FeatureFlag(
172+
id,
173+
key,
174+
layerId,
175+
experimentIds,
176+
liveVariables
177+
));
178+
}
179+
180+
return featureFlags;
181+
}
182+
128183
private List<Variation> parseVariations(JSONArray variationJson) {
129184
List<Variation> variations = new ArrayList<Variation>(variationJson.size());
130185

@@ -189,11 +244,7 @@ private List<EventType> parseEvents(JSONArray eventJson) {
189244
for (Object obj : eventJson) {
190245
JSONObject eventObject = (JSONObject)obj;
191246
JSONArray experimentIdsJson = (JSONArray)eventObject.get("experimentIds");
192-
List<String> experimentIds = new ArrayList<String>(experimentIdsJson.size());
193-
194-
for (Object experimentIdObj : experimentIdsJson) {
195-
experimentIds.add((String)experimentIdObj);
196-
}
247+
List<String> experimentIds = parseExperimentIds(experimentIdsJson);
197248

198249
String id = (String)eventObject.get("id");
199250
String key = (String)eventObject.get("key");

0 commit comments

Comments
 (0)