blob: 339a1b9ea43dd9487c7b89c3945a28a8a7b7d11a [file] [log] [blame]
package org.wordpress.android.ui.plans.models;
import android.text.TextUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.wordpress.android.util.JSONUtils;
import org.wordpress.android.util.StringUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
public class Plan implements Serializable {
private long mProductID;
private String mProductName;
private final Hashtable<String, Integer> mPrices = new Hashtable<>();
private String mProductNameShort;
private String mProductSlug;
private String mTagline;
private String mDescription;
private long mCost;
private int mBillPeriod;
private String mProductType;
private boolean mIsAvailable;
private String mBillPeriodLabel;
private String mPrice;
private String mFormattedPrice;
private String mIconUrl;
private int mRawPrice;
// Optionals
private int mWidth;
private int mHeight;
private long mSaving; // diff from cost and original
private long mOriginal; // Original price
private String mFormattedOriginalPrice;
private int mStore;
private int mMulti;
private String mSupportDocument;
private String mCapability;
private ArrayList<Integer> mBundleProductIds;
private final ArrayList<PlanFeaturesHighlightSection> mFeaturesHighlightSections = new ArrayList<>();
// used to link with an actual product on the Store (ie: Used to load the price from the Store).
private String mAndroidSKU;
// Info attached to the current site/user
private int mRawDiscount;
private String mFormattedDiscount;
private boolean mIsCurrentPlan;
private boolean mCanStartTrial;
private String mExpiry;
private boolean mFreeTrial;
private String mUserFacingExpiry;
private String mSubscribedDate;
private String mBundleSubscriptionID;
public Plan(JSONObject planJSONObject) throws JSONException {
mProductID = planJSONObject.getLong("product_id");
mProductName = planJSONObject.getString("product_name");
// Unfold prices object
JSONObject priceJSONObject = planJSONObject.getJSONObject("prices");
JSONArray priceKeys = priceJSONObject.names();
if (priceKeys != null) {
for (int i=0; i < priceKeys.length(); i ++) {
String currentKey = priceKeys.getString(i);
int currentPrice = priceJSONObject.getInt(currentKey);
mPrices.put(currentKey, currentPrice);
}
}
mProductNameShort = planJSONObject.getString("product_name_short");
mProductSlug = planJSONObject.getString("product_slug");
mTagline = planJSONObject.getString("tagline");
mDescription = planJSONObject.getString("description");
mCost = planJSONObject.getLong("cost");
mBillPeriod = planJSONObject.getInt("bill_period");
mProductType = planJSONObject.getString("product_type");
mIsAvailable = JSONUtils.getBool(planJSONObject, "available");
mBillPeriodLabel = planJSONObject.getString("bill_period_label");
mPrice = planJSONObject.getString("price");
mFormattedPrice = planJSONObject.getString("formatted_price");
mRawPrice = planJSONObject.getInt("raw_price");
mIconUrl = planJSONObject.optString("icon");
mAndroidSKU = planJSONObject.optString("android_sku");
// Optionals
mWidth = planJSONObject.optInt("width");
mHeight = planJSONObject.optInt("height");
mSaving = planJSONObject.optLong("saving", 0L);
mOriginal = planJSONObject.optLong("original", mCost);
mFormattedOriginalPrice = planJSONObject.optString("formatted_original_price");
mSupportDocument = planJSONObject.optString("support_document");
mCapability = planJSONObject.optString("capability");
mStore = planJSONObject.optInt("store");
mMulti = planJSONObject.optInt("multi");
if (planJSONObject.has("bundle_product_ids")) {
JSONArray bundleIDS = planJSONObject.getJSONArray("bundle_product_ids");
mBundleProductIds = new ArrayList<>(bundleIDS.length());
for (int i=0; i < bundleIDS.length(); i ++) {
int currentBundleID = bundleIDS.getInt(i);
mBundleProductIds.add(currentBundleID);
}
}
if (planJSONObject.has("features_highlight")) {
JSONArray featuresHighlightSections = planJSONObject.getJSONArray("features_highlight");
for (int i=0; i < featuresHighlightSections.length(); i++) {
mFeaturesHighlightSections.add(
new PlanFeaturesHighlightSection(featuresHighlightSections.getJSONObject(i))
);
}
}
// Specific info liked with the current site
mRawDiscount = planJSONObject.optInt("raw_discount", 0);
mFormattedDiscount = planJSONObject.optString("formatted_discount");
mCanStartTrial = JSONUtils.getBool(planJSONObject, "can_start_trial");
mIsCurrentPlan = JSONUtils.getBool(planJSONObject, "current_plan");
mExpiry = planJSONObject.optString("expiry");
mUserFacingExpiry = planJSONObject.optString("user_facing_expiry");
mSubscribedDate = planJSONObject.optString("subscribed_date");
mFreeTrial = JSONUtils.getBool(planJSONObject, "free_trial");
mBundleSubscriptionID = planJSONObject.optString("bundle_subscription_id");
}
public long getProductID() {
return mProductID;
}
public String getProductName() {
return StringUtils.notNullStr(mProductName);
}
public Hashtable<String, Integer> getPrices() {
return mPrices;
}
public String getProductNameShort() {
return StringUtils.notNullStr(mProductNameShort);
}
public String getProductSlug() {
return StringUtils.notNullStr(mProductSlug);
}
public String getTagline() {
return StringUtils.notNullStr(mTagline);
}
public String getDescription() {
return StringUtils.notNullStr(mDescription);
}
public long getCost() {
return mCost;
}
public int getBillPeriod() {
return mBillPeriod;
}
public String getProductType() {
return StringUtils.notNullStr(mProductType);
}
public boolean isAvailable() {
return mIsAvailable;
}
public int getWidth() {
return mWidth;
}
public int getHeight() {
return mHeight;
}
public String getBillPeriodLabel() {
return StringUtils.notNullStr(mBillPeriodLabel);
}
public String getPrice() {
return StringUtils.notNullStr(mPrice);
}
public String getFormattedPrice() {
return StringUtils.notNullStr(mFormattedPrice);
}
public int getRawPrice() {
return mRawPrice;
}
public ArrayList<PlanFeaturesHighlightSection> getFeaturesHighlightSections() {
return mFeaturesHighlightSections;
}
public List<Integer> getBundleProductIds() {
return mBundleProductIds;
}
public String getCapability() {
return StringUtils.notNullStr(mCapability);
}
public String getSupportDocument() {
return StringUtils.notNullStr(mSupportDocument);
}
public int getMulti() {
return mMulti;
}
public int getStore() {
return mStore;
}
public String getFormattedOriginalPrice() {
return StringUtils.notNullStr(mFormattedOriginalPrice);
}
public long getSaving() {
return mSaving;
}
public long getOriginal() {
return mOriginal;
}
public String getIconUrl() {
return StringUtils.notNullStr(mIconUrl);
}
public void setIconUrl(String iconUrl) {
mIconUrl = StringUtils.notNullStr(iconUrl);
}
public boolean hasIconUrl() {
return !TextUtils.isEmpty(mIconUrl);
}
public int getRawDiscount() {
return mRawDiscount;
}
public String getFormattedDiscount() {
return StringUtils.notNullStr(mFormattedDiscount);
}
public boolean isCurrentPlan() {
return mIsCurrentPlan;
}
public boolean canStartTrial() {
return mCanStartTrial;
}
public String getSubscribedDate() {
return StringUtils.notNullStr(mSubscribedDate);
}
public String getUserFacingExpiry() {
return StringUtils.notNullStr(mUserFacingExpiry);
}
public boolean isFreeTrial() {
return mFreeTrial;
}
public String getExpiry() {
return StringUtils.notNullStr(mExpiry);
}
public String getBundleSubscriptionID() {
return StringUtils.notNullStr(mBundleSubscriptionID);
}
}