3232import java .util .Map ;
3333
3434public class ConditionUtils {
35+
36+ static public <T > Condition parseConditions (Class <T > clazz , Object object ) throws InvalidAudienceCondition {
37+ if (object instanceof List ) {
38+ List <Object > objectList = (List <Object >)object ;
39+ return ConditionUtils .<T >parseConditions (clazz , objectList );
40+ }
41+ else if (object instanceof String ) { // looking for audience conditions in experiment
42+ AudienceIdCondition audienceIdCondition = new AudienceIdCondition <T >((String )object );
43+ if (clazz .isInstance (audienceIdCondition )) {
44+ return audienceIdCondition ;
45+ }
46+ else {
47+ throw new InvalidAudienceCondition (String .format ("Expected AudienceIdCondition got %s" , clazz .getCanonicalName ()));
48+ }
49+ }
50+ else if (object instanceof LinkedTreeMap ) { // gson
51+ if (clazz != UserAttribute .class ) {
52+ throw new InvalidAudienceCondition (String .format ("Expected UserAttributes got %s" , clazz .getCanonicalName ()));
53+
54+ }
55+
56+ LinkedTreeMap <String , ?> conditionMap = (LinkedTreeMap <String , ?>)object ;
57+ return new UserAttribute ((String )conditionMap .get ("name" ), (String )conditionMap .get ("type" ),
58+ (String )conditionMap .get ("match" ), conditionMap .get ("value" ));
59+ }
60+ else if (object instanceof JSONObject ) {
61+ if (clazz != UserAttribute .class ) {
62+ throw new InvalidAudienceCondition (String .format ("Expected UserAttributes got %s" , clazz .getCanonicalName ()));
63+
64+ }
65+
66+ JSONObject conditionMap = (JSONObject )object ;
67+ return new UserAttribute ((String )conditionMap .get ("name" ), (String )conditionMap .get ("type" ),
68+ (String )conditionMap .get ("match" ), conditionMap .get ("value" ));
69+ }
70+ else if (object instanceof org .json .JSONArray ) {
71+ return ConditionUtils .<T >parseConditions (clazz , (org .json .JSONArray ) object );
72+ }
73+ else if (object instanceof org .json .JSONObject ){
74+ if (clazz != UserAttribute .class ) {
75+ throw new InvalidAudienceCondition (String .format ("Expected UserAttributes got %s" , clazz .getCanonicalName ()));
76+
77+ }
78+ org .json .JSONObject conditionMap = (org .json .JSONObject )object ;
79+ String match = null ;
80+ Object value = null ;
81+ if (conditionMap .has ("match" )) {
82+ match = (String ) conditionMap .get ("match" );
83+ }
84+ if (conditionMap .has ("value" )) {
85+ value = conditionMap .get ("value" );
86+ }
87+ return new UserAttribute ((String )conditionMap .get ("name" ), (String )conditionMap .get ("type" ),
88+ match , value );
89+ }
90+
91+ else { // looking for audience conditions in audience
92+ if (clazz != UserAttribute .class ) {
93+ throw new InvalidAudienceCondition (String .format ("Expected UserAttributes got %s" , clazz .getCanonicalName ()));
94+
95+ }
96+
97+ Map <String , ?> conditionMap = (Map <String , ?>)object ;
98+ return new UserAttribute ((String )conditionMap .get ("name" ), (String )conditionMap .get ("type" ),
99+ (String )conditionMap .get ("match" ), conditionMap .get ("value" ));
100+ }
101+
102+ }
103+
35104 /**
36105 * parse conditions using List and Map
37106 * @param rawObjectList list of conditions
@@ -55,49 +124,7 @@ static public <T> Condition parseConditions(Class<T> clazz, List<Object> rawObje
55124
56125 for (int i = startingParseIndex ; i < rawObjectList .size (); i ++) {
57126 Object obj = rawObjectList .get (i );
58- if (obj instanceof List ) {
59- List <Object > objectList = (List <Object >)rawObjectList .get (i );
60- conditions .add (ConditionUtils .<T >parseConditions (clazz , objectList ));
61- }
62- else if (obj instanceof String ) { // looking for audience conditions in experiment
63- AudienceIdCondition audienceIdCondition = new AudienceIdCondition <T >((String )obj );
64- if (clazz .isInstance (audienceIdCondition )) {
65- conditions .add (new AudienceIdCondition ((String ) obj ));
66- }
67- else {
68- throw new InvalidAudienceCondition (String .format ("Expected AudienceIdCondition got %s" , clazz .getCanonicalName ()));
69- }
70- }
71- else if (obj instanceof LinkedTreeMap ) { // gson
72- if (clazz != UserAttribute .class ) {
73- throw new InvalidAudienceCondition (String .format ("Expected UserAttributes got %s" , clazz .getCanonicalName ()));
74-
75- }
76-
77- LinkedTreeMap <String , ?> conditionMap = (LinkedTreeMap <String , ?>)rawObjectList .get (i );
78- conditions .add (new UserAttribute ((String )conditionMap .get ("name" ), (String )conditionMap .get ("type" ),
79- (String )conditionMap .get ("match" ), conditionMap .get ("value" )));
80- }
81- else if (obj instanceof JSONObject ) {
82- if (clazz != UserAttribute .class ) {
83- throw new InvalidAudienceCondition (String .format ("Expected UserAttributes got %s" , clazz .getCanonicalName ()));
84-
85- }
86-
87- JSONObject conditionMap = (JSONObject )obj ;
88- conditions .add (new UserAttribute ((String )conditionMap .get ("name" ), (String )conditionMap .get ("type" ),
89- (String )conditionMap .get ("match" ), conditionMap .get ("value" )));
90- }
91- else { // looking for audience conditions in audience
92- if (clazz != UserAttribute .class ) {
93- throw new InvalidAudienceCondition (String .format ("Expected UserAttributes got %s" , clazz .getCanonicalName ()));
94-
95- }
96-
97- Map <String , ?> conditionMap = (Map <String , ?>)rawObjectList .get (i );
98- conditions .add (new UserAttribute ((String )conditionMap .get ("name" ), (String )conditionMap .get ("type" ),
99- (String )conditionMap .get ("match" ), conditionMap .get ("value" )));
100- }
127+ conditions .add (parseConditions (clazz , obj ));
101128 }
102129
103130 Condition condition ;
@@ -158,33 +185,7 @@ static public <T> Condition parseConditions(Class<T> clazz, org.json.JSONArray c
158185
159186 for (int i = startingParseIndex ; i < conditionJson .length (); i ++) {
160187 Object obj = conditionJson .get (i );
161- if (obj instanceof org .json .JSONArray ) {
162- conditions .add (ConditionUtils .<T >parseConditions (clazz , (org .json .JSONArray ) conditionJson .get (i )));
163- } else if (obj instanceof String ) {
164- AudienceIdCondition <T > audiencCondition = new AudienceIdCondition <T >((String )obj );
165- if (clazz .isInstance (audiencCondition )) {
166- conditions .add (audiencCondition );
167- }
168- else {
169- throw new InvalidAudienceCondition (String .format ("Expected AudienceIdCondition got %s" , clazz .getCanonicalName ()));
170- }
171- } else {
172- if (clazz != UserAttribute .class ) {
173- throw new InvalidAudienceCondition (String .format ("Expected UserAttributes got %s" , clazz .getCanonicalName ()));
174-
175- }
176- org .json .JSONObject conditionMap = (org .json .JSONObject )obj ;
177- String match = null ;
178- Object value = null ;
179- if (conditionMap .has ("match" )) {
180- match = (String ) conditionMap .get ("match" );
181- }
182- if (conditionMap .has ("value" )) {
183- value = conditionMap .get ("value" );
184- }
185- conditions .add (new UserAttribute ((String )conditionMap .get ("name" ), (String )conditionMap .get ("type" ),
186- match , value ));
187- }
188+ conditions .add (parseConditions (clazz , obj ));
188189 }
189190
190191 Condition condition ;
@@ -205,5 +206,4 @@ static public <T> Condition parseConditions(Class<T> clazz, org.json.JSONArray c
205206
206207 return condition ;
207208 }
208-
209209}
0 commit comments