[jboss-cvs] jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking ...
Peter Muir
peter at bleepbleep.org.uk
Sun Nov 25 08:12:01 EST 2007
User: pmuir
Date: 07/11/25 08:12:01
Added: examples/nestedbooking/src/org/jboss/seam/example/booking
Hotel.java HotelBookingAction.java
HotelSearchingAction.java BookingList.java
RoomHome.java RoomPreference.java Booking.java
RoomPreferenceAction.java Register.java
RoomList.java AuthenticatorAction.java User.java
Room.java HotelBooking.java ChangePassword.java
HotelSearching.java ChangePasswordAction.java
RegisterAction.java BookingListAction.java
Authenticator.java
Log:
JBSEAM-2293 - nested conversations example - thanks to Jacob Orshalick
Revision Changes Path
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/Hotel.java
Index: Hotel.java
===================================================================
//$Id: Hotel.java,v 1.1 2007/11/25 13:12:01 pmuir Exp $
package org.jboss.seam.example.booking;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Transient;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
import org.jboss.seam.annotations.Name;
@Entity
@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 List<Room> rooms;
Hotel() {
this.rooms = new ArrayList<Room>();
}
@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;
}
@Transient
public BigDecimal getMinPrice()
{
return this.getStandardRoom().getPrice();
}
@Transient
public BigDecimal getMaxPrice()
{
BigDecimal maxPrice = this.getRooms().get(0).getPrice();
for(int i = 1; i < this.getRooms().size(); i++) {
Room room = this.getRooms().get(i);
if(maxPrice.compareTo(room.getPrice()) < 0) {
maxPrice = room.getPrice();
}
}
return maxPrice;
}
@OneToMany
@JoinColumn(name="HOTEL_ID")
public List<Room> getRooms() {
return rooms;
}
public void setRooms(List<Room> roomsSelections) {
this.rooms = roomsSelections;
}
@Transient
public List<Room> getAvailableRooms(Date checkinDate, Date checkoutDate) {
// checking could be performed here to determine which
// rooms are available for the provided dates. to simplify
// the example, just return the list of rooms
return rooms;
}
@Transient
public Room getStandardRoom() {
for(Room room : this.getRooms()) {
if(room.isIncluded()) {
return room;
}
}
return null;
}
@Override
public String toString()
{
return "Hotel(" + name + "," + address + "," + city + "," + zip + ")";
}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/HotelBookingAction.java
Index: HotelBookingAction.java
===================================================================
//$Id: HotelBookingAction.java,v 1.1 2007/11/25 13:12:01 pmuir 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.Destroy;
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.Conversation;
import org.jboss.seam.core.Events;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.log.Log;
@Stateful
@Name("hotelBooking")
@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(required=false)
private Room roomSelection;
@In
private FacesMessages facesMessages;
@In
private Events events;
@Logger
private Log log;
@Begin
public void selectHotel(Hotel selectedHotel)
{
hotel = em.merge(selectedHotel);
}
public String setBookingDates()
{
// the result will indicate whether or not to begin the nested conversation
// as well as the navigation. if a null result is returned, the nested
// conversation will not begin, and the user will be returned to the current
// page to fix validation issues
String result = null;
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
// validate what we have received from the user so far
if ( booking.getCheckinDate().before( calendar.getTime() ) )
{
facesMessages.addToControl("checkinDate", "Check in date must be a future date");
}
else if ( !booking.getCheckinDate().before( booking.getCheckoutDate() ) )
{
facesMessages.addToControl("checkoutDate", "Check out date must be later than check in date");
}
else
{
result = "rooms";
}
return result;
}
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 confirm()
{
// on confirmation we set the room preference in the booking. the room preference
// will be injected based on the nested conversation we are in.
booking.setRoomPreference(roomSelection);
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");
this.endRoot();
}
public void cancel() {
this.endRootBeforeRedirect();
}
@Destroy @Remove
public void destroy() {}
/**
* End the root conversation in case we are currently in a nested conversation.
* Currently this can only be done programatically, but if you are interested
* in this feature being supported by Seam vote on:
*
* http://jira.jboss.org/jira/browse/JBSEAM-1943
*/
private void endRoot() {
Conversation conversation = Conversation.instance();
if(conversation.isNested()) {
conversation.root();
}
conversation.end();
}
/**
* End the root conversation prior to redirect in case we are currently in a
* nested conversation. Currently this can only be done programatically, but
* if you are interested in this feature being supported by Seam vote on:
*
* http://jira.jboss.org/jira/browse/JBSEAM-1943
*/
private void endRootBeforeRedirect() {
Conversation conversation = Conversation.instance();
if(conversation.isNested()) {
conversation.root();
}
conversation.endBeforeRedirect();
}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/HotelSearchingAction.java
Index: HotelSearchingAction.java
===================================================================
//$Id: HotelSearchingAction.java,v 1.1 2007/11/25 13:12:01 pmuir 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.Destroy;
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;
@Stateful
@Name("hotelSearch")
@Scope(ScopeType.SESSION)
@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;
}
@Destroy @Remove
public void destroy() {}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/BookingList.java
Index: BookingList.java
===================================================================
//$Id: BookingList.java,v 1.1 2007/11/25 13:12:01 pmuir Exp $
package org.jboss.seam.example.booking;
import javax.ejb.Local;
@Local
public interface BookingList
{
public void getBookings();
public Booking getBooking();
public void cancel();
public void destroy();
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/RoomHome.java
Index: RoomHome.java
===================================================================
package org.jboss.seam.example.booking;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.web.RequestParameter;
import org.jboss.seam.framework.EntityHome;
import org.jboss.seam.example.booking.Room;
@Name("roomHome")
public class RoomHome extends EntityHome<Room>
{
@RequestParameter
Long roomId;
@Override
public Object getId()
{
if (roomId==null)
{
return super.getId();
}
else
{
return roomId;
}
}
@Override @Begin
public void create() {
super.create();
}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/RoomPreference.java
Index: RoomPreference.java
===================================================================
package org.jboss.seam.example.booking;
import java.math.BigDecimal;
import javax.ejb.Local;
@Local
public interface RoomPreference {
public void loadAvailableRooms();
public String selectPreference();
public BigDecimal getExpectedPrice();
public String requestConfirmation();
public String cancel();
public void destroy();
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/Booking.java
Index: Booking.java
===================================================================
//$Id: Booking.java,v 1.1 2007/11/25 13:12:01 pmuir 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;
@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 Room roomPreference;
public Booking() {}
public Booking(Hotel hotel, User user)
{
this.hotel = hotel;
this.user = user;
this.roomPreference = this.hotel.getStandardRoom();
}
@Transient
public BigDecimal getTotal()
{
return getTotal(roomPreference);
}
@Transient
public BigDecimal getTotal(Room room)
{
return room.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() );
}
@ManyToOne @NotNull
public Room getRoomPreference() {
return roomPreference;
}
public void setRoomPreference(Room roomPreference) {
this.roomPreference = roomPreference;
}
@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.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/RoomPreferenceAction.java
Index: RoomPreferenceAction.java
===================================================================
package org.jboss.seam.example.booking;
import java.math.BigDecimal;
import java.util.List;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Out;
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.log.Log;
@Stateful
@Name("roomPreference")
@Restrict("#{identity.loggedIn}")
public class RoomPreferenceAction implements RoomPreference {
@Logger private Log log;
@In(required=false)
@Out
private Hotel hotel;
@In(required=false)
@Out(required=false)
private Booking booking;
@DataModel(value="availableRooms")
private List<Room> availableRooms;
@DataModelSelection(value="availableRooms")
@In(required=false, value="roomSelection")
@Out(required=false, value="roomSelection")
private Room roomSelection;
@Factory("availableRooms")
public void loadAvailableRooms()
{
this.availableRooms =
this.hotel.getAvailableRooms(booking.getCheckinDate(), booking.getCheckoutDate());
log.info("Retrieved #0 available rooms", availableRooms.size());
}
public BigDecimal getExpectedPrice()
{
log.info("Retrieving price for room #0", roomSelection.getName());
return booking.getTotal(roomSelection);
}
@Begin(nested=true)
public String selectPreference()
{
// seam takes care of everything for us here. we don't have to do anything other
// than send the appropriate outcome to forward to the payment screen.
log.info("Room selected");
return "payment";
}
public String requestConfirmation()
{
// all validations are performed through the s:validateAll, so checks are already
// performed
log.info("Request confirmation from user");
return "confirm";
}
@End(beforeRedirect=true)
public String cancel()
{
log.info("ending conversation");
return "cancel";
}
@Destroy @Remove
public void destroy() {}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/Register.java
Index: Register.java
===================================================================
//$Id: Register.java,v 1.1 2007/11/25 13:12:01 pmuir Exp $
package org.jboss.seam.example.booking;
import javax.ejb.Local;
@Local
public interface Register
{
public void register();
public void invalid();
public String getVerify();
public void setVerify(String verify);
public boolean isRegistered();
public void destroy();
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/RoomList.java
Index: RoomList.java
===================================================================
package org.jboss.seam.example.booking;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.framework.EntityQuery;
@Name("roomList")
public class RoomList extends EntityQuery
{
@Override
public String getEjbql()
{
return "select room from Room room";
}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/AuthenticatorAction.java
Index: AuthenticatorAction.java
===================================================================
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;
@Stateless
@Name("authenticator")
public class AuthenticatorAction implements Authenticator
{
@PersistenceContext 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.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/User.java
Index: User.java
===================================================================
//$Id: User.java,v 1.1 2007/11/25 13:12:01 pmuir 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;
@Entity
@Name("user")
@Scope(SESSION)
@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=4, 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 + ")";
}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/Room.java
Index: Room.java
===================================================================
package org.jboss.seam.example.booking;
import java.io.Serializable;
import java.math.BigDecimal;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Transient;
import org.hibernate.validator.Length;
import org.jboss.seam.annotations.Name;
@Entity
@Name("room")
public class Room implements Serializable {
private Long id;
private String name;
private String description;
private boolean included;
private BigDecimal price;
@Id @GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Length(max=20)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isIncluded() {
return included;
}
public void setIncluded(boolean included) {
this.included = included;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
@Transient
public BigDecimal getPrice(int numNights) {
return price.multiply(new BigDecimal(numNights));
}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/HotelBooking.java
Index: HotelBooking.java
===================================================================
//$Id: HotelBooking.java,v 1.1 2007/11/25 13:12:01 pmuir Exp $
package org.jboss.seam.example.booking;
import javax.ejb.Local;
@Local
public interface HotelBooking
{
public void selectHotel(Hotel selectedHotel);
public void bookHotel();
public String setBookingDates();
public void confirm();
public void cancel();
public void destroy();
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/ChangePassword.java
Index: ChangePassword.java
===================================================================
//$Id: ChangePassword.java,v 1.1 2007/11/25 13:12:01 pmuir Exp $
package org.jboss.seam.example.booking;
import javax.ejb.Local;
@Local
public interface ChangePassword
{
public void changePassword();
public boolean isChanged();
public String getVerify();
public void setVerify(String verify);
public void destroy();
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/HotelSearching.java
Index: HotelSearching.java
===================================================================
//$Id: HotelSearching.java,v 1.1 2007/11/25 13:12:01 pmuir Exp $
package org.jboss.seam.example.booking;
import javax.ejb.Local;
@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();
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/ChangePasswordAction.java
Index: ChangePasswordAction.java
===================================================================
//$Id: ChangePasswordAction.java,v 1.1 2007/11/25 13:12:01 pmuir 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.Destroy;
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;
@Stateful
@Scope(EVENT)
@Name("changePassword")
@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;
}
@Destroy @Remove
public void destroy() {}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/RegisterAction.java
Index: RegisterAction.java
===================================================================
//$Id: RegisterAction.java,v 1.1 2007/11/25 13:12:01 pmuir 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.Destroy;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.faces.FacesMessages;
@Stateful
@Scope(EVENT)
@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;
}
@Destroy @Remove
public void destroy() {}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/BookingListAction.java
Index: BookingListAction.java
===================================================================
//$Id: BookingListAction.java,v 1.1 2007/11/25 13:12:01 pmuir 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.Destroy;
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;
@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;
@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;
}
@Destroy @Remove
public void destroy() {}
}
1.1 date: 2007/11/25 13:12:01; author: pmuir; state: Exp;jboss-seam/examples/nestedbooking/src/org/jboss/seam/example/booking/Authenticator.java
Index: Authenticator.java
===================================================================
package org.jboss.seam.example.booking;
import javax.ejb.Local;
@Local
public interface Authenticator
{
boolean authenticate();
}
More information about the jboss-cvs-commits
mailing list