Search in sources :

Example 1 with FeatureFlag

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

the class JsonSimpleConfigParser method parseProjectConfig.

@Override
public ProjectConfig parseProjectConfig(@Nonnull String json) throws ConfigParseException {
    try {
        JSONParser parser = new JSONParser();
        JSONObject rootObject = (JSONObject) parser.parse(json);
        String accountId = (String) rootObject.get("accountId");
        String projectId = (String) rootObject.get("projectId");
        String revision = (String) rootObject.get("revision");
        String version = (String) rootObject.get("version");
        int datafileVersion = Integer.parseInt(version);
        List<Experiment> experiments = parseExperiments((JSONArray) rootObject.get("experiments"));
        List<Attribute> attributes;
        attributes = parseAttributes((JSONArray) rootObject.get("attributes"));
        List<EventType> events = parseEvents((JSONArray) rootObject.get("events"));
        List<Audience> audiences = parseAudiences((JSONArray) parser.parse(rootObject.get("audiences").toString()));
        List<Group> groups = parseGroups((JSONArray) rootObject.get("groups"));
        boolean anonymizeIP = false;
        List<LiveVariable> liveVariables = null;
        if (datafileVersion >= Integer.parseInt(ProjectConfig.Version.V3.toString())) {
            liveVariables = parseLiveVariables((JSONArray) rootObject.get("variables"));
            anonymizeIP = (Boolean) rootObject.get("anonymizeIP");
        }
        List<FeatureFlag> featureFlags = null;
        List<Rollout> rollouts = null;
        if (datafileVersion >= Integer.parseInt(ProjectConfig.Version.V4.toString())) {
            featureFlags = parseFeatureFlags((JSONArray) rootObject.get("featureFlags"));
            rollouts = parseRollouts((JSONArray) rootObject.get("rollouts"));
        }
        return new ProjectConfig(accountId, anonymizeIP, projectId, revision, version, attributes, audiences, events, experiments, featureFlags, groups, liveVariables, rollouts);
    } catch (Exception e) {
        throw new ConfigParseException("Unable to parse datafile: " + json, e);
    }
}
Also used : Group(com.optimizely.ab.config.Group) UserAttribute(com.optimizely.ab.config.audience.UserAttribute) Attribute(com.optimizely.ab.config.Attribute) EventType(com.optimizely.ab.config.EventType) FeatureFlag(com.optimizely.ab.config.FeatureFlag) Rollout(com.optimizely.ab.config.Rollout) Audience(com.optimizely.ab.config.audience.Audience) Experiment(com.optimizely.ab.config.Experiment) JSONArray(org.json.simple.JSONArray) LiveVariable(com.optimizely.ab.config.LiveVariable) ParseException(org.json.simple.parser.ParseException) ProjectConfig(com.optimizely.ab.config.ProjectConfig) JSONObject(org.json.simple.JSONObject) JSONParser(org.json.simple.parser.JSONParser)

Example 2 with FeatureFlag

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

the class JsonConfigParser method parseFeatureFlags.

private List<FeatureFlag> parseFeatureFlags(JSONArray featureFlagJson) {
    List<FeatureFlag> featureFlags = new ArrayList<FeatureFlag>(featureFlagJson.length());
    for (Object obj : featureFlagJson) {
        JSONObject featureFlagObject = (JSONObject) obj;
        String id = featureFlagObject.getString("id");
        String key = featureFlagObject.getString("key");
        String layerId = featureFlagObject.getString("rolloutId");
        List<String> experimentIds = parseExperimentIds(featureFlagObject.getJSONArray("experimentIds"));
        List<LiveVariable> variables = parseLiveVariables(featureFlagObject.getJSONArray("variables"));
        featureFlags.add(new FeatureFlag(id, key, layerId, experimentIds, variables));
    }
    return featureFlags;
}
Also used : JSONObject(org.json.JSONObject) ArrayList(java.util.ArrayList) FeatureFlag(com.optimizely.ab.config.FeatureFlag) JSONObject(org.json.JSONObject) LiveVariable(com.optimizely.ab.config.LiveVariable)

