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

com.segment.analytics.Properties Maven / Gradle / Ivy

There is a newer version: 3.4.0
Show newest version
/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2014 Segment, Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.segment.analytics;

import java.util.List;
import java.util.Map;

/**
 * Properties are a dictionary of free-form information to attach to specific events.
 * 

* Just like traits, we also accept some properties with semantic meaning, and you should only ever * use these property names for that purpose. */ public class Properties extends ValueMap { // Common Properties private static final String REVENUE_KEY = "revenue"; private static final String CURRENCY_KEY = "currency"; private static final String VALUE_KEY = "value"; // Screen Properties private static final String PATH_KEY = "path"; private static final String REFERRER_KEY = "referrer"; private static final String TITLE_KEY = "title"; private static final String URL_KEY = "url"; // Ecommerce API private static final String NAME_KEY = "name"; // used by product too private static final String CATEGORY_KEY = "category"; private static final String SKU_KEY = "sku"; private static final String PRICE_KEY = "price"; private static final String ID_KEY = "id"; private static final String ORDER_ID_KEY = "orderId"; private static final String TOTAL_KEY = "total"; private static final String SUBTOTAL_KEY = "subtotal"; private static final String SHIPPING_KEY = "shipping"; private static final String TAX_KEY = "tax"; private static final String DISCOUNT_KEY = "discount"; private static final String COUPON_KEY = "coupon"; private static final String PRODUCTS_KEY = "products"; private static final String REPEAT_KEY = "repeat"; public Properties() { } public Properties(int initialCapacity) { super(initialCapacity); } // For deserialization Properties(Map delegate) { super(delegate); } @Override public Properties putValue(String key, Object value) { super.putValue(key, value); return this; } /** * Set the amount of revenue an event resulted in. This should be a decimal value in dollars, so * a shirt worth $19.99 would result in a revenue of 19.99. */ public Properties putRevenue(double revenue) { return putValue(REVENUE_KEY, revenue); } public double revenue() { return getDouble(REVENUE_KEY, 0); } /** * Set an abstract value to associate with an event. This is typically used in situations where * the event doesn’t generate real-dollar revenue, but has an intrinsic value to a marketing * team, like newsletter signups. */ public Properties putValue(double value) { return putValue(VALUE_KEY, value); } public double value() { double value = getDouble(VALUE_KEY, 0); if (value != 0) { return value; } return revenue(); } /** The currency for the value set in {@link #putRevenue(double)}. */ public Properties putCurrency(String currency) { return putValue(CURRENCY_KEY, currency); } public String currency() { return getString(CURRENCY_KEY); } /** * Set a path (usually the path of the URL) for the screen. * * @see Page Properties */ public Properties putPath(String path) { return putValue(PATH_KEY, path); } public String path() { return getString(PATH_KEY); } /** * Set the referrer that led the user to the screen. In the browser it is the document.referrer * property. * * @see Page Properties */ public Properties putReferrer(String referrer) { return putValue(REFERRER_KEY, referrer); } public String referrer() { return getString(REFERRER_KEY); } /** * Set the title of the screen. * * @see Page Properties */ public Properties putTitle(String title) { return putValue(TITLE_KEY, title); } public String title() { return getString(TITLE_KEY); } /** * Set a url for the screen. * * @see Page Properties */ public Properties putUrl(String url) { return putValue(URL_KEY, url); } public String url() { return getString(URL_KEY); } /** * Set the name of the product associated with an event. * * @see Ecommerce API */ public Properties putName(String name) { return putValue(NAME_KEY, name); } public String name() { return getString(NAME_KEY); } /** * Set a category for this action. You’ll want to track all of your product category pages so * you can quickly see which categories are most popular. * * @see Ecommerce API */ public Properties putCategory(String category) { return putValue(CATEGORY_KEY, category); } public String category() { return getString(CATEGORY_KEY); } /** * Set a sku for the product associated with an event. * * @see Ecommerce API */ public Properties putSku(String sku) { return putValue(SKU_KEY, sku); } public String sku() { return getString(SKU_KEY); } /** * Set a price (in dollars) for the product associated with an event. * * @see Ecommerce API */ public Properties putPrice(double price) { return putValue(PRICE_KEY, price); } public double price() { return getDouble(PRICE_KEY, 0); } /** * Set an ID for the product associated with an event. * * @see Ecommerce API */ public Properties putProductId(String id) { return putValue(ID_KEY, id); } public String productId() { return getString(ID_KEY); } /** * Set the order ID associated with an event. * * @see Ecommerce API */ public Properties putOrderId(String orderId) { return putValue(ORDER_ID_KEY, orderId); } public String orderId() { return getString(ORDER_ID_KEY); } /** * Set the total amount (in dollars) for an order associated with an event. * * @see Ecommerce API */ public Properties putTotal(double total) { return putValue(TOTAL_KEY, total); } public double total() { double total = getDouble(TOTAL_KEY, 0); if (total != 0) { return total; } double revenue = revenue(); if (revenue != 0) { return revenue; } return value(); } /** * Set the subtotal (in dollars) for an order associated with an event (excluding tax and * shipping). * * @see Ecommerce API */ public Properties putSubtotal(double subtotal) { return putValue(SUBTOTAL_KEY, subtotal); } public double putSubtotal() { return getDouble(SUBTOTAL_KEY, 0); } /** * Set the shipping amount (in dollars) for an order associated with an event. * * @see Ecommerce API */ public Properties putShipping(double shipping) { return putValue(SHIPPING_KEY, shipping); } double shipping() { return getDouble(SHIPPING_KEY, 0); } /** * Set the tax amount (in dollars) for an order associated with an event. * * @see Ecommerce API */ public Properties putTax(double tax) { return putValue(TAX_KEY, tax); } public double tax() { return getDouble(TAX_KEY, 0); } /** * Set the discount amount (in dollars) for an order associated with an event. * * @see Ecommerce API */ public Properties putDiscount(double discount) { return putValue(DISCOUNT_KEY, discount); } public double discount() { return getDouble(DISCOUNT_KEY, 0); } /** * Set a coupon name for an order associated with an event. * * @see Ecommerce API */ public Properties putCoupon(String coupon) { return putValue(COUPON_KEY, coupon); } /** * Set the individual products for an order associated with an event. * * @see Ecommerce API */ public Properties putProducts(Product... products) { return putValue(PRODUCTS_KEY, products); } public List products(Product... products) { return getList(PRODUCTS_KEY, Product.class); } /** * Set whether an order associated with an event is from a repeating customer. * * @see Ecommerce API */ public Properties putRepeatCustomer(boolean repeat) { return putValue(REPEAT_KEY, repeat); } public boolean isRepeatCustomer() { return getBoolean(REPEAT_KEY, false); } /** * A representation of an e-commerce product. *

* Use this only when you have multiple products, usually for the "Completed Order" event. If you * have only one product, {@link Properties} has methods on it directly to attach this * information. */ public static class Product extends ValueMap { private static final String ID_KEY = "id"; private static final String SKU_KEY = "sku"; private static final String NAME_KEY = "name"; private static final String PRICE_KEY = "price"; /** * Create an e-commerce product with the given id, sku and price (in dollars). All parameters * are required for our ecommerce API. * * @param id The product ID in your database * @param sku The product SKU * @param price The price of the product (in dollars) */ public Product(String id, String sku, double price) { put(ID_KEY, id); put(SKU_KEY, sku); put(PRICE_KEY, price); } // For deserialization private Product(Map map) { super(map); } /** Set an optional name for this product. */ public Product putName(String name) { return putValue(NAME_KEY, name); } public String name() { return getString(NAME_KEY); } public String id() { return getString(ID_KEY); } public String sku() { return getString(SKU_KEY); } public double price() { return getDouble(PRICE_KEY, 0); } @Override public Product putValue(String key, Object value) { super.putValue(key, value); return this; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy