package org.jboss.seam.example.wicket; import java.util.Arrays; import java.util.List; import org.apache.wicket.PageParameters; import org.apache.wicket.extensions.yui.calendar.DateField; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.markup.html.form.RadioChoice; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel; import org.apache.wicket.model.PropertyModel; import org.jboss.seam.annotations.End; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.security.Restrict; import org.jboss.seam.example.wicket.action.Booking; import org.jboss.seam.example.wicket.action.HotelBooking; import org.jboss.seam.wicket.annotations.NoConversationPage; @Restrict("#{identity.loggedIn}") @NoConversationPage(Main.class) public class Book extends WebPage { private static final List<String> bedOptionsDisplayValues = Arrays.asList("One king-sized bed", "Two double beds", "Three beds"); private static final List<Integer> bedOptions = Arrays.asList(1, 2, 3); private static final List<String> monthOptions = Arrays.asList("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); private static final List<Integer> yearOptions = Arrays.asList(2008, 2009); @In private Booking booking; @In(create=true) private HotelBooking hotelBooking; public Book(final PageParameters parameters) { super(parameters); Template body = new Template("body"); add(body); body.add(new HotelViewPanel("hotelView", booking.getHotel())); body.add(new HotelBookingForm("booking")); } public class HotelBookingForm extends Form { public HotelBookingForm(String id) { super(id); add(new ComponentFeedbackPanel("messages", this)); add(new FormInputBorder("checkinDateBorder", "Check in date", new DateField("checkinDate").setRequired(true), new PropertyModel(booking, "checkinDate"), false)); add(new FormInputBorder("checkoutDateBorder", "Check out date", new DateField("checkoutDate").setRequired(true), new PropertyModel(booking, "checkoutDate"), false)); add(new FormInputBorder("bedsBorder", "Room Preference", new DropDownChoice("beds", bedOptions, new IChoiceRenderer() { public Object getDisplayValue(Object object) { return bedOptionsDisplayValues.get(((Integer) object - 1)); } public String getIdValue(Object object, int index) { return object.toString(); } } ).setRequired(true), new PropertyModel(booking, "beds"))); add(new FormInputBorder("smokingBorder", "Smoking Preference", new RadioChoice("smoking", Arrays.asList(new Boolean[] {true, false}), new IChoiceRenderer() { public Object getDisplayValue(Object object) { if (new Boolean(true).equals(object)) { return "Smoking"; } else { return "Non Smoking"; } } public String getIdValue(Object object, int index) { if (new Boolean(true).equals(object)) { return "true"; } else { return "false"; } } }), new PropertyModel(booking, "smoking"), false)); add(new FormInputBorder("creditCardBorder", "Credit Card #", new TextField("creditCard").setRequired(true), new PropertyModel(booking, "creditCard"))); add(new FormInputBorder("creditCardNameBorder", "Credit Card Name", new TextField("creditCardName").setRequired(true), new PropertyModel(booking, "creditCardName"))); add(new FormInputBorder("creditCardExpiryBorder", "Credit Card Expiry", new DropDownChoice("creditCardExpiryMonth", monthOptions).setRequired(true), new PropertyModel(booking, "creditCardExpiryMonth")).add(new DropDownChoice("creditCardExpiryYear", yearOptions).setRequired(true), new PropertyModel(booking, "creditCardExpiryYear"))); add(new Link("cancel") { @Override @End public void onClick() { setResponsePage(Main.class); } }); } @Override protected void onSubmit() { hotelBooking.setBookingDetails(); if (hotelBooking.isBookingValid()) { setResponsePage(new Confirm(new PageParameters())); } } } }