[jboss-cvs] jboss-seam/examples/booking/src/org/jboss/seam/example/booking ...

Gavin King gavin.king at jboss.com
Tue Jun 26 20:06:49 EDT 2007


  User: gavin   
  Date: 07/06/26 20:06:49

  Added:       examples/booking/src/org/jboss/seam/example/booking               
                        Authenticator.java AuthenticatorAction.java
                        Booking.java BookingList.java
                        BookingListAction.java ChangePassword.java
                        ChangePasswordAction.java Hotel.java
                        HotelBooking.java HotelBookingAction.java
                        HotelSearching.java HotelSearchingAction.java
                        Register.java RegisterAction.java User.java
  Log:
  argggh
  
  Revision  Changes    Path
  1.4       +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/Authenticator.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Authenticator.java
  ===================================================================
  RCS file: Authenticator.java
  diff -N Authenticator.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ Authenticator.java	27 Jun 2007 00:06:49 -0000	1.4
  @@ -0,0 +1,9 @@
  +package org.jboss.seam.example.booking;
  +
  +import javax.ejb.Local;
  +
  + at Local
  +public interface Authenticator
  +{
  +   boolean authenticate();
  +}
  
  
  
  1.5       +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/AuthenticatorAction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: AuthenticatorAction.java
  ===================================================================
  RCS file: AuthenticatorAction.java
  diff -N AuthenticatorAction.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ AuthenticatorAction.java	27 Jun 2007 00:06:49 -0000	1.5
  @@ -0,0 +1,40 @@
  +package org.jboss.seam.example.booking;
  +
  +import static org.jboss.seam.ScopeType.SESSION;
  +
  +import java.util.List;
  +
  +import javax.ejb.Stateless;
  +import javax.persistence.EntityManager;
  +import javax.persistence.PersistenceContext;
  +
  +import org.jboss.seam.annotations.Name;
  +import org.jboss.seam.annotations.Out;
  +
  + at Stateless
  + at Name("authenticator")
  +public class AuthenticatorAction implements Authenticator
  +{
  +   @PersistenceContext 
  +   private EntityManager em;
  +   
  +   @Out(required=false, scope = SESSION)
  +   private User user;
  +   
  +   public boolean authenticate()
  +   {
  +      List results = em.createQuery("select u from User u where u.username=#{identity.username} and u.password=#{identity.password}")
  +            .getResultList();
  +      
  +      if ( results.size()==0 )
  +      {
  +         return false;
  +      }
  +      else
  +      {
  +         user = (User) results.get(0);
  +         return true;
  +      }
  +   }
  +
  +}
  
  
  
  1.15      +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/Booking.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Booking.java
  ===================================================================
  RCS file: Booking.java
  diff -N Booking.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ Booking.java	27 Jun 2007 00:06:49 -0000	1.15
  @@ -0,0 +1,190 @@
  +//$Id: Booking.java,v 1.15 2007/06/27 00:06:49 gavin Exp $
  +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;
  +
  + at Entity
  + at 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
  +   public BigDecimal getTotal()
  +   {
  +      return hotel.getPrice().multiply( new BigDecimal( getNights() ) );
  +   }
  +
  +   @Transient
  +   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) 
  +   public Date getCheckinDate()
  +   {
  +      return checkinDate;
  +   }
  +   public void setCheckinDate(Date datetime)
  +   {
  +      this.checkinDate = datetime;
  +   }
  +
  +   @ManyToOne @NotNull
  +   public Hotel getHotel()
  +   {
  +      return hotel;
  +   }
  +   public void setHotel(Hotel hotel)
  +   {
  +      this.hotel = hotel;
  +   }
  +   
  +   @ManyToOne @NotNull
  +   public User getUser()
  +   {
  +      return user;
  +   }
  +   public void setUser(User user)
  +   {
  +      this.user = user;
  +   }
  +   
  +   @Basic @Temporal(TemporalType.DATE) 
  +   @NotNull
  +   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")
  +   public String getCreditCard()
  +   {
  +      return creditCard;
  +   }
  +
  +   public void setCreditCard(String creditCard)
  +   {
  +      this.creditCard = creditCard;
  +   }
  +   
  +   @Transient
  +   public String getDescription()
  +   {
  +      DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
  +      return hotel==null ? null : hotel.getName() + 
  +            ", " + df.format( getCheckinDate() ) + 
  +            " to " + df.format( getCheckoutDate() );
  +   }
  +
  +   public boolean isSmoking()
  +   {
  +      return smoking;
  +   }
  +
  +   public void setSmoking(boolean smoking)
  +   {
  +      this.smoking = smoking;
  +   }
  +   
  +   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, message="Credit card name is required")
  +   public String getCreditCardName()
  +   {
  +      return creditCardName;
  +   }
  +
  +   public void setCreditCardName(String creditCardName)
  +   {
  +      this.creditCardName = creditCardName;
  +   }
  +
  +   public int getCreditCardExpiryMonth()
  +   {
  +      return creditCardExpiryMonth;
  +   }
  +
  +   public void setCreditCardExpiryMonth(int creditCardExpiryMonth)
  +   {
  +      this.creditCardExpiryMonth = creditCardExpiryMonth;
  +   }
  +
  +   public int getCreditCardExpiryYear()
  +   {
  +      return creditCardExpiryYear;
  +   }
  +
  +   public void setCreditCardExpiryYear(int creditCardExpiryYear)
  +   {
  +      this.creditCardExpiryYear = creditCardExpiryYear;
  +   }
  +   
  +   @Override
  +   public String toString()
  +   {
  +      return "Booking(" + user + ","+ hotel + ")";
  +   }
  +
  +}
  
  
  
  1.7       +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/BookingList.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: BookingList.java
  ===================================================================
  RCS file: BookingList.java
  diff -N BookingList.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ BookingList.java	27 Jun 2007 00:06:49 -0000	1.7
  @@ -0,0 +1,13 @@
  +//$Id: BookingList.java,v 1.7 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import javax.ejb.Local;
  +
  + at Local
  +public interface BookingList
  +{
  +   public void getBookings();
  +   public Booking getBooking();
  +   public void cancel();
  +   public void destroy();
  +}
  \ No newline at end of file
  
  
  
  1.23      +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/BookingListAction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: BookingListAction.java
  ===================================================================
  RCS file: BookingListAction.java
  diff -N BookingListAction.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ BookingListAction.java	27 Jun 2007 00:06:49 -0000	1.23
  @@ -0,0 +1,76 @@
  +//$Id: BookingListAction.java,v 1.23 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +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.Scope;
  +import org.jboss.seam.annotations.datamodel.DataModel;
  +import org.jboss.seam.annotations.datamodel.DataModelSelection;
  +import org.jboss.seam.annotations.security.Restrict;
  +import org.jboss.seam.faces.FacesMessages;
  +import org.jboss.seam.log.Log;
  +
  + at Stateful
  + at Scope(SESSION)
  + at Name("bookingList")
  + at Restrict("#{identity.loggedIn}")
  + at TransactionAttribute(REQUIRES_NEW)
  +public class BookingListAction implements BookingList, Serializable
  +{
  +   private static final long serialVersionUID = 1L;
  +   
  +   @PersistenceContext
  +   private EntityManager em;
  +   
  +   @In
  +   private User user;
  +   
  +   @DataModel
  +   private List<Booking> bookings;
  +   @DataModelSelection 
  +   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();
  +      FacesMessages.instance().add("Booking cancelled for confirmation number #{bookingList.booking.id}");
  +   }
  +   
  +   public Booking getBooking()
  +   {
  +      return booking;
  +   }
  +   
  +   @Remove
  +   public void destroy() {}
  +}
  
  
  
  1.5       +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/ChangePassword.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ChangePassword.java
  ===================================================================
  RCS file: ChangePassword.java
  diff -N ChangePassword.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ ChangePassword.java	27 Jun 2007 00:06:49 -0000	1.5
  @@ -0,0 +1,16 @@
  +//$Id: ChangePassword.java,v 1.5 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import javax.ejb.Local;
  +
  + at Local
  +public interface ChangePassword
  +{
  +   public void changePassword();
  +   public boolean isChanged();
  +   
  +   public String getVerify();
  +   public void setVerify(String verify);
  +   
  +   public void destroy();
  +}
  \ No newline at end of file
  
  
  
  1.22      +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/ChangePasswordAction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ChangePasswordAction.java
  ===================================================================
  RCS file: ChangePasswordAction.java
  diff -N ChangePasswordAction.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ ChangePasswordAction.java	27 Jun 2007 00:06:49 -0000	1.22
  @@ -0,0 +1,73 @@
  +//$Id: ChangePasswordAction.java,v 1.22 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import static org.jboss.seam.ScopeType.EVENT;
  +
  +import javax.ejb.Remove;
  +import javax.ejb.Stateful;
  +import javax.persistence.EntityManager;
  +import javax.persistence.PersistenceContext;
  +
  +import org.jboss.seam.annotations.In;
  +import org.jboss.seam.annotations.Name;
  +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;
  +
  + at Stateful
  + at Scope(EVENT)
  + at Name("changePassword")
  + at Restrict("#{identity.loggedIn}")
  +public class ChangePasswordAction implements ChangePassword
  +{
  +   @In @Out
  +   private User user;
  +   
  +   @PersistenceContext
  +   private EntityManager em;
  +   
  +   private String verify;
  +   
  +   private boolean changed;
  +   
  +   @In
  +   private FacesMessages facesMessages;
  +   
  +   public void changePassword()
  +   {
  +      if ( user.getPassword().equals(verify) )
  +      {
  +         user = em.merge(user);
  +         facesMessages.add("Password updated");
  +         changed = true;
  +      }
  +      else 
  +      {
  +         facesMessages.addToControl("verify", "Re-enter new password");
  +         revertUser();
  +         verify=null;
  +      }
  +   }
  +   
  +   public boolean isChanged()
  +   {
  +      return changed;
  +   }
  +   
  +   private void revertUser()
  +   {
  +      user = em.find(User.class, user.getUsername());
  +   }
  +   public String getVerify()
  +   {
  +      return verify;
  +   }
  +   public void setVerify(String verify)
  +   {
  +      this.verify = verify;
  +   }
  +   
  +   @Remove
  +   public void destroy() {}
  +}
  
  
  
  1.13      +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/Hotel.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Hotel.java
  ===================================================================
  RCS file: Hotel.java
  diff -N Hotel.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ Hotel.java	27 Jun 2007 00:06:49 -0000	1.13
  @@ -0,0 +1,114 @@
  +//$Id: Hotel.java,v 1.13 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import java.io.Serializable;
  +import java.math.BigDecimal;
  +
  +import javax.persistence.Column;
  +import javax.persistence.Entity;
  +import javax.persistence.GeneratedValue;
  +import javax.persistence.Id;
  +
  +import org.hibernate.validator.Length;
  +import org.hibernate.validator.NotNull;
  +import org.jboss.seam.annotations.Name;
  +
  + at Entity
  + at Name("hotel")
  +public class Hotel implements Serializable
  +{
  +   private Long id;
  +   private String name;
  +   private String address;
  +   private String city;
  +   private String state;
  +   private String zip;
  +   private String country;
  +   private BigDecimal price;
  +   
  +   @Id @GeneratedValue
  +   public Long getId()
  +   {
  +      return id;
  +   }
  +   public void setId(Long id)
  +   {
  +      this.id = id;
  +   }
  +   
  +   @Length(max=50) @NotNull
  +   public String getName()
  +   {
  +      return name;
  +   }
  +   public void setName(String name)
  +   {
  +      this.name = name;
  +   }
  +   
  +   @Length(max=100) @NotNull
  +   public String getAddress()
  +   {
  +      return address;
  +   }
  +   public void setAddress(String address)
  +   {
  +      this.address = address;
  +   }
  +   
  +   @Length(max=40) @NotNull
  +   public String getCity()
  +   {
  +      return city;
  +   }
  +   public void setCity(String city)
  +   {
  +      this.city = city;
  +   }
  +   
  +   @Length(min=4, max=6) @NotNull
  +   public String getZip()
  +   {
  +      return zip;
  +   }
  +   public void setZip(String zip)
  +   {
  +      this.zip = zip;
  +   }
  +   
  +   @Length(min=2, max=10) @NotNull
  +   public String getState()
  +   {
  +      return state;
  +   }
  +   public void setState(String state)
  +   {
  +      this.state = state;
  +   }
  +   
  +   @Length(min=2, max=40) @NotNull
  +   public String getCountry()
  +   {
  +      return country;
  +   }
  +   public void setCountry(String country)
  +   {
  +      this.country = country;
  +   }
  +
  +   @Column(precision=6, scale=2)
  +   public BigDecimal getPrice()
  +   {
  +      return price;
  +   }
  +   public void setPrice(BigDecimal price)
  +   {
  +      this.price = price;
  +   }
  +   
  +   @Override
  +   public String toString()
  +   {
  +      return "Hotel(" + name + "," + address + "," + city + "," + zip + ")";
  +   }
  +}
  
  
  
  1.14      +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/HotelBooking.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: HotelBooking.java
  ===================================================================
  RCS file: HotelBooking.java
  diff -N HotelBooking.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ HotelBooking.java	27 Jun 2007 00:06:49 -0000	1.14
  @@ -0,0 +1,22 @@
  +//$Id: HotelBooking.java,v 1.14 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import javax.ejb.Local;
  +
  + at Local
  +public interface HotelBooking
  +{
  +   public void selectHotel(Hotel selectedHotel);
  +   
  +   public void bookHotel();
  +   
  +   public void setBookingDetails();
  +   public boolean isBookingValid();
  +   
  +   public void confirm();
  +   
  +   public void cancel();
  +   
  +   public void destroy();
  +   
  +}
  \ No newline at end of file
  
  
  
  1.53      +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/HotelBookingAction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: HotelBookingAction.java
  ===================================================================
  RCS file: HotelBookingAction.java
  diff -N HotelBookingAction.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ HotelBookingAction.java	27 Jun 2007 00:06:49 -0000	1.53
  @@ -0,0 +1,108 @@
  +//$Id: HotelBookingAction.java,v 1.53 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import static javax.persistence.PersistenceContextType.EXTENDED;
  +
  +import java.util.Calendar;
  +
  +import javax.ejb.Remove;
  +import javax.ejb.Stateful;
  +import javax.persistence.EntityManager;
  +import javax.persistence.PersistenceContext;
  +
  +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.annotations.security.Restrict;
  +import org.jboss.seam.core.Events;
  +import org.jboss.seam.faces.FacesMessages;
  +import org.jboss.seam.log.Log;
  +
  + at Stateful
  + at Name("hotelBooking")
  + at Restrict("#{identity.loggedIn}")
  +public class HotelBookingAction implements HotelBooking
  +{
  +   
  +   @PersistenceContext(type=EXTENDED)
  +   private EntityManager em;
  +   
  +   @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 = em.merge(selectedHotel);
  +   }
  +   
  +   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()
  +   {
  +      Calendar calendar = Calendar.getInstance();
  +      calendar.add(Calendar.DAY_OF_MONTH, -1);
  +      if ( booking.getCheckinDate().before( calendar.getTime() ) )
  +      {
  +         facesMessages.addToControl("checkinDate", "Check in date must be a future date");
  +         bookingValid=false;
  +      }
  +      else if ( !booking.getCheckinDate().before( booking.getCheckoutDate() ) )
  +      {
  +         facesMessages.addToControl("checkoutDate", "Check out date must be later than check in date");
  +         bookingValid=false;
  +      }
  +      else
  +      {
  +         bookingValid=true;
  +      }
  +   }
  +   
  +   public boolean isBookingValid()
  +   {
  +      return bookingValid;
  +   }
  +   
  +   @End
  +   public void confirm()
  +   {
  +      em.persist(booking);
  +      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.raiseTransactionSuccessEvent("bookingConfirmed");
  +   }
  +   
  +   @End
  +   public void cancel() {}
  +   
  +   @Remove
  +   public void destroy() {}
  +}
  \ No newline at end of file
  
  
  
  1.12      +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/HotelSearching.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: HotelSearching.java
  ===================================================================
  RCS file: HotelSearching.java
  diff -N HotelSearching.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ HotelSearching.java	27 Jun 2007 00:06:49 -0000	1.12
  @@ -0,0 +1,23 @@
  +//$Id: HotelSearching.java,v 1.12 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import javax.ejb.Local;
  +
  + at Local
  +public interface HotelSearching
  +{
  +   public int getPageSize();
  +   public void setPageSize(int pageSize);
  +   
  +   public String getSearchString();
  +   public void setSearchString(String searchString);
  +   
  +   public String getSearchPattern();
  +   
  +   public void find();
  +   public void nextPage();
  +   public boolean isNextPageAvailable();
  +
  +   public void destroy();
  +   
  +}
  \ No newline at end of file
  
  
  
  1.20      +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/HotelSearchingAction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: HotelSearchingAction.java
  ===================================================================
  RCS file: HotelSearchingAction.java
  diff -N HotelSearchingAction.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ HotelSearchingAction.java	27 Jun 2007 00:06:49 -0000	1.20
  @@ -0,0 +1,86 @@
  +//$Id: HotelSearchingAction.java,v 1.20 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import java.util.List;
  +
  +import javax.ejb.Remove;
  +import javax.ejb.Stateful;
  +import javax.persistence.EntityManager;
  +import javax.persistence.PersistenceContext;
  +
  +import org.jboss.seam.ScopeType;
  +import org.jboss.seam.annotations.Factory;
  +import org.jboss.seam.annotations.Name;
  +import org.jboss.seam.annotations.Scope;
  +import org.jboss.seam.annotations.datamodel.DataModel;
  +import org.jboss.seam.annotations.security.Restrict;
  +
  + at Stateful
  + at Name("hotelSearch")
  + at Scope(ScopeType.SESSION)
  + at Restrict("#{identity.loggedIn}")
  +public class HotelSearchingAction implements HotelSearching
  +{
  +   
  +   @PersistenceContext
  +   private EntityManager em;
  +   
  +   private String searchString;
  +   private int pageSize = 10;
  +   private int page;
  +   
  +   @DataModel
  +   private List<Hotel> hotels;
  +   
  +   public void find()
  +   {
  +      page = 0;
  +      queryHotels();
  +   }
  +   public void nextPage()
  +   {
  +      page++;
  +      queryHotels();
  +   }
  +      
  +   private void queryHotels()
  +   {
  +      hotels = em.createQuery("select h from Hotel h where lower(h.name) like #{pattern} or lower(h.city) like #{pattern} or lower(h.zip) like #{pattern} or lower(h.address) like #{pattern}")
  +            .setMaxResults(pageSize)
  +            .setFirstResult( page * pageSize )
  +            .getResultList();
  +   }
  +   
  +   public boolean isNextPageAvailable()
  +   {
  +      return hotels!=null && hotels.size()==pageSize;
  +   }
  +   
  +   public int getPageSize() {
  +      return pageSize;
  +   }
  +   
  +   public void setPageSize(int pageSize) {
  +      this.pageSize = pageSize;
  +   }
  +   
  +   @Factory(value="pattern", scope=ScopeType.EVENT)
  +   public String getSearchPattern()
  +   {
  +      return searchString==null ? 
  +            "%" : '%' + searchString.toLowerCase().replace('*', '%') + '%';
  +   }
  +   
  +   public String getSearchString()
  +   {
  +      return searchString;
  +   }
  +   
  +   public void setSearchString(String searchString)
  +   {
  +      this.searchString = searchString;
  +   }
  +   
  +   @Remove
  +   public void destroy() {}
  +}
  \ No newline at end of file
  
  
  
  1.5       +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/Register.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Register.java
  ===================================================================
  RCS file: Register.java
  diff -N Register.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ Register.java	27 Jun 2007 00:06:49 -0000	1.5
  @@ -0,0 +1,16 @@
  +//$Id: Register.java,v 1.5 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import javax.ejb.Local;
  +
  + at Local
  +public interface Register
  +{
  +   public void register();
  +   public void invalid();
  +   public String getVerify();
  +   public void setVerify(String verify);
  +   public boolean isRegistered();
  +   
  +   public void destroy();
  +}
  \ No newline at end of file
  
  
  
  1.23      +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/RegisterAction.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: RegisterAction.java
  ===================================================================
  RCS file: RegisterAction.java
  diff -N RegisterAction.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ RegisterAction.java	27 Jun 2007 00:06:49 -0000	1.23
  @@ -0,0 +1,80 @@
  +//$Id: RegisterAction.java,v 1.23 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import static org.jboss.seam.ScopeType.EVENT;
  +
  +import java.util.List;
  +
  +import javax.ejb.Remove;
  +import javax.ejb.Stateful;
  +import javax.persistence.EntityManager;
  +import javax.persistence.PersistenceContext;
  +
  +import org.jboss.seam.annotations.In;
  +import org.jboss.seam.annotations.Name;
  +import org.jboss.seam.annotations.Scope;
  +import org.jboss.seam.faces.FacesMessages;
  +
  + at Stateful
  + at Scope(EVENT)
  + at Name("register")
  +public class RegisterAction implements Register
  +{
  +   @In
  +   private User user;
  +   
  +   @PersistenceContext
  +   private EntityManager em;
  +   
  +   @In
  +   private FacesMessages facesMessages;
  +   
  +   private String verify;
  +   
  +   private boolean registered;
  +   
  +   public void register()
  +   {
  +      if ( user.getPassword().equals(verify) )
  +      {
  +         List existing = em.createQuery("select u.username from User u where u.username=#{user.username}")
  +            .getResultList();
  +         if (existing.size()==0)
  +         {
  +            em.persist(user);
  +            facesMessages.add("Successfully registered as #{user.username}");
  +            registered = true;
  +         }
  +         else
  +         {
  +            facesMessages.addToControl("username", "Username #{user.username} already exists");
  +         }
  +      }
  +      else 
  +      {
  +         facesMessages.addToControl("verify", "Re-enter your password");
  +         verify=null;
  +      }
  +   }
  +   
  +   public void invalid()
  +   {
  +      facesMessages.add("Please try again");
  +   }
  +   
  +   public boolean isRegistered()
  +   {
  +      return registered;
  +   }
  +   public String getVerify()
  +   {
  +      return verify;
  +   }
  +   public void setVerify(String verify)
  +   {
  +      this.verify = verify;
  +   }
  +   
  +   @Remove
  +   public void destroy() {}
  +}
  
  
  
  1.8       +0 -0      jboss-seam/examples/booking/src/org/jboss/seam/example/booking/User.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: User.java
  ===================================================================
  RCS file: User.java
  diff -N User.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ User.java	27 Jun 2007 00:06:49 -0000	1.8
  @@ -0,0 +1,76 @@
  +//$Id: User.java,v 1.8 2007/06/27 00:06:49 gavin Exp $
  +package org.jboss.seam.example.booking;
  +
  +import static org.jboss.seam.ScopeType.SESSION;
  +
  +import java.io.Serializable;
  +
  +import javax.persistence.Entity;
  +import javax.persistence.Id;
  +import javax.persistence.Table;
  +
  +import org.hibernate.validator.Length;
  +import org.hibernate.validator.NotNull;
  +import org.hibernate.validator.Pattern;
  +import org.jboss.seam.annotations.Name;
  +import org.jboss.seam.annotations.Scope;
  +
  + at Entity
  + at Name("user")
  + at Scope(SESSION)
  + at Table(name="Customer")
  +public class User implements Serializable
  +{
  +   private String username;
  +   private String password;
  +   private String name;
  +   
  +   public User(String name, String password, String username)
  +   {
  +      this.name = name;
  +      this.password = password;
  +      this.username = username;
  +   }
  +   
  +   public User() {}
  +
  +   @NotNull
  +   @Length(max=100)
  +   public String getName()
  +   {
  +      return name;
  +   }
  +   public void setName(String name)
  +   {
  +      this.name = name;
  +   }
  +   
  +   @NotNull
  +   @Length(min=5, max=15)
  +   public String getPassword()
  +   {
  +      return password;
  +   }
  +   public void setPassword(String password)
  +   {
  +      this.password = password;
  +   }
  +   
  +   @Id
  +   @Length(min=4, max=15)
  +   @Pattern(regex="^\\w*$", message="not a valid username")
  +   public String getUsername()
  +   {
  +      return username;
  +   }
  +   public void setUsername(String username)
  +   {
  +      this.username = username;
  +   }
  +   
  +   @Override
  +   public String toString() 
  +   {
  +      return "User(" + username + ")";
  +   }
  +}
  
  
  



More information about the jboss-cvs-commits mailing list