2020import com .optimizely .ab .config .EventType ;
2121import com .optimizely .ab .config .Experiment ;
2222import com .optimizely .ab .config .Experiment .ExperimentStatus ;
23+ import com .optimizely .ab .config .FeatureFlag ;
2324import com .optimizely .ab .config .Group ;
2425import com .optimizely .ab .config .LiveVariable ;
2526import 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