All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vwo.mobile.models.Campaign Maven / Gradle / Ivy

There is a newer version: 2.7.0
Show newest version
package com.vwo.mobile.models;


import com.vwo.mobile.VWO;
import com.vwo.mobile.segmentation.CustomSegment;
import com.vwo.mobile.segmentation.DefaultSegment;
import com.vwo.mobile.segmentation.PredefinedSegment;
import com.vwo.mobile.segmentation.Segment;
import com.vwo.mobile.utils.VWOLog;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

public class Campaign {

    public final static String ID = "id";
    public final static String VERSION = "version";
    public final static String STATUS = "status";
    public final static String TRAFFIC = "pc_traffic";
    public final static String TYPE = "type";
    public static final String CAMPAIGN_NAME = "name";
    public final static String VARIATION = "variations";
    public final static String GOALS = "goals";
    public static final String SEGMENT_CUSTOM = "custom";
    public static final String SEGMENT_PREDEFINED = "predefined";
    public static final String SEGMENT_DEFAULT = "default";
    public static final String TEST_KEY = "test_key";
    // Track user automatically for a given campaign
    public static final String TRACK_USER_AUTOMATICALLY = "track_user_on_launch";
    private static final String SEGMENT_CODE = "segment_object";
    private static final String SEGMENT_TYPE = "type";
    private static final String PARTIAL_SEGMENTS = "partialSegments";
    private long mId;
    private int mVersion;
    private boolean trackUserAutomatically;
    private CampaignTypeEnum mType;
    private ArrayList mGoals;
    private Variation mVariation;
    private String mSegmentType;
    private String testKey;
    private String name;
    private ArrayList mSegments;

    public Campaign(VWO vwo, JSONObject campaignData) {
        try {
            VWOLog.v(VWOLog.CAMPAIGN_LOGS, campaignData.toString());

            this.mId = campaignData.getInt(ID);
            this.mVersion = campaignData.getInt(VERSION);
            mGoals = new ArrayList<>();
            this.mType = CampaignTypeEnum.getEnumFromCampaign(campaignData.getString(TYPE));

            name = campaignData.optString(CAMPAIGN_NAME, "campaign");
            testKey = campaignData.optString(TEST_KEY, name + "_" + mId);

            JSONArray goals = campaignData.getJSONArray(GOALS);
            for (int i = 0; i < goals.length(); i++) {
                JSONObject goal = goals.getJSONObject(i);
                mGoals.add(new Goal(goal));
                mVariation = new Variation(campaignData.getJSONObject(VARIATION));
            }

            try {
                this.trackUserAutomatically = campaignData.getBoolean(TRACK_USER_AUTOMATICALLY);
            } catch (JSONException exception) {
                this.trackUserAutomatically = false;
                VWOLog.e(VWOLog.DATA_LOGS, "Cannot find or parse key: " + TRACK_USER_AUTOMATICALLY,
                        exception, true, true);
            }

            if (campaignData.has(SEGMENT_CODE) && campaignData.getJSONObject(SEGMENT_CODE).has(SEGMENT_TYPE)) {

                JSONObject segmentCode = campaignData.getJSONObject(SEGMENT_CODE);
                // Check if segmentation is CUSTOM OR PREDEFINED
                switch (segmentCode.getString(SEGMENT_TYPE)) {
                    case SEGMENT_CUSTOM:
                        mSegmentType = SEGMENT_CUSTOM;
                        mSegments = new ArrayList<>();
                        JSONArray partialSegments = segmentCode.getJSONArray(PARTIAL_SEGMENTS);
                        for (int i = 0; i < partialSegments.length(); i++) {
                            mSegments.add(new CustomSegment(vwo, partialSegments.getJSONObject(i)));
                        }
                        break;
                    case SEGMENT_PREDEFINED:
                        mSegments = new ArrayList<>();
                        mSegments.add(new PredefinedSegment(vwo, segmentCode));
                        mSegmentType = SEGMENT_PREDEFINED;
                        break;
                    default:
                        mSegments = new ArrayList<>();
                        mSegments.add(new DefaultSegment(vwo));
                        mSegmentType = SEGMENT_DEFAULT;
                        break;
                }
            } else {
                mSegments = new ArrayList<>();
                mSegments.add(new DefaultSegment(vwo));
                mSegmentType = SEGMENT_DEFAULT;
            }
        } catch (JSONException e) {
            VWOLog.e(VWOLog.DATA_LOGS, e.getMessage(), true, true);
        }
    }

    public long getId() {
        return mId;
    }

    public String getName() {
        return this.name;
    }

    public int getVersion() {
        return mVersion;
    }

    public CampaignTypeEnum getType() {
        return mType;
    }

    public ArrayList getGoals() {
        return mGoals;
    }

    public Variation getVariation() {
        return mVariation;
    }

    public boolean shouldTrackUserAutomatically() {
        return trackUserAutomatically;
    }

    public ArrayList getSegments() {
        return mSegments;
    }

    public String getSegmentType() {
        return mSegmentType;
    }

    public String getTestKey() {
        return this.testKey;
    }

    @Override
    public boolean equals(Object obj) {
        return obj instanceof Campaign && ((Campaign) obj).getId() == this.mId || super.equals(obj);
    }

    @Override
    public int hashCode() {
        return (int) mId;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy