//$Id: Booking.java 5579 2007-06-27 00:06:49Z gavin $
package org.jboss.seam.example.booking;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Pattern;
import org.jboss.seam.annotations.Name;
import org.metawidget.inspector.annotation.*;
import org.metawidget.inspector.faces.*;
@Entity
@Name("booking")
public class Booking implements Serializable
{
private Long id;
private User user;
private Hotel hotel;
private Date checkinDate;
private Date checkoutDate;
private String creditCard;
private String creditCardName;
private int creditCardExpiryMonth;
private int creditCardExpiryYear;
private boolean smoking;
private int beds;
public Booking() {}
public Booking(Hotel hotel, User user)
{
this.hotel = hotel;
this.user = user;
}
@Transient
@UiHidden
@UiFacesNumberConverter(type="currency",currencySymbol="$")
@UiLabel("Total payment")
public BigDecimal getTotal()
{
return hotel.getPrice().multiply( new BigDecimal( getNights() ) );
}
@Transient
@UiHidden
public int getNights()
{
return (int) ( checkoutDate.getTime() - checkinDate.getTime() ) / 1000 / 60 / 60 / 24;
}
@Id @GeneratedValue
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
@NotNull
@Basic @Temporal(TemporalType.DATE)
@UiComesAfter( "total" )
@UiFacesDateTimeConverter( pattern = "MM/dd/yyyy" )
public Date getCheckinDate()
{
return checkinDate;
}
public void setCheckinDate(Date datetime)
{
this.checkinDate = datetime;
}
@ManyToOne @NotNull
@UiHidden
public Hotel getHotel()
{
return hotel;
}
public void setHotel(Hotel hotel)
{
this.hotel = hotel;
}
@ManyToOne @NotNull
@UiHidden
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
@Basic @Temporal(TemporalType.DATE)
@NotNull
@UiComesAfter( "checkinDate" )
@UiFacesDateTimeConverter( pattern = "MM/dd/yyyy" )
public Date getCheckoutDate()
{
return checkoutDate;
}
public void setCheckoutDate(Date checkoutDate)
{
this.checkoutDate = checkoutDate;
}
@NotNull(message="Credit card number is required")
@Length(min=16, max=16, message="Credit card number must 16 digits long")
@Pattern(regex="^\\d*$", message="Credit card number must be numeric")
@UiComesAfter( "smoking" )
@UiLabel( "Credit card #" )
public String getCreditCard()
{
return creditCard;
}
public void setCreditCard(String creditCard)
{
this.creditCard = creditCard;
}
@Transient
@UiHidden
public String getDescription()
{
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
return hotel==null ? null : hotel.getName() +
", " + df.format( getCheckinDate() ) +
" to " + df.format( getCheckoutDate() );
}
@UiLookup( value = { "true", "false" }, labels = { "Smoking", "Non Smoking" } )
@UiFacesComponent( "javax.faces.HtmlSelectOneRadio" )
@UiComesAfter( "beds" )
public boolean isSmoking()
{
return smoking;
}
public void setSmoking(boolean smoking)
{
this.smoking = smoking;
}
@UiLabel( "Room preference" )
@UiComesAfter( "checkoutDate" )
@UiLookup( value = { "1", "2", "3" }, labels = { "One king-size bed", "Two double beds", "Three beds" } )
public int getBeds()
{
return beds;
}
public void setBeds(int beds)
{
this.beds = beds;
}
@NotNull(message="Credit card name is required")
@Length(min=3, max=70)
@UiComesAfter( "creditCard" )
public String getCreditCardName()
{
return creditCardName;
}
public void setCreditCardName(String creditCardName)
{
this.creditCardName = creditCardName;
}
@UiLookup( value = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" }, labels = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" } )
@UiComesAfter( "creditCardName" )
@UiLabel( "Expiry month" )
public int getCreditCardExpiryMonth()
{
return creditCardExpiryMonth;
}
public void setCreditCardExpiryMonth(int creditCardExpiryMonth)
{
this.creditCardExpiryMonth = creditCardExpiryMonth;
}
@UiComesAfter( "creditCardExpiryMonth" )
@UiLookup( { "2005", "2006", "2007", "2008", "2009" } )
@UiLabel( "Expiry year" )
public int getCreditCardExpiryYear()
{
return creditCardExpiryYear;
}
public void setCreditCardExpiryYear(int creditCardExpiryYear)
{
this.creditCardExpiryYear = creditCardExpiryYear;
}
@Override
public String toString()
{
return "Booking(" + user + ","+ hotel + ")";
}
}