32
32
import java .util .Map ;
33
33
34
34
public 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
+
35
104
/**
36
105
* parse conditions using List and Map
37
106
* @param rawObjectList list of conditions
@@ -55,49 +124,7 @@ static public <T> Condition parseConditions(Class<T> clazz, List<Object> rawObje
55
124
56
125
for (int i = startingParseIndex ; i < rawObjectList .size (); i ++) {
57
126
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 ));
101
128
}
102
129
103
130
Condition condition ;
@@ -158,33 +185,7 @@ static public <T> Condition parseConditions(Class<T> clazz, org.json.JSONArray c
158
185
159
186
for (int i = startingParseIndex ; i < conditionJson .length (); i ++) {
160
187
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 ));
188
189
}
189
190
190
191
Condition condition ;
@@ -205,5 +206,4 @@ static public <T> Condition parseConditions(Class<T> clazz, org.json.JSONArray c
205
206
206
207
return condition ;
207
208
}
208
-
209
209
}
0 commit comments