Search in sources :

Example 6 with UserAttribute

use of com.optimizely.ab.config.audience.UserAttribute in project java-sdk by optimizely.

the class JsonConfigParser method parseTypedAudiences.

private List<Audience> parseTypedAudiences(JSONArray audienceJson) {
    List<Audience> audiences = new ArrayList<Audience>(audienceJson.length());
    for (int i = 0; i < audienceJson.length(); i++) {
        Object obj = audienceJson.get(i);
        JSONObject audienceObject = (JSONObject) obj;
        String id = audienceObject.getString("id");
        String key = audienceObject.getString("name");
        Object conditionsObject = audienceObject.get("conditions");
        Condition conditions = ConditionUtils.<UserAttribute>parseConditions(UserAttribute.class, conditionsObject);
        audiences.add(new Audience(id, key, conditions));
    }
    return audiences;
}
Also used : Condition(com.optimizely.ab.config.audience.Condition) AudienceIdCondition(com.optimizely.ab.config.audience.AudienceIdCondition) JSONObject(org.json.JSONObject) Audience(com.optimizely.ab.config.audience.Audience) UserAttribute(com.optimizely.ab.config.audience.UserAttribute) JSONObject(org.json.JSONObject)

Example 7 with UserAttribute

use of com.optimizely.ab.config.audience.UserAttribute in project java-sdk by optimizely.

the class JsonSimpleConfigParser method parseAudiences.

private List<Audience> parseAudiences(JSONArray audienceJson) throws ParseException {
    JSONParser parser = new JSONParser();
    List<Audience> audiences = new ArrayList<Audience>(audienceJson.size());
    for (Object obj : audienceJson) {
        JSONObject audienceObject = (JSONObject) obj;
        String id = (String) audienceObject.get("id");
        String key = (String) audienceObject.get("name");
        Object conditionObject = audienceObject.get("conditions");
        Object conditionJson = parser.parse((String) conditionObject);
        Condition conditions = ConditionUtils.<UserAttribute>parseConditions(UserAttribute.class, conditionJson);
        audiences.add(new Audience(id, key, conditions));
    }
    return audiences;
}
Also used : Condition(com.optimizely.ab.config.audience.Condition) AudienceIdCondition(com.optimizely.ab.config.audience.AudienceIdCondition) JSONObject(org.json.simple.JSONObject) Audience(com.optimizely.ab.config.audience.Audience) UserAttribute(com.optimizely.ab.config.audience.UserAttribute) JSONParser(org.json.simple.parser.JSONParser) JSONObject(org.json.simple.JSONObject)

Example 8 with UserAttribute

use of com.optimizely.ab.config.audience.UserAttribute in project java-sdk by optimizely.

the class TypedAudienceJacksonDeserializer method deserialize.

@Override
public TypedAudience deserialize(JsonParser parser, DeserializationContext context) throws IOException {
    ObjectCodec codec = parser.getCodec();
    JsonNode node = codec.readTree(parser);
    String id = node.get("id").textValue();
    String name = node.get("name").textValue();
    JsonNode conditionsJson = node.get("conditions");
    Condition conditions = ConditionJacksonDeserializer.<UserAttribute>parseCondition(UserAttribute.class, objectMapper, conditionsJson);
    return new TypedAudience(id, name, conditions);
}
Also used : Condition(com.optimizely.ab.config.audience.Condition) UserAttribute(com.optimizely.ab.config.audience.UserAttribute) TypedAudience(com.optimizely.ab.config.audience.TypedAudience) JsonNode(com.fasterxml.jackson.databind.JsonNode) ObjectCodec(com.fasterxml.jackson.core.ObjectCodec)

Example 9 with UserAttribute

use of com.optimizely.ab.config.audience.UserAttribute in project java-sdk by optimizely.

the class JsonConfigParserTest method parseAudienceLeaf.

@Test
public void parseAudienceLeaf() throws Exception {
    JSONObject jsonObject = new JSONObject();
    jsonObject.append("id", "123");
    jsonObject.append("name", "blah");
    jsonObject.append("conditions", "{\"name\": \"doubleKey\", \"type\": \"custom_attribute\", \"match\":\"lt\", \"value\":100.0}");
    Condition<UserAttribute> condition = ConditionUtils.parseConditions(UserAttribute.class, new JSONObject("{\"name\": \"doubleKey\", \"type\": \"custom_attribute\", \"match\":\"lt\", \"value\":100.0}"));
    assertNotNull(condition);
}
Also used : JSONObject(org.json.JSONObject) UserAttribute(com.optimizely.ab.config.audience.UserAttribute) Test(org.junit.Test)

Example 10 with UserAttribute

use of com.optimizely.ab.config.audience.UserAttribute in project java-sdk by optimizely.

the class DatafileProjectConfigTestUtils method generateValidProjectConfigV2.

