20
20
import com .optimizely .ab .config .EventType ;
21
21
import com .optimizely .ab .config .Experiment ;
22
22
import com .optimizely .ab .config .Experiment .ExperimentStatus ;
23
+ import com .optimizely .ab .config .FeatureFlag ;
23
24
import com .optimizely .ab .config .Group ;
24
25
import com .optimizely .ab .config .LiveVariable ;
25
26
import com .optimizely .ab .config .LiveVariable .VariableStatus ;
@@ -60,6 +61,7 @@ public ProjectConfig parseProjectConfig(@Nonnull String json) throws ConfigParse
60
61
String projectId = (String )rootObject .get ("projectId" );
61
62
String revision = (String )rootObject .get ("revision" );
62
63
String version = (String )rootObject .get ("version" );
64
+ int datafileVersion = Integer .parseInt (version );
63
65
64
66
List <Experiment > experiments = parseExperiments ((JSONArray )rootObject .get ("experiments" ));
65
67
@@ -72,14 +74,31 @@ public ProjectConfig parseProjectConfig(@Nonnull String json) throws ConfigParse
72
74
73
75
boolean anonymizeIP = false ;
74
76
List <LiveVariable > liveVariables = null ;
75
- if (version . equals ( ProjectConfig . Version . V3 . toString ()) ) {
77
+ if (datafileVersion >= 3 ) {
76
78
liveVariables = parseLiveVariables ((JSONArray )rootObject .get ("variables" ));
77
79
78
80
anonymizeIP = (Boolean )rootObject .get ("anonymizeIP" );
79
81
}
80
82
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
+ );
83
102
} catch (Exception e ) {
84
103
throw new ConfigParseException ("Unable to parse datafile: " + json , e );
85
104
}
@@ -125,6 +144,42 @@ private List<Experiment> parseExperiments(JSONArray experimentJson, String group
125
144
return experiments ;
126
145
}
127
146
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
+
128
183
private List <Variation > parseVariations (JSONArray variationJson ) {
129
184
List <Variation > variations = new ArrayList <Variation >(variationJson .size ());
130
185
@@ -189,11 +244,7 @@ private List<EventType> parseEvents(JSONArray eventJson) {
189
244
for (Object obj : eventJson ) {
190
245
JSONObject eventObject = (JSONObject )obj ;
191
246
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 );
197
248
198
249
String id = (String )eventObject .get ("id" );
199
250
String key = (String )eventObject .get ("key" );
0 commit comments