com.playhaven.android.data.Purchase.java Source code

Java tutorial

Introduction

Here is the source code for com.playhaven.android.data.Purchase.java

Source

/**
 * Copyright 2013 Medium Entertainment, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.playhaven.android.data;

import android.net.UrlQuerySanitizer;
import android.os.Parcel;
import android.os.Parcelable;
import com.jayway.jsonpath.JsonPath;
import com.playhaven.android.util.JsonUtil;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

import java.util.ArrayList;
import java.util.List;

/**
 * A representation of a Purchase
 */
public class Purchase implements Parcelable {
    public enum Result {
        /** Result was not set */
        Unset("unset"),
        /** The item has been bought */
        Bought("buy"),
        /** The purchase was cancelled */
        Cancelled("cancel"),
        /** The requested item was invalid */
        Invalid("invalid"),
        /** The requested item was already owned by this user */
        Owned("owned"),
        /** There was an error during the purchase process */
        Error("error");
        Result(String urlValue) {
            this.urlValue = urlValue;
        }

        private String urlValue;

        public String getUrlValue() {
            return urlValue;
        }
    }

    public enum Store {
        Google, Amazon, PayPal, Samsung, LG, Motorola, Dell, CISCO, Docomo, Lenovo, Verizon, Vodafone, ChinaMobile, TMobile, Sprint, Aircel, Airtel, Maxis, TIM, ATT, M1, TStore, AppZone, Turkcell, Omnitel, MTNPlay, AppBrain, SlideMe, AppsLib, Tegra, AndroidPit, Socii0, Camangi, Nook, Appoke
    }

    private String cookie, title, sku, signature, quantity, receipt, placementTag, price, store;
    // For receipt verification
    private String payload, orderId;
    private Result result = Result.Unset;

    public static ArrayList<Purchase> fromJson(String json) {
        if (json == null)
            return new ArrayList<Purchase>(0);

        String url = JsonUtil.getPath(json, "$.url");
        UrlQuerySanitizer sanitizer = new UrlQuerySanitizer(url);
        final String placementTag = sanitizer.getValue("placement_tag");

        ArrayList<Purchase> toReturn = new ArrayList<Purchase>();
        for (String jsonPurchase : JsonUtil.forEach(json, "$.purchases"))
            toReturn.add(new Purchase(jsonPurchase, placementTag));

        return toReturn;
    }

    public Purchase(String json, String placementTag) {
        this.cookie = JsonUtil.getPath(json, "$.cookie");
        this.title = JsonUtil.getPath(json, "$.name");
        this.sku = JsonUtil.getPath(json, "$.product");
        this.signature = JsonUtil.getPath(json, "$.sig4");
        this.price = null;
        this.store = null;
        this.placementTag = placementTag;
        this.payload = null;
        this.orderId = null;

        /**
         * Google/Amazon/Samsung all use Strings
         * client-api expects Integer
         */
        this.quantity = JsonUtil.asString(json, "$.quantity");
        this.receipt = JsonUtil.asString(json, "$.receipt");
    }

    public Purchase(Parcel in) {
        readFromParcel(in);
    }

    public Purchase() {

    }

    /**
     * Describe the kinds of special objects contained in this Parcelable's marshalled representation.
     *
     * @return a bitmask indicating the set of special object types marshalled by the Parcelable.
     */
    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * Flatten this object in to a Parcel.
     *
     * @param dest The Parcel in which the object should be written.
     * @param flags Additional flags about how the object should be written. May be 0 or Parcel#PARCELABLE_WRITE_RETURN_VALUE.
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(sku);
        dest.writeString(title);
        dest.writeString(quantity);
        dest.writeString(price);
        dest.writeString(store);
        dest.writeString(signature);
        dest.writeString(receipt);
        dest.writeString(cookie);
        dest.writeString(placementTag);
        dest.writeString(payload);
        dest.writeString(orderId);
        dest.writeInt(result.ordinal());
    }

    /**
     * Deserialize this object from a Parcel
     *
     * @param in parcel to read from
     */
    protected void readFromParcel(Parcel in) {
        sku = in.readString();
        title = in.readString();
        quantity = in.readString();
        price = in.readString();
        store = in.readString();
        signature = in.readString();
        receipt = in.readString();
        cookie = in.readString();
        placementTag = in.readString();
        payload = in.readString();
        orderId = in.readString();
        result = Result.values()[in.readInt()];
    }

    /**
     * Required Android annoyance
     */
    public static final Parcelable.Creator<Purchase> CREATOR = new Creator<Purchase>() {
        public Purchase createFromParcel(Parcel in) {
            return new Purchase(in);
        }

        public Purchase[] newArray(int size) {
            return new Purchase[size];
        }
    };

    public String getCookie() {
        return cookie;
    }

    public String getTitle() {
        return title;
    }

    public String getSKU() {
        return sku;
    }

    public void setSKU(String sku) {
        this.sku = sku;
    }

    public String getSignature() {
        return signature;
    }

    public String getQuantity() {
        return quantity;
    }

    public void setQuantity(int qty) {
        this.quantity = "" + qty;
    }

    public String getReceipt() {
        return receipt;
    }

    public String getPlacementTag() {
        return placementTag;
    }

    public Result getResult() {
        return result;
    }

    public void setResult(Result result) {
        this.result = result;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        if (price == null)
            this.price = null;
        else
            this.price = price.replaceAll("[^0-9\\.]", "");
    }

    public void setPrice(Double price) {
        setPrice("" + price);
    }

    public void setStore(Store store) {
        setStore(store.toString());
    }

    public void setStore(String store) {
        this.store = store;
    }

    public String getStore() {
        return store;
    }

    public void setPayload(String payload) {
        this.payload = payload;
    }

    public String getPayload() {
        return payload;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public String getOrderId() {
        return orderId;
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }

    @Override
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this);
    }

    @Override
    public boolean equals(Object other) {
        return EqualsBuilder.reflectionEquals(this, other);
    }
}