/******************************************************************
  NOTE: Source files best viewed with a tabstop of 4.
 
 Copyright 2000-2006 by BEA Systems Inc.
 
 THE SOURCE CODE HEREIN (THE "CODE") IS SUBJECT TO THE TERMS AND
 CONDITIONS OF THE LICENSE AGREEMENT ACCOMPANYING THE BEA SYSTEMS INC.
 KODO SOFTWARE (THE "LICENSE AGREEMENT"). WITHOUT SUPERSEDING OR
 LIMITING THE APPLICATION OF THE LICENSE AGREEMENT, THE CODE IS
 SUPPLIED "AS IS" WITHOUT WARRANTY OF ANY KIND, AND YOU ACKNOWLEDGE
 THAT (EXCEPT AS OTHERWISE PROHIBITED BY LAW) BEA SYSTEMS INC. SHALL
 HAVE NO LIABILITY WHATSOEVER IN RELATION TO ANY USE OF THE CODE.
 
 LICENSEE MAY NOT REDISTRIBUTE, TRANSFER, SUBLICENSE OR SELL THE CODE OR
 EXPLOIT THE CODE IN ANY OTHER MANNER THAN AS EXPRESSLY ALLOWED IN THE
 LICENSE AGREEMENT. THIS LICENSE DOES NOT ENTITLE LICENSEE TO RECEIVE
 FROM BEA SYSTEMS INC. DOCUMENTATION, TECHNICAL SUPPORT, TELEPHONE
 ASSISTANCE, OR ENHANCEMENTS OR UPDATES TO THE CODE.
 ******************************************************************/
 

package tutorial.persistence;


import java.util.*;
import javax.persistence.*;


/**
 *	Animal class for use in the pet store tutorial.
 */	
@Entity(name="Animal")
@Table(name="JPA_TUT_ANIMAL")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="SPECIES", length=100)
public abstract class Animal
{
	@Id
	@GeneratedValue
	@Column(name="ID")
	private long id;

	@Basic @Column(name="ANIMAL_NAME")
	private String name;

	@Basic @Column(name="COST")
	private float price;
	

	/**
	 *	Constructor.
	 *
	 *	@param 	name		This animal's name.
	 *	@param 	price		The price of the animal, in dollars.
	 */
	public Animal (String name, float price)
	{
		this.name = name;
		this.price = price;
	}

	
	/**
	 *	Return the animal's name.
	 */
	public String getName ()
	{
		return name;
	}


	/**
	 * 	Return the price of the animal in dollars.
	 */
	public float getPrice ()
	{
		return price;
	}


	/** 
	 *  The unique ID of this animal.
	 */
	public void setId (long id)
	{
		this.id = id;
	}


	/** 
	 *  The unique ID of this animal.
	 */
	public long getId ()
	{
		return this.id;
	}


	/**
	 * 	Return a useful informational string describing this animal.
	 */
	public String toString ()
	{
		return toString (false);
	}


	/**
	 *	Return an informational string describing this animal; if 
	 *	<code>detailed</code> is <code>true</code>, return
	 *	a more verbose description of the animal.
	 *
	 *	@param 	detailed	a boolean that controls the verbosity
	 *						of the returned string
	 */
	public abstract String toString (boolean detailed);

}
