3434 */
3535@ Immutable
3636@ JsonIgnoreProperties (ignoreUnknown = true )
37- public class Experiment implements IdKeyMapped {
37+ public class Experiment implements ExperimentCore {
3838
3939 private final String id ;
4040 private final String key ;
@@ -43,10 +43,6 @@ public class Experiment implements IdKeyMapped {
4343 private final String groupId ;
4444 private final Cmab cmab ;
4545
46- private final String AND = "AND" ;
47- private final String OR = "OR" ;
48- private final String NOT = "NOT" ;
49-
5046 private final List <String > audienceIds ;
5147 private final Condition <AudienceIdCondition > audienceConditions ;
5248 private final List <Variation > variations ;
@@ -202,98 +198,6 @@ public boolean isLaunched() {
202198 return status .equals (ExperimentStatus .LAUNCHED .toString ());
203199 }
204200
205- public String serializeConditions (Map <String , String > audiencesMap ) {
206- Condition condition = this .audienceConditions ;
207- return condition instanceof EmptyCondition ? "" : this .serialize (condition , audiencesMap );
208- }
209-
210- private String getNameFromAudienceId (String audienceId , Map <String , String > audiencesMap ) {
211- StringBuilder audienceName = new StringBuilder ();
212- if (audiencesMap != null && audiencesMap .get (audienceId ) != null ) {
213- audienceName .append ("\" " + audiencesMap .get (audienceId ) + "\" " );
214- } else {
215- audienceName .append ("\" " + audienceId + "\" " );
216- }
217- return audienceName .toString ();
218- }
219-
220- private String getOperandOrAudienceId (Condition condition , Map <String , String > audiencesMap ) {
221- if (condition != null ) {
222- if (condition instanceof AudienceIdCondition ) {
223- return this .getNameFromAudienceId (condition .getOperandOrId (), audiencesMap );
224- } else {
225- return condition .getOperandOrId ();
226- }
227- } else {
228- return "" ;
229- }
230- }
231-
232- public String serialize (Condition condition , Map <String , String > audiencesMap ) {
233- StringBuilder stringBuilder = new StringBuilder ();
234- List <Condition > conditions ;
235-
236- String operand = this .getOperandOrAudienceId (condition , audiencesMap );
237- switch (operand ){
238- case (AND ):
239- conditions = ((AndCondition <?>) condition ).getConditions ();
240- stringBuilder .append (this .getNameOrNextCondition (operand , conditions , audiencesMap ));
241- break ;
242- case (OR ):
243- conditions = ((OrCondition <?>) condition ).getConditions ();
244- stringBuilder .append (this .getNameOrNextCondition (operand , conditions , audiencesMap ));
245- break ;
246- case (NOT ):
247- stringBuilder .append (operand + " " );
248- Condition notCondition = ((NotCondition <?>) condition ).getCondition ();
249- if (notCondition instanceof AudienceIdCondition ) {
250- stringBuilder .append (serialize (notCondition , audiencesMap ));
251- } else {
252- stringBuilder .append ("(" + serialize (notCondition , audiencesMap ) + ")" );
253- }
254- break ;
255- default :
256- stringBuilder .append (operand );
257- break ;
258- }
259-
260- return stringBuilder .toString ();
261- }
262-
263- public String getNameOrNextCondition (String operand , List <Condition > conditions , Map <String , String > audiencesMap ) {
264- StringBuilder stringBuilder = new StringBuilder ();
265- int index = 0 ;
266- if (conditions .isEmpty ()) {
267- return "" ;
268- } else if (conditions .size () == 1 ) {
269- return serialize (conditions .get (0 ), audiencesMap );
270- } else {
271- for (Condition con : conditions ) {
272- index ++;
273- if (index + 1 <= conditions .size ()) {
274- if (con instanceof AudienceIdCondition ) {
275- String audienceName = this .getNameFromAudienceId (((AudienceIdCondition <?>) con ).getAudienceId (),
276- audiencesMap );
277- stringBuilder .append ( audienceName + " " );
278- } else {
279- stringBuilder .append ("(" + serialize (con , audiencesMap ) + ") " );
280- }
281- stringBuilder .append (operand );
282- stringBuilder .append (" " );
283- } else {
284- if (con instanceof AudienceIdCondition ) {
285- String audienceName = this .getNameFromAudienceId (((AudienceIdCondition <?>) con ).getAudienceId (),
286- audiencesMap );
287- stringBuilder .append (audienceName );
288- } else {
289- stringBuilder .append ("(" + serialize (con , audiencesMap ) + ")" );
290- }
291- }
292- }
293- }
294- return stringBuilder .toString ();
295- }
296-
297201 @ Override
298202 public String toString () {
299203 return "Experiment{" +
0 commit comments