/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
 */

//$Id$
package org.hibernate.test.annotations;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.persistence.Version;

/**
 * Flight
 *
 * @author Emmanuel Bernard
 */
@Entity()
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable {
	Long id;
	String name;
	transient Long duration;
	long durationInSec;
	Integer version;
	Company company;
	String triggeredData;
	long factor;
	Date departureDate;
	java.sql.Timestamp buyDate;
	Calendar alternativeDepartureDate;

	@Id
	public Long getId() {
		return id;
	}

	public void setId(Long long1) {
		id = long1;
	}

	@Column(name = "flight_name", nullable = false, updatable = false, length = 50)
	public String getName() {
		return name;
	}

	public void setName(String string) {
		name = string;
	}

	@Basic(fetch = FetchType.LAZY, optional = false)
	public Long getDuration() {
		return duration;
	}

	@Basic
	@Temporal(TemporalType.DATE)
	public Date getDepartureDate() {
		return departureDate;
	}

	public void setDepartureDate(Date departureDate) {
		this.departureDate = departureDate;
	}


	public void setDuration(Long l) {
		duration = l;
		//durationInSec = duration / 1000;
	}

	@Transient
	public long getDurationInSec() {
		return durationInSec;
	}

	public void setDurationInSec(long l) {
		durationInSec = l;
	}

	@Version
	@Column(name = "OPTLOCK")
	public Integer getVersion() {
		return version;
	}

	public void setVersion(Integer i) {
		version = i;
	}

	@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
	@JoinColumn(name = "COMP_ID")
	public Company getCompany() {
		return company;
	}

	public void setCompany(Company company) {
		this.company = company;
	}

	@Column(insertable = false, updatable = false)
	public String getTriggeredData() {
		return triggeredData;
	}

	public void setTriggeredData(String string) {
		triggeredData = string;
	}

	public void getIsNotAGetter() {
		//do nothing
	}

	public long getFactor(boolean x10) {
		//this is not a getter should not be persisted
		return factor * ( 1 + ( x10 == true ? 9 : 0 ) );
	}

	public void setFactor(long factor) {
		this.factor = factor;
	}

	@Temporal(TemporalType.TIMESTAMP)
	public Calendar getAlternativeDepartureDate() {
		return alternativeDepartureDate;
	}

	public void setAlternativeDepartureDate(Calendar alternativeDepartureDate) {
		this.alternativeDepartureDate = alternativeDepartureDate;
	}

	public java.sql.Timestamp getBuyDate() {
		return buyDate;
	}

	public void setBuyDate(java.sql.Timestamp buyDate) {
		this.buyDate = buyDate;
	}

}
