/*
* Copyright (c) 2010, the Last.fm Java Project and Committers
* All rights reserved.
*
* Redistribution and use of this software in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
*
* - Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package de.umass.lastfm;
import de.umass.xml.DomElement;
/**
* A <code>BuyLink</code> contains information about places to buy an Album or Track. BuyLinks can point to physical
* and digital music stores. Some suppliers have icons, some do have price information, others don't (eBay for example).
* Common suppliers you will receive via the <code>getBuylinks()</code> methods are Amazon, Amazon MP3, iTunes and
* 7digital. All stores but eBay do supply icons at the time of writing.
*
* @author Janni Kovacs
* @see Album#getBuylinks(String, String, String, String)
* @see Track#getBuylinks(String, String, String, String)
*/
public class BuyLink {
public static enum StoreType {
PHYSICAl,
DIGITAL
}
private StoreType type;
private String name;
private String link;
private String icon;
private boolean search;
private String currency;
private double price;
private BuyLink(String name, StoreType type, String link) {
this.name = name;
this.type = type;
this.link = link;
}
public String getName() {
return name;
}
public String getLink() {
return link;
}
public StoreType getType() {
return type;
}
/**
* Returns a url to a 16x16 pixel icon for the store, or <code>null</code> if no icon url was supplied.
*
* @return Icon URL or <code>null</code>
*/
public String getIcon() {
return icon;
}
/**
* Returns <code>true</code> if this link points to a search page instead of an actual product page. Note that
* for search links there is no price information available.
*
* @return if this is a search link
*/
public boolean isSearch() {
return search;
}
/**
* Returns the currency of the price of the item. Check if this is <code>null</code> to double-check if there is
* price information available
*
* @return currency
*/
public String getCurrency() {
return currency;
}
/**
* Returns the price for the item, or 0.0 if no price information is available. Use {@link #getCurrency()} and
* {@link #isSearch()} to check if price information is available.
*
* @return price, if available
*/
public double getPrice() {
return price;
}
static BuyLink linkFromElement(StoreType type, DomElement element) {
BuyLink link = new BuyLink(element.getChildText("supplierName"), type, element.getChildText("buyLink"));
link.search = "1".equals(element.getChildText("isSearch"));
link.icon = element.getChildText("supplierIcon");
if (link.icon != null && link.icon.length() == 0)
link.icon = null;
if (element.hasChild("price")) {
DomElement child = element.getChild("price");
link.currency = child.getChildText("currency");
link.price = Double.parseDouble(child.getChildText("amount"));
}
return link;
}
}