package com.amazonaws.a2s.model;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;


/**
 <p>Java class for anonymous complex type.
 
 <p>The following schema fragment specifies the expected content contained within this class.
 
 <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="AlternateVersions" type="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}AlternateVersions" minOccurs="0"/>
 *         &lt;element name="ASIN" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="ParentASIN" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="DetailPageURL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="SalesRank" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="SmallImage" type="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Image" minOccurs="0"/>
 *         &lt;element name="MediumImage" type="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Image" minOccurs="0"/>
 *         &lt;element name="LargeImage" type="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Image" minOccurs="0"/>
 *         &lt;element name="ImageSets" type="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}ImageSets" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}ItemAttributes" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}MerchantItemAttributes" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Collections" minOccurs="0"/>
 *         &lt;element name="Subjects" type="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Subjects" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}OfferSummary" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Offers" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}VariationSummary" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Variations" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}CustomerReviews" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}EditorialReviews" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}SimilarProducts" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Accessories" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Tracks" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}BrowseNodes" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}SearchInside" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}ListmaniaLists" minOccurs="0"/>
 *         &lt;element ref="{http://webservices.amazon.com/AWSECommerceService/2007-10-29}Tags" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 </pre>
 * Generated by AWS Code Generator
 <p/>
 * Thu Jan 10 05:27:59 PST 2008
 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "alternateVersions",
    "asin",
    "parentASIN",
    "detailPageURL",
    "salesRank",
    "smallImage",
    "mediumImage",
    "largeImage",
    "imageSets",
    "itemAttributes",
    "merchantItemAttributes",
    "collections",
    "subjects",
    "offerSummary",
    "offers",
    "variationSummary",
    "variations",
    "customerReviews",
    "editorialReviews",
    "similarProducts",
    "accessories",
    "tracks",
    "browseNodes",
    "searchInside",
    "listmaniaLists",
    "tags"
})
@XmlRootElement(name = "Item")
public class Item {

    @XmlElement(name = "AlternateVersions")
    protected AlternateVersions alternateVersions;
    @XmlElement(name = "ASIN", required = true)
    protected String asin;
    @XmlElement(name = "ParentASIN")
    protected String parentASIN;
    @XmlElement(name = "DetailPageURL")
    protected String detailPageURL;
    @XmlElement(name = "SalesRank")
    protected String salesRank;
    @XmlElement(name = "SmallImage")
    protected Image smallImage;
    @XmlElement(name = "MediumImage")
    protected Image mediumImage;
    @XmlElement(name = "LargeImage")
    protected Image largeImage;
    @XmlElement(name = "ImageSets")
    protected List<ImageSets> imageSets;
    @XmlElement(name = "ItemAttributes")
    protected ItemAttributes itemAttributes;
    @XmlElement(name = "MerchantItemAttributes")
    protected MerchantItemAttributes merchantItemAttributes;
    @XmlElement(name = "Collections")
    protected Collections collections;
    @XmlElement(name = "Subjects")
    protected Subjects subjects;
    @XmlElement(name = "OfferSummary")
    protected OfferSummary offerSummary;
    @XmlElement(name = "Offers")
    protected Offers offers;
    @XmlElement(name = "VariationSummary")
    protected VariationSummary variationSummary;
    @XmlElement(name = "Variations")
    protected Variations variations;
    @XmlElement(name = "CustomerReviews")
    protected CustomerReviews customerReviews;
    @XmlElement(name = "EditorialReviews")
    protected EditorialReviews editorialReviews;
    @XmlElement(name = "SimilarProducts")
    protected SimilarProducts similarProducts;
    @XmlElement(name = "Accessories")
    protected Accessories accessories;
    @XmlElement(name = "Tracks")
    protected Tracks tracks;
    @XmlElement(name = "BrowseNodes")
    protected BrowseNodes browseNodes;
    @XmlElement(name = "SearchInside")
    protected SearchInside searchInside;
    @XmlElement(name = "ListmaniaLists")
    protected ListmaniaLists listmaniaLists;
    @XmlElement(name = "Tags")
    protected Tags tags;

    /**
     * Gets the value of the alternateVersions property.
     
     @return
     *     possible object is
     *     {@link AlternateVersions }
     *     
     */
    public AlternateVersions getAlternateVersions() {
        return alternateVersions;
    }

    /**
     * Sets the value of the alternateVersions property.
     
     @param value
     *     allowed object is
     *     {@link AlternateVersions }
     *     
     */
    public void setAlternateVersions(AlternateVersions value) {
        this.alternateVersions = value;
    }

    public boolean isSetAlternateVersions() {
        return (this.alternateVersions!= null);
    }

    /**
     * Gets the value of the asin property.
     
     @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getASIN() {
        return asin;
    }

    /**
     * Sets the value of the asin property.
     
     @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setASIN(String value) {
        this.asin = value;
    }

    public boolean isSetASIN() {
        return (this.asin!= null);
    }

    /**
     * Gets the value of the parentASIN property.
     
     @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getParentASIN() {
        return parentASIN;
    }

    /**
     * Sets the value of the parentASIN property.
     
     @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setParentASIN(String value) {
        this.parentASIN = value;
    }

    public boolean isSetParentASIN() {
        return (this.parentASIN!= null);
    }

    /**
     * Gets the value of the detailPageURL property.
     
     @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getDetailPageURL() {
        return detailPageURL;
    }

    /**
     * Sets the value of the detailPageURL property.
     
     @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setDetailPageURL(String value) {
        this.detailPageURL = value;
    }

    public boolean isSetDetailPageURL() {
        return (this.detailPageURL!= null);
    }

    /**
     * Gets the value of the salesRank property.
     
     @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getSalesRank() {
        return salesRank;
    }

    /**
     * Sets the value of the salesRank property.
     
     @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setSalesRank(String value) {
        this.salesRank = value;
    }

    public boolean isSetSalesRank() {
        return (this.salesRank!= null);
    }

    /**
     * Gets the value of the smallImage property.
     
     @return
     *     possible object is
     *     {@link Image }
     *     
     */
    public Image getSmallImage() {
        return smallImage;
    }

    /**
     * Sets the value of the smallImage property.
     
     @param value
     *     allowed object is
     *     {@link Image }
     *     
     */
    public void setSmallImage(Image value) {
        this.smallImage = value;
    }

    public boolean isSetSmallImage() {
        return (this.smallImage!= null);
    }

    /**
     * Gets the value of the mediumImage property.
     
     @return
     *     possible object is
     *     {@link Image }
     *     
     */
    public Image getMediumImage() {
        return mediumImage;
    }

    /**
     * Sets the value of the mediumImage property.
     
     @param value
     *     allowed object is
     *     {@link Image }
     *     
     */
    public void setMediumImage(Image value) {
        this.mediumImage = value;
    }

    public boolean isSetMediumImage() {
        return (this.mediumImage!= null);
    }

    /**
     * Gets the value of the largeImage property.
     
     @return
     *     possible object is
     *     {@link Image }
     *     
     */
    public Image getLargeImage() {
        return largeImage;
    }

    /**
     * Sets the value of the largeImage property.
     
     @param value
     *     allowed object is
     *     {@link Image }
     *     
     */
    public void setLargeImage(Image value) {
        this.largeImage = value;
    }

    public boolean isSetLargeImage() {
        return (this.largeImage!= null);
    }

    /**
     * Gets the value of the imageSets property.
     
     <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the imageSets property.
     
     <p>
     * For example, to add a new item, do as follows:
     <pre>
     *    getImageSets().add(newItem);
     </pre>
     
     
     <p>
     * Objects of the following type(s) are allowed in the list
     {@link ImageSets }
     
     
     */
    public List<ImageSets> getImageSets() {
        if (imageSets == null) {
            imageSets = new ArrayList<ImageSets>();
        }
        return this.imageSets;
    }

    public boolean isSetImageSets() {
        return ((this.imageSets!= null)&&(!this.imageSets.isEmpty()));
    }

    public void unsetImageSets() {
        this.imageSets = null;
    }

    /**
     * Gets the value of the itemAttributes property.
     
     @return
     *     possible object is
     *     {@link ItemAttributes }
     *     
     */
    public ItemAttributes getItemAttributes() {
        return itemAttributes;
    }

    /**
     * Sets the value of the itemAttributes property.
     
     @param value
     *     allowed object is
     *     {@link ItemAttributes }
     *     
     */
    public void setItemAttributes(ItemAttributes value) {
        this.itemAttributes = value;
    }

    public boolean isSetItemAttributes() {
        return (this.itemAttributes!= null);
    }

    /**
     * Gets the value of the merchantItemAttributes property.
     
     @return
     *     possible object is
     *     {@link MerchantItemAttributes }
     *     
     */
    public MerchantItemAttributes getMerchantItemAttributes() {
        return merchantItemAttributes;
    }

    /**
     * Sets the value of the merchantItemAttributes property.
     
     @param value
     *     allowed object is
     *     {@link MerchantItemAttributes }
     *     
     */
    public void setMerchantItemAttributes(MerchantItemAttributes value) {
        this.merchantItemAttributes = value;
    }

    public boolean isSetMerchantItemAttributes() {
        return (this.merchantItemAttributes!= null);
    }

    /**
     * Gets the value of the collections property.
     
     @return
     *     possible object is
     *     {@link Collections }
     *     
     */
    public Collections getCollections() {
        return collections;
    }

    /**
     * Sets the value of the collections property.
     
     @param value
     *     allowed object is
     *     {@link Collections }
     *     
     */
    public void setCollections(Collections value) {
        this.collections = value;
    }

    public boolean isSetCollections() {
        return (this.collections!= null);
    }

    /**
     * Gets the value of the subjects property.
     
     @return
     *     possible object is
     *     {@link Subjects }
     *     
     */
    public Subjects getSubjects() {
        return subjects;
    }

    /**
     * Sets the value of the subjects property.
     
     @param value
     *     allowed object is
     *     {@link Subjects }
     *     
     */
    public void setSubjects(Subjects value) {
        this.subjects = value;
    }

    public boolean isSetSubjects() {
        return (this.subjects!= null);
    }

    /**
     * Gets the value of the offerSummary property.
     
     @return
     *     possible object is
     *     {@link OfferSummary }
     *     
     */
    public OfferSummary getOfferSummary() {
        return offerSummary;
    }

    /**
     * Sets the value of the offerSummary property.
     
     @param value
     *     allowed object is
     *     {@link OfferSummary }
     *     
     */
    public void setOfferSummary(OfferSummary value) {
        this.offerSummary = value;
    }

    public boolean isSetOfferSummary() {
        return (this.offerSummary!= null);
    }

    /**
     * Gets the value of the offers property.
     
     @return
     *     possible object is
     *     {@link Offers }
     *     
     */
    public Offers getOffers() {
        return offers;
    }

    /**
     * Sets the value of the offers property.
     
     @param value
     *     allowed object is
     *     {@link Offers }
     *     
     */
    public void setOffers(Offers value) {
        this.offers = value;
    }

    public boolean isSetOffers() {
        return (this.offers!= null);
    }

    /**
     * Gets the value of the variationSummary property.
     
     @return
     *     possible object is
     *     {@link VariationSummary }
     *     
     */
    public VariationSummary getVariationSummary() {
        return variationSummary;
    }

    /**
     * Sets the value of the variationSummary property.
     
     @param value
     *     allowed object is
     *     {@link VariationSummary }
     *     
     */
    public void setVariationSummary(VariationSummary value) {
        this.variationSummary = value;
    }

    public boolean isSetVariationSummary() {
        return (this.variationSummary!= null);
    }

    /**
     * Gets the value of the variations property.
     
     @return
     *     possible object is
     *     {@link Variations }
     *     
     */
    public Variations getVariations() {
        return variations;
    }

    /**
     * Sets the value of the variations property.
     
     @param value
     *     allowed object is
     *     {@link Variations }
     *     
     */
    public void setVariations(Variations value) {
        this.variations = value;
    }

    public boolean isSetVariations() {
        return (this.variations!= null);
    }

    /**
     * Gets the value of the customerReviews property.
     
     @return
     *     possible object is
     *     {@link CustomerReviews }
     *     
     */
    public CustomerReviews getCustomerReviews() {
        return customerReviews;
    }

    /**
     * Sets the value of the customerReviews property.
     
     @param value
     *     allowed object is
     *     {@link CustomerReviews }
     *     
     */
    public void setCustomerReviews(CustomerReviews value) {
        this.customerReviews = value;
    }

    public boolean isSetCustomerReviews() {
        return (this.customerReviews!= null);
    }

    /**
     * Gets the value of the editorialReviews property.
     
     @return
     *     possible object is
     *     {@link EditorialReviews }
     *     
     */
    public EditorialReviews getEditorialReviews() {
        return editorialReviews;
    }

    /**
     * Sets the value of the editorialReviews property.
     
     @param value
     *     allowed object is
     *     {@link EditorialReviews }
     *     
     */
    public void setEditorialReviews(EditorialReviews value) {
        this.editorialReviews = value;
    }

    public boolean isSetEditorialReviews() {
        return (this.editorialReviews!= null);
    }

    /**
     * Gets the value of the similarProducts property.
     
     @return
     *     possible object is
     *     {@link SimilarProducts }
     *     
     */
    public SimilarProducts getSimilarProducts() {
        return similarProducts;
    }

    /**
     * Sets the value of the similarProducts property.
     
     @param value
     *     allowed object is
     *     {@link SimilarProducts }
     *     
     */
    public void setSimilarProducts(SimilarProducts value) {
        this.similarProducts = value;
    }

    public boolean isSetSimilarProducts() {
        return (this.similarProducts!= null);
    }

    /**
     * Gets the value of the accessories property.
     
     @return
     *     possible object is
     *     {@link Accessories }
     *     
     */
    public Accessories getAccessories() {
        return accessories;
    }

    /**
     * Sets the value of the accessories property.
     
     @param value
     *     allowed object is
     *     {@link Accessories }
     *     
     */
    public void setAccessories(Accessories value) {
        this.accessories = value;
    }

    public boolean isSetAccessories() {
        return (this.accessories!= null);
    }

    /**
     * Gets the value of the tracks property.
     
     @return
     *     possible object is
     *     {@link Tracks }
     *     
     */
    public Tracks getTracks() {
        return tracks;
    }

    /**
     * Sets the value of the tracks property.
     
     @param value
     *     allowed object is
     *     {@link Tracks }
     *     
     */
    public void setTracks(Tracks value) {
        this.tracks = value;
    }

    public boolean isSetTracks() {
        return (this.tracks!= null);
    }

    /**
     * Gets the value of the browseNodes property.
     
     @return
     *     possible object is
     *     {@link BrowseNodes }
     *     
     */
    public BrowseNodes getBrowseNodes() {
        return browseNodes;
    }

    /**
     * Sets the value of the browseNodes property.
     
     @param value
     *     allowed object is
     *     {@link BrowseNodes }
     *     
     */
    public void setBrowseNodes(BrowseNodes value) {
        this.browseNodes = value;
    }

    public boolean isSetBrowseNodes() {
        return (this.browseNodes!= null);
    }

    /**
     * Gets the value of the searchInside property.
     
     @return
     *     possible object is
     *     {@link SearchInside }
     *     
     */
    public SearchInside getSearchInside() {
        return searchInside;
    }

    /**
     * Sets the value of the searchInside property.
     
     @param value
     *     allowed object is
     *     {@link SearchInside }
     *     
     */
    public void setSearchInside(SearchInside value) {
        this.searchInside = value;
    }

    public boolean isSetSearchInside() {
        return (this.searchInside!= null);
    }

    /**
     * Gets the value of the listmaniaLists property.
     
     @return
     *     possible object is
     *     {@link ListmaniaLists }
     *     
     */
    public ListmaniaLists getListmaniaLists() {
        return listmaniaLists;
    }

    /**
     * Sets the value of the listmaniaLists property.
     
     @param value
     *     allowed object is
     *     {@link ListmaniaLists }
     *     
     */
    public void setListmaniaLists(ListmaniaLists value) {
        this.listmaniaLists = value;
    }

    public boolean isSetListmaniaLists() {
        return (this.listmaniaLists!= null