private static ProjectConfig generateValidProjectConfigV2() {
    List<Experiment> experiments = asList(new Experiment("223", "etag1", "Running", "1", singletonList("100"), null, asList(new Variation("276", "vtag1"), new Variation("277", "vtag2")), Collections.singletonMap("testUser1", "vtag1"), asList(new TrafficAllocation("276", 3500), new TrafficAllocation("277", 9000)), ""), new Experiment("118", "etag2", "Not started", "2", singletonList("100"), null, asList(new Variation("278", "vtag3"), new Variation("279", "vtag4")), Collections.singletonMap("testUser3", "vtag3"), asList(new TrafficAllocation("278", 4500), new TrafficAllocation("279", 9000)), ""), new Experiment("119", "etag3", "Not started", null, singletonList("100"), null, asList(new Variation("280", "vtag5"), new Variation("281", "vtag6")), Collections.singletonMap("testUser4", "vtag5"), asList(new TrafficAllocation("280", 4500), new TrafficAllocation("281", 9000)), ""));
    List<Attribute> attributes = singletonList(new Attribute("134", "browser_type"));
    List<String> singleExperimentId = singletonList("223");
    List<String> multipleExperimentIds = asList("118", "223");
    List<EventType> events = asList(new EventType("971", "clicked_cart", singleExperimentId), new EventType("098", "Total Revenue", singleExperimentId), new EventType("099", "clicked_purchase", multipleExperimentIds), new EventType("100", "no_running_experiments", singletonList("118")));
    List<Condition> userAttributes = new ArrayList<Condition>();
    userAttributes.add(new UserAttribute("browser_type", "custom_attribute", null, "firefox"));
    OrCondition orInner = new OrCondition(userAttributes);
    NotCondition notCondition = new NotCondition(orInner);
    List<Condition> outerOrList = new ArrayList<Condition>();
    outerOrList.add(notCondition);
    OrCondition orOuter = new OrCondition(outerOrList);
    List<Condition> andList = new ArrayList<Condition>();
    andList.add(orOuter);
    AndCondition andCondition = new AndCondition(andList);
    List<Audience> audiences = singletonList(new Audience("100", "not_firefox_users", andCondition));
    Map<String, String> userIdToVariationKeyMap = new HashMap<String, String>();
    userIdToVariationKeyMap.put("testUser1", "e1_vtag1");
    userIdToVariationKeyMap.put("testUser2", "e1_vtag2");
    List<Experiment> randomGroupExperiments = asList(new Experiment("301", "group_etag2", "Running", "3", singletonList("100"), null, asList(new Variation("282", "e2_vtag1"), new Variation("283", "e2_vtag2")), Collections.<String, String>emptyMap(), asList(new TrafficAllocation("282", 5000), new TrafficAllocation("283", 10000)), "42"), new Experiment("300", "group_etag1", "Running", "4", singletonList("100"), null, asList(new Variation("280", "e1_vtag1"), new Variation("281", "e1_vtag2")), userIdToVariationKeyMap, asList(new TrafficAllocation("280", 3000), new TrafficAllocation("281", 10000)), "42"));
    List<Experiment> overlappingGroupExperiments = asList(new Experiment("302", "overlapping_etag1", "Running", "5", singletonList("100"), null, asList(new Variation("284", "e1_vtag1"), new Variation("285", "e1_vtag2")), userIdToVariationKeyMap, asList(new TrafficAllocation("284", 1500), new TrafficAllocation("285", 3000)), "43"));
    Group randomPolicyGroup = new Group("42", "random", randomGroupExperiments, asList(new TrafficAllocation("300", 3000), new TrafficAllocation("301", 9000), new TrafficAllocation("", 10000)));
    Group overlappingPolicyGroup = new Group("43", "overlapping", overlappingGroupExperiments, Collections.<TrafficAllocation>emptyList());
    List<Group> groups = asList(randomPolicyGroup, overlappingPolicyGroup);
    return new DatafileProjectConfig("789", "1234", "2", "42", groups, experiments, attributes, events, audiences);
}
Also used : Condition(com.optimizely.ab.config.audience.Condition) OrCondition(com.optimizely.ab.config.audience.OrCondition) NotCondition(com.optimizely.ab.config.audience.NotCondition) AndCondition(com.optimizely.ab.config.audience.AndCondition) NotCondition(com.optimizely.ab.config.audience.NotCondition) UserAttribute(com.optimizely.ab.config.audience.UserAttribute) Audience(com.optimizely.ab.config.audience.Audience) HashMap(java.util.HashMap) UserAttribute(com.optimizely.ab.config.audience.UserAttribute) ArrayList(java.util.ArrayList) AndCondition(com.optimizely.ab.config.audience.AndCondition) OrCondition(com.optimizely.ab.config.audience.OrCondition)

Aggregations

UserAttribute (com.optimizely.ab.config.audience.UserAttribute)20 Condition (com.optimizely.ab.config.audience.Condition)15 AndCondition (com.optimizely.ab.config.audience.AndCondition)10 NotCondition (com.optimizely.ab.config.audience.NotCondition)10 OrCondition (com.optimizely.ab.config.audience.OrCondition)10 ArrayList (java.util.ArrayList)10 Audience (com.optimizely.ab.config.audience.Audience)8 JSONObject (org.json.JSONObject)7 Test (org.junit.Test)6 AudienceIdCondition (com.optimizely.ab.config.audience.AudienceIdCondition)5 HashMap (java.util.HashMap)5 JSONArray (org.json.JSONArray)4 JSONObject (org.json.simple.JSONObject)4 List (java.util.List)3 LinkedTreeMap (com.google.gson.internal.LinkedTreeMap)2 ObjectCodec (com.fasterxml.jackson.core.ObjectCodec)1 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 JsonObject (com.google.gson.JsonObject)1 TypedAudience (com.optimizely.ab.config.audience.TypedAudience)1 Map (java.util.Map)1