Example 3 with FeatureFlag

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

the class JsonConfigParser method parseProjectConfig.

@Override
public ProjectConfig parseProjectConfig(@Nonnull String json) throws ConfigParseException {
    try {
        JSONObject rootObject = new JSONObject(json);
        String accountId = rootObject.getString("accountId");
        String projectId = rootObject.getString("projectId");
        String revision = rootObject.getString("revision");
        String version = rootObject.getString("version");
        int datafileVersion = Integer.parseInt(version);
        List<Experiment> experiments = parseExperiments(rootObject.getJSONArray("experiments"));
        List<Attribute> attributes;
        attributes = parseAttributes(rootObject.getJSONArray("attributes"));
        List<EventType> events = parseEvents(rootObject.getJSONArray("events"));
        List<Audience> audiences = parseAudiences(rootObject.getJSONArray("audiences"));
        List<Group> groups = parseGroups(rootObject.getJSONArray("groups"));
        boolean anonymizeIP = false;
        List<LiveVariable> liveVariables = null;
        if (datafileVersion >= Integer.parseInt(ProjectConfig.Version.V3.toString())) {
            liveVariables = parseLiveVariables(rootObject.getJSONArray("variables"));
            anonymizeIP = rootObject.getBoolean("anonymizeIP");
        }
        List<FeatureFlag> featureFlags = null;
        List<Rollout> rollouts = null;
        if (datafileVersion >= Integer.parseInt(ProjectConfig.Version.V4.toString())) {
            featureFlags = parseFeatureFlags(rootObject.getJSONArray("featureFlags"));
            rollouts = parseRollouts(rootObject.getJSONArray("rollouts"));
        }
        return new ProjectConfig(accountId, anonymizeIP, projectId, revision, version, attributes, audiences, events, experiments, featureFlags, groups, liveVariables, rollouts);
    } catch (Exception e) {
        throw new ConfigParseException("Unable to parse datafile: " + json, e);
    }
}
Also used : Group(com.optimizely.ab.config.Group) UserAttribute(com.optimizely.ab.config.audience.UserAttribute) Attribute(com.optimizely.ab.config.Attribute) EventType(com.optimizely.ab.config.EventType) Audience(com.optimizely.ab.config.audience.Audience) Experiment(com.optimizely.ab.config.Experiment) FeatureFlag(com.optimizely.ab.config.FeatureFlag) LiveVariable(com.optimizely.ab.config.LiveVariable) ProjectConfig(com.optimizely.ab.config.ProjectConfig) JSONObject(org.json.JSONObject) Rollout(com.optimizely.ab.config.Rollout)

Example 4 with FeatureFlag

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

the class ProjectConfigJacksonDeserializer method deserialize.

