//$Id: HotelBookingAction.java 8033 2008-04-28 09:40:19Z pete.muir@jboss.org $
package org.jboss.seam.example.spring;
import java.util.Calendar;
import javax.faces.application.FacesMessage;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.core.Events;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.log.Log;
@Name("hotelBooking")
public class HotelBookingAction {
@In("#{bookingService}")
private BookingService bookingService;
@In
private User user;
@In(required = false)
@Out
private Hotel hotel;
@In(required = false)
@Out(required = false)
private Booking booking;
@In
private FacesMessages facesMessages;
@In
private Events events;
@Logger
private Log log;
private boolean bookingValid;
@Begin
public void selectHotel(Hotel selectedHotel) {
hotel = bookingService.findHotelById(selectedHotel.getId());
}
public void bookHotel() {
booking = new Booking(hotel, user);
Calendar calendar = Calendar.getInstance();
booking.setCheckinDate(calendar.getTime());
calendar.add(Calendar.DAY_OF_MONTH, 1);
booking.setCheckoutDate(calendar.getTime());
}
public void setBookingDetails() {
bookingValid = true;
try {
bookingService.validateBooking(booking);
} catch (ValidationException e) {
facesMessages.add(FacesMessage.SEVERITY_ERROR, e.getMessage());
bookingValid = false;
}
}
public boolean isBookingValid() {
return bookingValid;
}
@End
public String confirm() {
try {
bookingService.bookHotel(booking);
} catch (ValidationException e) {
facesMessages.add(FacesMessage.SEVERITY_ERROR, e.getMessage());
return null;
}
BookingService.currentThread.set(true);
//Cannot call this.sendRegisterEmail because it won't hit the @Asynchronous intercepter
bookingService.sendRegisterEmail(booking.getUser().getUsername());
BookingService.currentThread.set(null);
facesMessages.add("Thank you, #{user.name}, your confimation number for #{hotel.name} is #{booking.id}");
log.info("New booking: #{booking.id} for #{user.username}");
events.raiseEvent("bookingConfirmed");
return "main";
}
@End
public void cancel() {
}
}