//$Id: BookingListAction.java,v 1.23 2007/06/27 00:06:49 gavin Exp $ package org.jboss.seam.example.wicket.action; import static javax.ejb.TransactionAttributeType.REQUIRES_NEW; import static org.jboss.seam.ScopeType.SESSION; import java.io.Serializable; import java.util.List; import javax.ejb.Remove; import javax.ejb.Stateful; import javax.ejb.TransactionAttribute; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.jboss.seam.annotations.Factory; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Observer; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.security.Restrict; import org.jboss.seam.faces.FacesMessages; import org.jboss.seam.international.StatusMessages; import org.jboss.seam.log.Log; @Stateful @Scope(SESSION) @Name("bookingList") @Restrict("#{identity.loggedIn}") @TransactionAttribute(REQUIRES_NEW) public class BookingListAction implements BookingList, Serializable { private static final long serialVersionUID = 1L; @PersistenceContext private EntityManager em; @In private User user; @SuppressWarnings("unused") @Out private List<Booking> bookings; private Booking booking; @Logger private Log log; @Factory @Observer("bookingConfirmed") public void getBookings() { bookings = em.createQuery("select b from Booking b where b.user.username = :username order by b.checkinDate") .setParameter("username", user.getUsername()) .getResultList(); } public void cancel() { log.info("Cancel booking: #{bookingList.booking.id} for #{user.username}"); Booking cancelled = em.find(Booking.class, booking.getId()); if (cancelled!=null) em.remove( cancelled ); getBookings(); StatusMessages.instance().addToControl("body", "Booking cancelled for confirmation number #0", booking.getId()); } // TODO replace this with @Out in Wicket public void cancel(Booking booking) { this.booking = booking; cancel(); } public Booking getBooking() { return booking; } @Remove public void destroy() {} }