@Override
public ProjectConfig deserialize(JsonParser parser, DeserializationContext context) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    SimpleModule module = new SimpleModule();
    module.addDeserializer(Audience.class, new AudienceJacksonDeserializer());
    module.addDeserializer(Group.class, new GroupJacksonDeserializer());
    mapper.registerModule(module);
    JsonNode node = parser.getCodec().readTree(parser);
    String accountId = node.get("accountId").textValue();
    String projectId = node.get("projectId").textValue();
    String revision = node.get("revision").textValue();
    String version = node.get("version").textValue();
    int datafileVersion = Integer.parseInt(version);
    List<Group> groups = mapper.readValue(node.get("groups").toString(), new TypeReference<List<Group>>() {
    });
    List<Experiment> experiments = mapper.readValue(node.get("experiments").toString(), new TypeReference<List<Experiment>>() {
    });
    List<Attribute> attributes;
    attributes = mapper.readValue(node.get("attributes").toString(), new TypeReference<List<Attribute>>() {
    });
    List<EventType> events = mapper.readValue(node.get("events").toString(), new TypeReference<List<EventType>>() {
    });
    List<Audience> audiences = mapper.readValue(node.get("audiences").toString(), new TypeReference<List<Audience>>() {
    });
    boolean anonymizeIP = false;
    List<LiveVariable> liveVariables = null;
    if (datafileVersion >= Integer.parseInt(ProjectConfig.Version.V3.toString())) {
        liveVariables = mapper.readValue(node.get("variables").toString(), new TypeReference<List<LiveVariable>>() {
        });
        anonymizeIP = node.get("anonymizeIP").asBoolean();
    }
    List<FeatureFlag> featureFlags = null;
    List<Rollout> rollouts = null;
    if (datafileVersion >= Integer.parseInt(ProjectConfig.Version.V4.toString())) {
        featureFlags = mapper.readValue(node.get("featureFlags").toString(), new TypeReference<List<FeatureFlag>>() {
        });
        rollouts = mapper.readValue(node.get("rollouts").toString(), new TypeReference<List<Rollout>>() {
        });
    }
    return new ProjectConfig(accountId, anonymizeIP, projectId, revision, version, attributes, audiences, events, experiments, featureFlags, groups, liveVariables, rollouts);
}
Also used : Group(com.optimizely.ab.config.Group) Attribute(com.optimizely.ab.config.Attribute) EventType(com.optimizely.ab.config.EventType) FeatureFlag(com.optimizely.ab.config.FeatureFlag) JsonNode(com.fasterxml.jackson.databind.JsonNode) List(java.util.List) TypeReference(com.fasterxml.jackson.core.type.TypeReference) Rollout(com.optimizely.ab.config.Rollout) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Audience(com.optimizely.ab.config.audience.Audience) Experiment(com.optimizely.ab.config.Experiment) LiveVariable(com.optimizely.ab.config.LiveVariable) ProjectConfig(com.optimizely.ab.config.ProjectConfig) SimpleModule(com.fasterxml.jackson.databind.module.SimpleModule)

Example 5 with FeatureFlag

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

the class JsonSimpleConfigParser method parseFeatureFlags.

private List<FeatureFlag> parseFeatureFlags(JSONArray featureFlagJson) {
    List<FeatureFlag> featureFlags = new ArrayList<FeatureFlag>(featureFlagJson.size());
    for (Object obj : featureFlagJson) {
        JSONObject featureFlagObject = (JSONObject) obj;
        String id = (String) featureFlagObject.get("id");
        String key = (String) featureFlagObject.get("key");
        String layerId = (String) featureFlagObject.get("rolloutId");
        JSONArray experimentIdsJsonArray = (JSONArray) featureFlagObject.get("experimentIds");
        List<String> experimentIds = parseExperimentIds(experimentIdsJsonArray);
        List<LiveVariable> liveVariables = parseLiveVariables((JSONArray) featureFlagObject.get("variables"));
        featureFlags.add(new FeatureFlag(id, key, layerId, experimentIds, liveVariables));
    }
    return featureFlags;
}
Also used : JSONObject(org.json.simple.JSONObject) ArrayList(java.util.ArrayList) JSONArray(org.json.simple.JSONArray) FeatureFlag(com.optimizely.ab.config.FeatureFlag) JSONObject(org.json.simple.JSONObject) LiveVariable(com.optimizely.ab.config.LiveVariable)

Aggregations

FeatureFlag (com.optimizely.ab.config.FeatureFlag)19 Experiment (com.optimizely.ab.config.Experiment)9 Test (org.junit.Test)9 Matchers.anyString (org.mockito.Matchers.anyString)9 LiveVariable (com.optimizely.ab.config.LiveVariable)8 Rollout (com.optimizely.ab.config.Rollout)6 ArrayList (java.util.ArrayList)5 Attribute (com.optimizely.ab.config.Attribute)4 EventType (com.optimizely.ab.config.EventType)4 Group (com.optimizely.ab.config.Group)4 ProjectConfig (com.optimizely.ab.config.ProjectConfig)4 Audience (com.optimizely.ab.config.audience.Audience)4 Variation (com.optimizely.ab.config.Variation)3 SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)3 List (java.util.List)3 FeatureDecision (com.optimizely.ab.bucketing.FeatureDecision)2 UserAttribute (com.optimizely.ab.config.audience.UserAttribute)2 Type (java.lang.reflect.Type)2 HashMap (java.util.HashMap)2 JSONObject (org.json.JSONObject)2