From fc018d3e72a49d7cae8d2dbbd9108ccb4bd2b01e Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Thu, 26 Jun 2008 20:35:48 +0000 Subject: [PATCH] PAR version of springtravel --- ...m.springsource.platform.ide.jdt.core.prefs | 14 ++ .../.settings/org.eclipse.jdt.core.prefs | 7 + ...clipse.jst.common.project.facet.core.prefs | 3 + ....eclipse.wst.common.project.facet.core.xml | 6 + .../samples/springtravel/hotel/Booking.java | 204 ++++++++++++++++++ .../springtravel/hotel/BookingAgent.java | 57 +++++ .../samples/springtravel/hotel/Hotel.java | 107 +++++++++ .../hotel/HotelFlowHandlerAdapter.java | 24 +++ .../springtravel/hotel/JpaBookingAgent.java | 96 +++++++++ .../springtravel/hotel/ReferenceData.java | 83 +++++++ .../springtravel/hotel/SearchCriteria.java | 70 ++++++ .../samples/springtravel/hotel/User.java | 62 ++++++ .../springtravel/hotel/booking/booking.xml | 33 +++ .../hotel/booking/enterBookingDetails.xhtml | 136 ++++++++++++ .../hotel/booking/messages.properties | 2 + .../hotel/booking/reviewBooking.xhtml | 76 +++++++ .../hotel/search/enterSearchCriteria.xhtml | 91 ++++++++ .../hotel/search/reviewHotel.xhtml | 56 +++++ .../hotel/search/reviewHotels.xhtml | 51 +++++ .../springtravel/hotel/search/search.xml | 61 ++++++ .../src/main/resources/META-INF/MANIFEST.MF | 22 ++ .../main/resources/META-INF/persistence.xml | 18 ++ .../META-INF/spring/module-context.xml | 88 ++++++++ .../META-INF/spring/osgi-context.xml | 20 ++ .../src/main/resources/import.sql | 27 +++ .../src/main/resources/log4j.xml | 52 +++++ .../.settings/org.eclipse.jdt.core.prefs | 7 + ...clipse.jst.common.project.facet.core.prefs | 3 + ....eclipse.wst.common.project.facet.core.xml | 6 + .../src/main/resources/META-INF/MANIFEST.MF | 12 ++ .../META-INF/spring/module-context.xml | 18 ++ .../META-INF/spring/osgi-context.xml | 13 ++ .../.settings/org.eclipse.jdt.core.prefs | 7 + ....eclipse.wst.common.project.facet.core.xml | 5 + .../src/main/webapp/META-INF/MANIFEST.MF | 31 +++ .../webapp/META-INF/spring/module-context.xml | 24 +++ .../webapp/META-INF/spring/osgi-context.xml | 18 ++ .../META-INF/spring/security-context.xml | 36 ++++ .../src/main/webapp/WEB-INF/faces-config.xml | 11 + .../src/main/webapp/WEB-INF/intro.xhtml | 38 ++++ .../webapp/WEB-INF/layouts/standard.xhtml | 61 ++++++ .../src/main/webapp/WEB-INF/login.xhtml | 60 ++++++ .../main/webapp/WEB-INF/logoutSuccess.xhtml | 17 ++ .../src/main/webapp/images/bg.gif | Bin 0 -> 172 bytes .../src/main/webapp/images/btn.bg.gif | Bin 0 -> 325 bytes .../src/main/webapp/images/diplomat.jpg | Bin 0 -> 17957 bytes .../src/main/webapp/images/header.jpg | Bin 0 -> 22798 bytes .../src/main/webapp/images/input.bg.gif | Bin 0 -> 122 bytes .../main/webapp/images/powered-by-spring.png | Bin 0 -> 6591 bytes .../src/main/webapp/images/th.bg.gif | Bin 0 -> 1074 bytes .../src/main/webapp/images/tse.gif | Bin 0 -> 2814 bytes .../src/main/webapp/index.html | 5 + .../src/main/webapp/styles/booking.css | 154 +++++++++++++ ....eclipse.wst.common.project.facet.core.xml | 5 + .../org.eclipse.wst.validation.prefs | 54 +++++ ...org.springframework.ide.eclipse.core.prefs | 49 +++++ .../META-INF/MANIFEST.MF | 4 + 57 files changed, 2104 insertions(+) create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/com.springsource.platform.ide.jdt.core.prefs create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.jdt.core.prefs create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.jst.common.project.facet.core.prefs create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/Booking.java create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/BookingAgent.java create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/Hotel.java create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/HotelFlowHandlerAdapter.java create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/JpaBookingAgent.java create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/ReferenceData.java create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/SearchCriteria.java create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/User.java create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/booking.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/enterBookingDetails.xhtml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/messages.properties create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/reviewBooking.xhtml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/enterSearchCriteria.xhtml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/reviewHotel.xhtml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/reviewHotels.xhtml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/search.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/MANIFEST.MF create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/persistence.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/spring/module-context.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/spring/osgi-context.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/import.sql create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/log4j.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.jdt.core.prefs create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.jst.common.project.facet.core.prefs create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/MANIFEST.MF create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/spring/module-context.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/spring/osgi-context.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/.settings/org.eclipse.jdt.core.prefs create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/.settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/module-context.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/osgi-context.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/security-context.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/faces-config.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/intro.xhtml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/layouts/standard.xhtml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/login.xhtml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/logoutSuccess.xhtml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/bg.gif create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/btn.bg.gif create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/diplomat.jpg create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/header.jpg create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/input.bg.gif create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/powered-by-spring.png create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/th.bg.gif create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/tse.gif create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/index.html create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/styles/booking.css create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.eclipse.wst.validation.prefs create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.springframework.ide.eclipse.core.prefs create mode 100644 spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/META-INF/MANIFEST.MF diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/com.springsource.platform.ide.jdt.core.prefs b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/com.springsource.platform.ide.jdt.core.prefs new file mode 100644 index 00000000..796543a7 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/com.springsource.platform.ide.jdt.core.prefs @@ -0,0 +1,14 @@ +#Thu Jun 26 15:49:03 EDT 2008 +com.springsource.platform.ide.jdt.core.source.attachment-com.springsource.javax.persistence-1.0.0.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/ext/com.springsource.javax.persistence-sources-1.0.0.jar +com.springsource.platform.ide.jdt.core.source.attachment-com.springsource.javax.servlet-2.5.0.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/ext/com.springsource.javax.servlet-sources-2.5.0.jar +com.springsource.platform.ide.jdt.core.source.attachment-com.springsource.org.apache.myfaces.javax.faces-1.2.2.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/com.springsource.org.apache.myfaces.javax.faces-sources-1.2.2.jar +com.springsource.platform.ide.jdt.core.source.attachment-com.springsource.org.hibernate-3.2.6.ga.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/com.springsource.org.hibernate-sources-3.2.6.ga.jar +com.springsource.platform.ide.jdt.core.source.attachment-com.springsource.org.hibernate.annotations-3.3.0.ga.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/com.springsource.org.hibernate.annotations-sources-3.3.0.ga.jar +com.springsource.platform.ide.jdt.core.source.attachment-com.springsource.org.hibernate.annotations.common-3.3.0.ga.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/com.springsource.org.hibernate.annotations.common-sources-3.3.0.ga.jar +com.springsource.platform.ide.jdt.core.source.attachment-com.springsource.org.hibernate.ejb-3.3.1.ga.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/com.springsource.org.hibernate.ejb-sources-3.3.1.ga.jar +com.springsource.platform.ide.jdt.core.source.attachment-com.springsource.org.hsqldb-1.8.0.9.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/com.springsource.org.hsqldb-sources-1.8.0.9.jar +com.springsource.platform.ide.jdt.core.source.attachment-org.springframework.faces-2.0.3.BUILD-20080626134159.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/org.springframework.faces-sources-2.0.3.BUILD-20080626134159.jar +com.springsource.platform.ide.jdt.core.source.attachment-org.springframework.faces-2.0.3.BUILD-20080626184449.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/org.springframework.faces-sources-2.0.3.BUILD-20080626184449.jar +com.springsource.platform.ide.jdt.core.source.attachment-org.springframework.faces-2.0.3.BUILD-20080626190601.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/org.springframework.faces-sources-2.0.3.BUILD-20080626190601.jar +com.springsource.platform.ide.jdt.core.source.attachment-org.springframework.security-2.0.0.A.jar=/Users/scott/development/springsource-ap-1.0.0.beta6/repository/bundles/usr/org.springframework.security-sources-2.0.0.A.jar +eclipse.preferences.version=1 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.jdt.core.prefs b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..cdc8c2a3 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +#Wed Apr 30 14:04:29 BST 2008 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.jst.common.project.facet.core.prefs b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.jst.common.project.facet.core.prefs new file mode 100644 index 00000000..13fc2d20 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.jst.common.project.facet.core.prefs @@ -0,0 +1,3 @@ +#Wed May 07 10:35:56 BST 2008 +classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER/owners=jst.java\:5.0 +eclipse.preferences.version=1 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 00000000..c525c05d --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/Booking.java b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/Booking.java new file mode 100644 index 00000000..33b20ff3 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/Booking.java @@ -0,0 +1,204 @@ +package org.springframework.samples.springtravel.hotel; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.util.Calendar; +import java.util.Date; + +import javax.persistence.Basic; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; + +import org.springframework.binding.message.MessageBuilder; +import org.springframework.binding.message.MessageContext; + +/** + * A Hotel Booking made by a User. + */ +@Entity +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() { + Calendar calendar = Calendar.getInstance(); + setCheckinDate(calendar.getTime()); + calendar.add(Calendar.DAY_OF_MONTH, 1); + setCheckoutDate(calendar.getTime()); + } + + public Booking(Hotel hotel, User user) { + this(); + this.hotel = hotel; + this.user = user; + } + + @Transient + public BigDecimal getTotal() { + return hotel.getPrice().multiply(new BigDecimal(getNights())); + } + + @Transient + public int getNights() { + if (checkinDate == null || checkoutDate == null) { + return 0; + } else { + return (int) (checkoutDate.getTime() - checkinDate.getTime()) + / 1000 / 60 / 60 / 24; + } + } + + @Id + @GeneratedValue(strategy = GenerationType.TABLE) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Basic + @Temporal(TemporalType.DATE) + public Date getCheckinDate() { + return checkinDate; + } + + public void setCheckinDate(Date datetime) { + this.checkinDate = datetime; + } + + @ManyToOne + public Hotel getHotel() { + return hotel; + } + + public void setHotel(Hotel hotel) { + this.hotel = hotel; + } + + @ManyToOne + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + @Basic + @Temporal(TemporalType.DATE) + public Date getCheckoutDate() { + return checkoutDate; + } + + public void setCheckoutDate(Date checkoutDate) { + this.checkoutDate = checkoutDate; + } + + 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; + } + + 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; + } + + public void validateEnterBookingDetails(MessageContext context) { + if (checkinDate.before(today())) { + context.addMessage(new MessageBuilder().error().source( + "checkinDate").code("booking.checkinDate.beforeToday") + .build()); + } else if (checkoutDate.before(checkinDate)) { + context.addMessage(new MessageBuilder().error().source( + "checkoutDate").code( + "booking.checkoutDate.beforeCheckinDate").build()); + } + } + + private Date today() { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH, -1); + return calendar.getTime(); + } + + @Override + public String toString() { + return "Booking(" + user + "," + hotel + ")"; + } + +} diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/BookingAgent.java b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/BookingAgent.java new file mode 100644 index 00000000..de53e67a --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/BookingAgent.java @@ -0,0 +1,57 @@ +package org.springframework.samples.springtravel.hotel; + +import java.util.List; + +/** + * A service interface for retrieving hotels and bookings from a backing + * repository. Also supports the ability to cancel a booking. + */ +public interface BookingAgent { + + /** + * Find bookings made by the given user + * + * @param username + * the user's name + * @return their bookings + */ + public List findBookings(String username); + + /** + * Find hotels available for booking by some criteria. + * + * @param criteria + * the search criteria + * @return a list of hotels meeting the criteria + */ + public List findHotels(SearchCriteria criteria); + + /** + * Find hotels by their identifier. + * + * @param id + * the hotel id + * @return the hotel + */ + public Hotel findHotelById(Long id); + + /** + * Create a new, transient hotel booking instance for the given user. + * + * @param hotelId + * the hotelId + * @param userName + * the user name + * @return the new transient booking instance + */ + public Booking createBooking(Long hotelId, String userName); + + /** + * Cancel an existing booking. + * + * @param id + * the booking id + */ + public void cancelBooking(Long id); + +} diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/Hotel.java b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/Hotel.java new file mode 100644 index 00000000..a06ca1eb --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/Hotel.java @@ -0,0 +1,107 @@ +package org.springframework.samples.springtravel.hotel; + +import java.io.Serializable; +import java.math.BigDecimal; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * A hotel where users may book stays. + */ +@Entity +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; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + 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; + } + + public Booking createBooking(User user) { + return new Booking(this, user); + } + + @Override + public String toString() { + return "Hotel(" + name + "," + address + "," + city + "," + zip + ")"; + } +} diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/HotelFlowHandlerAdapter.java b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/HotelFlowHandlerAdapter.java new file mode 100644 index 00000000..fb03f1e8 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/HotelFlowHandlerAdapter.java @@ -0,0 +1,24 @@ +package org.springframework.samples.springtravel.hotel; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.webflow.context.servlet.ServletExternalContext; +import org.springframework.webflow.mvc.servlet.FlowHandlerAdapter; +import org.springframework.webflow.mvc.servlet.MvcExternalContext; + +public class HotelFlowHandlerAdapter extends FlowHandlerAdapter { + + @Override + protected boolean isContextRequired() { + // the context will not be a WebApplicationContext in an OSGi environment + return false; + } + + @Override + protected ServletExternalContext createServletExternalContext(HttpServletRequest request, HttpServletResponse response) { + ServletExternalContext context = new MvcExternalContext(request.getSession().getServletContext(), request, response, getFlowUrlHandler()); + context.setAjaxRequest(getAjaxHandler().isAjaxRequest(request, response)); + return context; + } +} diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/JpaBookingAgent.java b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/JpaBookingAgent.java new file mode 100644 index 00000000..ac203591 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/JpaBookingAgent.java @@ -0,0 +1,96 @@ +package org.springframework.samples.springtravel.hotel; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import org.springframework.stereotype.Repository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +/** + * A JPA-based implementation of the Booking Service. Delegates to a JPA entity + * manager to issue data access calls against the backing repository. The + * EntityManager reference is provided by the managing container (Spring) + * automatically. + */ +@Service("bookingService") +@Repository +public class JpaBookingAgent implements BookingAgent { + + private EntityManager em; + + @PersistenceContext + public void setEntityManager(EntityManager em) { + this.em = em; + } + + @Transactional(readOnly = true) + @SuppressWarnings("unchecked") + public List findBookings(String username) { + if (username != null) { + return em + .createQuery( + "select b from Booking b where b.user.username = :username order by b.checkinDate") + .setParameter("username", username).getResultList(); + } else { + return null; + } + } + + @Transactional(readOnly = true) + @SuppressWarnings("unchecked") + public List findHotels(SearchCriteria criteria) { + String pattern = getSearchPattern(criteria); + List 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(criteria.getPageSize()).setFirstResult( + criteria.getPage() * criteria.getPageSize()) + .getResultList(); + return hotels; + } + + @Transactional(readOnly = true) + public Hotel findHotelById(Long id) { + return em.find(Hotel.class, id); + } + + @Transactional(readOnly = true) + public Booking createBooking(Long hotelId, String username) { + Hotel hotel = em.find(Hotel.class, hotelId); + User user = findUser(username); + return new Booking(hotel, user); + } + + @Transactional + public void cancelBooking(Long id) { + Booking booking = em.find(Booking.class, id); + if (booking != null) { + em.remove(booking); + } + } + + // helpers + + private String getSearchPattern(SearchCriteria criteria) { + if (StringUtils.hasText(criteria.getSearchString())) { + return "'%" + + criteria.getSearchString().toLowerCase() + .replace('*', '%') + "%'"; + } else { + return "'%'"; + } + } + + private User findUser(String username) { + return (User) em.createQuery( + "select u from User u where u.username = :username") + .setParameter("username", username).getSingleResult(); + } + +} \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/ReferenceData.java b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/ReferenceData.java new file mode 100644 index 00000000..f3fbc15e --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/ReferenceData.java @@ -0,0 +1,83 @@ +package org.springframework.samples.springtravel.hotel; + +import java.util.ArrayList; +import java.util.List; + +import javax.faces.model.SelectItem; + +import org.springframework.stereotype.Service; + +@Service +public class ReferenceData { + + private List bedOptions; + + private List smokingOptions; + + private List creditCardExpMonths; + + private List creditCardExpYears; + + private List pageSizeOptions; + + public List getBedOptions() { + if (bedOptions == null) { + bedOptions = new ArrayList(); + bedOptions.add(new SelectItem(new Integer(1), "One king-size bed")); + bedOptions.add(new SelectItem(new Integer(2), "Two double beds")); + bedOptions.add(new SelectItem(new Integer(3), "Three beds")); + } + return bedOptions; + } + + public List getSmokingOptions() { + if (smokingOptions == null) { + smokingOptions = new ArrayList(); + smokingOptions.add(new SelectItem(Boolean.TRUE, "Smoking")); + smokingOptions.add(new SelectItem(Boolean.FALSE, "Non-Smoking")); + } + return smokingOptions; + } + + public List getCreditCardExpMonths() { + if (creditCardExpMonths == null) { + creditCardExpMonths = new ArrayList(); + creditCardExpMonths.add(new SelectItem(new Integer(1), "Jan")); + creditCardExpMonths.add(new SelectItem(new Integer(2), "Feb")); + creditCardExpMonths.add(new SelectItem(new Integer(3), "Mar")); + creditCardExpMonths.add(new SelectItem(new Integer(4), "Apr")); + creditCardExpMonths.add(new SelectItem(new Integer(5), "May")); + creditCardExpMonths.add(new SelectItem(new Integer(6), "Jun")); + creditCardExpMonths.add(new SelectItem(new Integer(7), "Jul")); + creditCardExpMonths.add(new SelectItem(new Integer(8), "Aug")); + creditCardExpMonths.add(new SelectItem(new Integer(9), "Sep")); + creditCardExpMonths.add(new SelectItem(new Integer(10), "Oct")); + creditCardExpMonths.add(new SelectItem(new Integer(11), "Nov")); + creditCardExpMonths.add(new SelectItem(new Integer(12), "Dec")); + } + return creditCardExpMonths; + } + + public List getCreditCardExpYears() { + if (creditCardExpYears == null) { + creditCardExpYears = new ArrayList(); + creditCardExpYears.add(new SelectItem(new Integer(2008), "2008")); + creditCardExpYears.add(new SelectItem(new Integer(2009), "2009")); + creditCardExpYears.add(new SelectItem(new Integer(2010), "2010")); + creditCardExpYears.add(new SelectItem(new Integer(2010), "2011")); + creditCardExpYears.add(new SelectItem(new Integer(2010), "2012")); + } + return creditCardExpYears; + } + + public List getPageSizeOptions() { + if (pageSizeOptions == null) { + pageSizeOptions = new ArrayList(); + pageSizeOptions.add(new SelectItem(new Integer(5), "5")); + pageSizeOptions.add(new SelectItem(new Integer(10), "10")); + pageSizeOptions.add(new SelectItem(new Integer(20), "20")); + } + return pageSizeOptions; + } + +} diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/SearchCriteria.java b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/SearchCriteria.java new file mode 100644 index 00000000..2b2d6570 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/SearchCriteria.java @@ -0,0 +1,70 @@ +package org.springframework.samples.springtravel.hotel; + +import java.io.Serializable; + +/** + * A backing bean for the main hotel search form. Encapsulates the criteria + * needed to perform a hotel search. + * + * It is expected a future milestone of Spring Web Flow 2.0 will allow + * flow-scoped beans like this one to hold references to transient services that + * are restored automatically when the flow is resumed on subsequent requests. + * This would allow this SearchCriteria object to delegate to the + * {@link BookingAgent} directly, for example, eliminating the need for the + * actions in {@link MainActions}. + */ +public class SearchCriteria implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * The user-provided search criteria for finding Hotels. + */ + private String searchString; + + /** + * The maximum page size of the Hotel result list + */ + private int pageSize; + + /** + * The current page of the Hotel result list. + */ + private int page; + + public String getSearchString() { + return searchString; + } + + public void setSearchString(String searchString) { + this.searchString = searchString; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + + public void nextPage() { + page++; + } + + public void previousPage() { + page--; + } + + public void resetPage() { + page = 0; + } +} \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/User.java b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/User.java new file mode 100644 index 00000000..db3a8516 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/User.java @@ -0,0 +1,62 @@ +package org.springframework.samples.springtravel.hotel; + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * A user who can book hotels. + */ +@Entity +@Table(name = "Customer") +public class User implements Serializable { + + private static final long serialVersionUID = -3652559447682574722L; + + private String username; + + private String password; + + private String name; + + public User() { + } + + public User(String username, String password, String name) { + this.username = username; + this.password = password; + this.name = name; + } + + @Id + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "User(" + username + ")"; + } +} diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/booking.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/booking.xml new file mode 100644 index 00000000..b77b7094 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/booking.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/enterBookingDetails.xhtml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/enterBookingDetails.xhtml new file mode 100644 index 00000000..2e3ebfda --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/enterBookingDetails.xhtml @@ -0,0 +1,136 @@ + + + + + +
+

Book Hotel

+ +
+ +
+
+ +
+
+
Name:
+
#{booking.hotel.name}
+
+
+
Address:
+
#{booking.hotel.address}
+
+
+
City, State:
+
#{booking.hotel.city}, #{booking.hotel.state}
+
+
+
Zip:
+
#{booking.hotel.zip}
+
+
+
Country:
+
#{booking.hotel.country}
+
+
+
Nightly rate:
+
+ + + +
+
+
+
+ Check In Date: +
+
+ + + + + +
+
+
+
+ Check Out Date: +
+
+ + + + + +
+
+
+
+ Room Preference: +
+
+ + + +
+
+
+
+ Smoking Preference: +
+
+ + + +
+
+
+
+ Credit Card #: +
+
+ + + +
+
+
+
+ Credit Card Name: +
+
+ + + +
+
+
+
+ Expiration Date: +
+
+ + + + + + +
+
+
+ +   + + +
+
+
+
+ +
+
\ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/messages.properties b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/messages.properties new file mode 100644 index 00000000..cbae4eb3 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/messages.properties @@ -0,0 +1,2 @@ +booking.checkinDate.beforeToday=The Check In Date must be a future date +booking.checkoutDate.beforeCheckinDate=The Check Out Date must be later than the Check In Date diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/reviewBooking.xhtml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/reviewBooking.xhtml new file mode 100644 index 00000000..c224fcd6 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/booking/reviewBooking.xhtml @@ -0,0 +1,76 @@ + + + + + +
+

Confirm Hotel Booking

+
+ +
+ +
+
+
Name:
+
#{booking.hotel.name}
+
+
+
Address:
+
#{booking.hotel.address}
+
+
+
City, State:
+
#{booking.hotel.city}, #{booking.hotel.state}
+
+
+
Zip:
+
#{booking.hotel.zip}
+
+
+
Country:
+
#{booking.hotel.country}
+
+
+
Total payment:
+
+ + + +
+
+
+
Check In Date:
+
+ + + +
+
+
+
Check Out Date:
+
+ + + +
+
+
+
Credit Card #:
+
#{booking.creditCard}
+
+
+   +   + +
+
+
+
+ +
+
\ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/enterSearchCriteria.xhtml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/enterSearchCriteria.xhtml new file mode 100644 index 00000000..daf31531 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/enterSearchCriteria.xhtml @@ -0,0 +1,91 @@ + + + + + + +
+ + + +

Search Hotels

+ +
+
+
+ Search String: +
+
+ + + +
+
+
+
+ Maximum results: +
+
+ + + +
+
+
+ +
+
+
+
+
+ + +
+ +

Current Hotel Bookings

+ + + + Name + #{booking.hotel.name} + + + Address + #{booking.hotel.address} + + + City, State + #{booking.hotel.city}, #{booking.hotel.state} + + + Check in date + + + + + + Check out date + + + + + + Confirmation number + #{booking.id} + + + Action + + + +
+
+
+ +
+
\ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/reviewHotel.xhtml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/reviewHotel.xhtml new file mode 100644 index 00000000..1511f6c0 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/reviewHotel.xhtml @@ -0,0 +1,56 @@ + + + + + +
+

View Hotel

+ +
+
+
Name:
+
#{hotel.name}
+
+
+
Address:
+
#{hotel.address}
+
+
+
City:
+
#{hotel.city}
+
+
+
State:
+
#{hotel.state}
+
+
+
Zip:
+
#{hotel.zip}
+
+
+
Country:
+
#{hotel.country}
+
+
+
Nightly rate:
+
+ + + +
+
+
+   + +
+
+
+
+ +
+
\ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/reviewHotels.xhtml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/reviewHotels.xhtml new file mode 100644 index 00000000..c6544b73 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/reviewHotels.xhtml @@ -0,0 +1,51 @@ + + + + + + +
+

Hotel Results

+

+ +

+ +
+ + + + Name + #{h.name} + + + Address + #{h.address} + + + City, State + #{h.city}, #{h.state}, #{h.country} + + + Zip + #{h.zip} + + + Action + + + +
+ + +
+
+
+
+
+
+
\ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/search.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/search.xml new file mode 100644 index 00000000..679f55b8 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/java/org/springframework/samples/springtravel/hotel/search/search.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/MANIFEST.MF b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 00000000..303dbbfe --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,22 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Spring Travel Hotel Module +Bundle-SymbolicName: org.springframework.samples.springtravel.hotel +Bundle-Vendor: SpringSource +Export-Package: + org.springframework.samples.springtravel.hotel +Import-Package: + javax.sql +Import-Bundle: + org.springframework.webflow;version="[2.0.3,3.0.0)", + org.springframework.binding;version="[2.0.3,3.0.0)", + org.springframework.faces;version="[2.0.3,3.0.0)", + org.springframework.js;version="[2.0.3,3.0.0)", + com.springsource.org.jboss.el;version="[2.0.0,2.1.0)", + org.springframework.security;version="[2.0.0,2.1.0)", + com.springsource.org.hsqldb;version="[1.8.0, 2.0.0)", + com.springsource.javax.servlet;version="2.4.0", + com.springsource.org.apache.myfaces.javax.faces;version="[1.2.0,2.0.0)" +Import-Library: + org.springframework.spring;version="[2.5.4,3.0.0)", + org.hibernate.ejb;version="[3.3.1.ga, 3.3.1.ga]" \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/persistence.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/persistence.xml new file mode 100644 index 00000000..30981407 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,18 @@ + + + + org.hibernate.ejb.HibernatePersistence + org.springframework.samples.springtravel.hotel.User + org.springframework.samples.springtravel.hotel.Booking + org.springframework.samples.springtravel.hotel.Hotel + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/spring/module-context.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/spring/module-context.xml new file mode 100644 index 00000000..67aa4704 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/spring/module-context.xml @@ -0,0 +1,88 @@ + + + + + + + + /hotel/search=flowController + /hotel/booking=flowController + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/spring/osgi-context.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/spring/osgi-context.xml new file mode 100644 index 00000000..daf129ab --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/META-INF/spring/osgi-context.xml @@ -0,0 +1,20 @@ + + + + + + + + org.springframework.web.servlet.HandlerMapping + org.springframework.core.Ordered + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/import.sql b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/import.sql new file mode 100644 index 00000000..e3211aac --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/import.sql @@ -0,0 +1,27 @@ +insert into Customer (username, name) values ('keith', 'Keith') +insert into Customer (username, name) values ('erwin', 'Erwin') +insert into Customer (username, name) values ('jeremy', 'Jeremy') +insert into Customer (username, name) values ('scott', 'Scott') +insert into Hotel (id, price, name, address, city, state, zip, country) values (1, 199, 'Westin Diplomat', '3555 S. Ocean Drive', 'Hollywood', 'FL', '33019', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (2, 60, 'Jameson Inn', '890 Palm Bay Rd NE', 'Palm Bay', 'FL', '32905', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (3, 199, 'Chilworth Manor', 'The Cottage, Southampton Business Park', 'Southampton', 'Hants', 'SO16 7JF', 'UK') +insert into Hotel (id, price, name, address, city, state, zip, country) values (4, 120, 'Marriott Courtyard', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (5, 180, 'Doubletree', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (6, 450, 'W Hotel', 'Union Square, Manhattan', 'NY', 'NY', '10011', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (7, 450, 'W Hotel', 'Lexington Ave, Manhattan', 'NY', 'NY', '10011', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (8, 250, 'Hotel Rouge', '1315 16th Street NW', 'Washington', 'DC', '20036', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (9, 300, '70 Park Avenue Hotel', '70 Park Avenue', 'NY', 'NY', '10011', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (10, 300, 'Conrad Miami', '1395 Brickell Ave', 'Miami', 'FL', '33131', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (11, 80, 'Sea Horse Inn', '2106 N Clairemont Ave', 'Eau Claire', 'WI', '54703', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (12, 90, 'Super 8 Eau Claire Campus Area', '1151 W Macarthur Ave', 'Eau Claire', 'WI', '54701', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (13, 160, 'Marriot Downtown', '55 Fourth Street', 'San Francisco', 'CA', '94103', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (14, 200, 'Hilton Diagonal Mar', 'Passeig del Taulat 262-264', 'Barcelona', 'Catalunya', '08019', 'Spain') +insert into Hotel (id, price, name, address, city, state, zip, country) values (15, 210, 'Hilton Tel Aviv', 'Independence Park', 'Tel Aviv', '', '63405', 'Israel') +insert into Hotel (id, price, name, address, city, state, zip, country) values (16, 240, 'InterContinental Tokyo Bay', 'Takeshiba Pier', 'Tokyo', '', '105', 'Japan') +insert into Hotel (id, price, name, address, city, state, zip, country) values (17, 130, 'Hotel Beaulac', ' Esplanade Léopold-Robert 2', 'Neuchatel', '', '2000', 'Switzerland') +insert into Hotel (id, price, name, address, city, state, zip, country) values (18, 140, 'Conrad Treasury Place', 'William & George Streets', 'Brisbane', 'QLD', '4001', 'Australia') +insert into Hotel (id, price, name, address, city, state, zip, country) values (19, 230, 'Ritz Carlton', '1228 Sherbrooke St', 'West Montreal', 'Quebec', 'H3G1H6', 'Canada') +insert into Hotel (id, price, name, address, city, state, zip, country) values (20, 460, 'Ritz Carlton', 'Peachtree Rd, Buckhead', 'Atlanta', 'GA', '30326', 'USA') +insert into Hotel (id, price, name, address, city, state, zip, country) values (21, 220, 'Swissotel', '68 Market Street', 'Sydney', 'NSW', '2000', 'Australia') +insert into Hotel (id, price, name, address, city, state, zip, country) values (22, 250, 'Meliá White House', 'Albany Street', 'Regents Park London', '', 'NW13UP', 'Great Britain') +insert into Hotel (id, price, name, address, city, state, zip, country) values (23, 210, 'Hotel Allegro', '171 West Randolph Street', 'Chicago', 'IL', '60601', 'USA') \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/log4j.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/log4j.xml new file mode 100644 index 00000000..4c3ff1c0 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.hotel/src/main/resources/log4j.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.jdt.core.prefs b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..cdc8c2a3 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +#Wed Apr 30 14:04:29 BST 2008 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.jst.common.project.facet.core.prefs b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.jst.common.project.facet.core.prefs new file mode 100644 index 00000000..13fc2d20 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.jst.common.project.facet.core.prefs @@ -0,0 +1,3 @@ +#Wed May 07 10:35:56 BST 2008 +classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER/owners=jst.java\:5.0 +eclipse.preferences.version=1 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 00000000..c525c05d --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/MANIFEST.MF b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 00000000..3332f2d2 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,12 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Spring Travel Shared Resources Module +Bundle-SymbolicName: org.springframework.samples.springtravel.resource +Bundle-Vendor: SpringSource +Import-Package: + javax.sql +Import-Bundle: + com.springsource.org.hsqldb;version="[1.8.0, 2.0.0)", + com.springsource.org.apache.commons.dbcp;version="[1.2.2.osgi,1.3.0)" +Import-Library: + org.springframework.spring;version="[2.5.4, 3.0)" \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/spring/module-context.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/spring/module-context.xml new file mode 100644 index 00000000..8ce51564 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/spring/module-context.xml @@ -0,0 +1,18 @@ + + + + + + + commons-dbcp based datasource as org.springframework.jdbc.datasource.DriverManagerDataSource is not supported under osgi + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/spring/osgi-context.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/spring/osgi-context.xml new file mode 100644 index 00000000..1d2c3d48 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.resource/src/main/resources/META-INF/spring/osgi-context.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/.settings/org.eclipse.jdt.core.prefs b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..bca0008a --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +#Wed Apr 30 15:14:56 BST 2008 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 00000000..fada7b5c --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/MANIFEST.MF b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 00000000..e15ebdc4 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,31 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-SymbolicName: org.springframework.samples.springtravel.webapp +Bundle-Name: Spring Travel Web Application Module +Import-Bundle: + org.springframework.webflow;version="[2.0.3,3.0.0)", + org.springframework.js;version="[2.0.3,3.0)", + org.springframework.faces;version="[2.0.3,3.0)", + com.springsource.org.apache.myfaces;version="[1.2.0,2.0.0)", + com.springsource.org.apache.myfaces.javax.faces;version="[1.2.0,2.0.0)", + com.springsource.com.sun.facelets;version="[1.1.14,1.2.0)", + org.springframework.security;version="[2.0.0,2.1.0)" +Import-Library: + org.springframework.spring;version="[2.5.4,3.0.0)", + org.hibernate.ejb;version="[3.3.1.ga, 3.3.1.ga]" +Platform-ModuleType: Web +Web-ContextPath: springtravel-faces +Web-DispatcherServletUrlPatterns: /spring/* +Web-ServletContextListeners: + org.apache.myfaces.webapp.StartupServletContextListener +Web-Servlets: + FacesServlet;servlet-class:="javax.faces.webapp.FacesServlet";load-on-startup:="1";url-patterns:="*.faces", + ResourcesServlet;servlet-class:="org.springframework.js.resource.ResourceServlet";load-on-startup:="0";url-patterns:="/resources/*" +Web-FilterMappings: springSecurityFilterChain;url-patterns:="/*" +Web-ContextParams: + javax.faces.DEFAULT_SUFFIX;param-value:=".xhtml", + facelets.DEVELOPMENT;param-value:="true", + facelets.REFRESH_PERIOD;param-value:="1", + facelets.RESOURCE_RESOLVER;param-value:="org.springframework.faces.webflow.FlowResourceResolver" +Web-SessionTimeout: 5 +Web-WelcomeFiles: index.html \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/module-context.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/module-context.xml new file mode 100644 index 00000000..f0e3da31 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/module-context.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/osgi-context.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/osgi-context.xml new file mode 100644 index 00000000..8e6ee1fd --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/osgi-context.xml @@ -0,0 +1,18 @@ + + + + + + org.springframework.web.servlet.HandlerMapping + org.springframework.core.Ordered + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/security-context.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/security-context.xml new file mode 100644 index 00000000..517a7322 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/META-INF/spring/security-context.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/faces-config.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/faces-config.xml new file mode 100644 index 00000000..8a0d7056 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/faces-config.xml @@ -0,0 +1,11 @@ + + + + + + + com.sun.facelets.FaceletViewHandler + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/intro.xhtml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/intro.xhtml new file mode 100644 index 00000000..7a6cb433 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/intro.xhtml @@ -0,0 +1,38 @@ + + + + + +
+

Welcome to Spring Travel

+

+ This reference application illustrates how to use Spring MVC, Spring Web Flow, and Spring Faces + together to power rich web applications based on Spring and JavaServerFaces technology. +

+

+ The key features illustrated in this sample include: +

+
    +
  • A declarative navigation model enabling full browser button support and dynamic navigation rules
  • +
  • A fine-grained state management model, including support for ConversationScope and ViewScope
  • +
  • Modularization of web application functionality by domain use case, illustrating project structure best-practices
  • +
  • Managed persistence contexts with the Java Persistence API (JPA)
  • +
  • Unified Expression Language (EL) integration
  • +
  • Spring Security integration
  • +
  • Declarative page authoring with Facelets, including applying reusable page layouts
  • +
  • A lightweight component library for Ajax and client-side validation that employs progressive enhancement techniques
  • +
  • Exception handling support across all layers of the application
  • +
  • Spring IDE tooling integration, with support for graphical flow modeling and visualization
  • +
+

+ Start your Spring Travel experience +

+
+ +
+
\ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/layouts/standard.xhtml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/layouts/standard.xhtml new file mode 100644 index 00000000..904b68d1 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/layouts/standard.xhtml @@ -0,0 +1,61 @@ + + + + + + Spring Faces: Hotel Booking Sample Application + + + + + + + + + + + + +
+ +
+
+ + generic hotel + + + The Spring Experience + +

+

+
+
+ +
+
+ +
+ +
+ \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/login.xhtml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/login.xhtml new file mode 100644 index 00000000..3b836d0d --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/login.xhtml @@ -0,0 +1,60 @@ + + + + + +

Login Required

+ +
+ +
+ Your login attempt was not successful, try again.
+ Reason: #{sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message} +
+
+
+

Valid username/passwords are:

+
    +
  • keith/melbourne
  • +
  • erwin/leuven
  • +
  • jeremy/atlanta
  • +
  • scott/rochester
  • +
+
+ +
+
+
+
+
User:
+
+ + + + +
+
+
+
Password:
+
+ +
+
+
+
Don't ask for my password for two weeks:
+
+ +
+
+
+
+ +
+
+
+ +
+
\ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/logoutSuccess.xhtml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/logoutSuccess.xhtml new file mode 100644 index 00000000..cdf0b5dc --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/WEB-INF/logoutSuccess.xhtml @@ -0,0 +1,17 @@ + + + + + +
+

Logout

+

You have successfully logged out.

+

+ Continue +

+
+ +
+
\ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/bg.gif b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..013cfa6f731faddb7ee4d9d51ddc35e9f552842b GIT binary patch literal 172 zcmV;d08{@*Nk%w1VfX?H0Du4h|NsBPyS5?z6+?1mVRU6=Aa`kWXdqN*WgtgMO;7+V z00000_yP(500MG^kEzS;52Kv4+KU6;y!#J^;z*X}iKgnxw(bkZhbGtdjpzE#_x=wI z?r6fI@rX<+m&~S9NqkDD)T;H0&1yH%t@jHKi^t?Lqias9*X*|Y%|XNG^t%0yH_G$; azW)yx=&&bPXn2U2h()N_==dmA002AoP*;5b literal 0 HcmV?d00001 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/btn.bg.gif b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/btn.bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..87256cf42ec43b180e49f1c6db9c44d87212ee82 GIT binary patch literal 325 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%0D||y-s?!IaYc77pjuz%bRgfG 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 literal 0 HcmV?d00001 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/th.bg.gif b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/th.bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..4663cf5124f4a2c803a12680d337d3ef1559f3fe GIT binary patch literal 1074 zcmeIx+fR~V0LSqc4+%QU<KH`h&h+to=v;9hS4YWg4DL!VItN%|G>) zErVri&0;lJtZQ2~(=WTl2HSyc+IOvXhjqtcb?j|B_Uz8RZ6{pUw#)5sxt*?khil(? zaNs^TbRT(+Jf1@j+~Xs!*ZbRd;Qfv7@_+yI1u))-jEbVds-mapS7lYD=={-tSsEb&6cY3wQxdWEmJ%1}~&(u`9A&pLXVOyy4FF6^VRB7UrtwZyl zNoA_Oe2@^@(H5_0##BOg<`bSwzC~Rx?rrOOI9`qTL<@Ulydt zocM4iq4>&c#YA98~p`Vy6{+Rb9~<808}_8?Ohn6#~F00FSXOgO7|y*Mkf^r z9$_*FAyKgwa&GPIK$IW`i$hat{ewbDsRcNk@J&E)WLSJ!H?Gz{06+p^fB*mx2q5_n DQ1KmG literal 0 HcmV?d00001 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/tse.gif b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/images/tse.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1fa98cf57617b6c613572f4db3e70518f5ed0c9 GIT binary patch literal 2814 zcmd^L0fB*m3Zp-^1CdR3`Z zUb}X!va+(Os;auWx~8T^rBYqLe*MOc8@08y_4V})4GlMM-fV1aY-(z{b?esc+qavW zn_F61?%cU^_wL<$_wL=lfB(UQ2M-@U)MzxVt*vcsZCb6iy}iAoqvMZ1{^;!N?CR?3 z?(XjC>FMq5?d$7%^ypE4fB)mhj|T<@1_uY9Jb5xSG&DRsJTfveIyyQwHumSAe?EQs z^sm4EdiLzu-+%u-K0ZD%F)=wg`TY6wsi~^)u&}te`2PL-rKP10A3l8i`0>-HPs_{8pFe;8=bwMReEG7nvhwxo z*VWb4Z~w>OR?T66baF!R61xpo4ZEeqLvsYIby+jOVVcqgMPa{iTRG~qjvU8`u&o3{#47kyhv8l(XT9_3N*)Yv57Bh_tH^=R1ChG8EWCxAhk9e% z6J|+bs-aG5QEdbd&E3P2>`ET%`Z3RXwTO#?qiOB!S$TwCT1lpoI*EbdPB)k7qJ_7Y{h=p6mA zK)&hR;dUvQVlTOJpC;wFfcib2Xo{%oZ`(T3e5rY0qT4=)P{{%|(*{Q-UIk>)e3C8y zM^BPzLS04h5&Sr~FdR#+@4Q(UGgPR*g^e0BKJR6ZjH-q!GS?D#bW2of9eMJr)!O#eZS~#v|5XHNU$7XcQ$B;vkjtzx_ zX|8^fB{gK-IxD_xwezQJZ=L;SLN30ZdY47VGfI%y#^l*ZM#Mqxg2rZ>!R+oe2L}h? zcXNJCxg;W#a=O;D>gsG5NDAi%kn#Swu4_KFZr~b26;3x&35n$!vE=3?2DkCU5c5{w z=>fcdL7mnhl)28zG-)JJUo|(#rg?I%xi-ho9emDY8IQ>2J(~5>r4PTUaW;6x!*r(oJc9w5K%K2X;+qIR z1=#C>T;Q-(i&)}Dm?^|sEFl9$vZ9);IBV^fD#}gF1n6%pB+k=J4t1#9!FLi1ZQ>++ zu9#%WhvD25IFkel1`8=&flXQ{kpQ?NeyxpSQEeof$YSQIH{5aB$QPMyH%`Su$JlKx zbo#kdAU)?anZQf!Xr4mRpaHW2jas|r2MUpsPbXP-%TY0lJfrh~z)=i8=gt+{0#Jx) zG9Rx}7Xk!aI&wv4%>F*i3TVSdJ2QM~=ak6PJIf`a+d#I8ZG-5?^35n<3l?-jVm4~w6QjyqvwN7i@;?u9EHi3B>ks%-p7lesBaU6!G<=b*_Bw+!hBU zWP@tB2k{JN-p{01$JT*26MB?MV}Q{iks)(XjM-5Kw$pa4z4u^R^F(BijDmD3gSPbVtZeUNTti}RdqYnvt*m#{5o)9ZEkNV&y91-iZ;0HTQb`_QyH z_Cq^D8**+K?8B|bLU)wL*y*hixqY2I4~|ic2_fN35kQfJ^U@ zk!pFkAG?Zuy~MsfJj1zt3yq6*;u{JeLtrPBcgz`BF3WWI;Pb+Z{SpWPu)Vkpw2#x9)?loG{AA;Q);kG}*=j>UHpvJ#!V&Fm zw(6R4X6dogvCMI&j{CmQQ?U!cEL~7iKZ!aZ + + + + \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/styles/booking.css b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/styles/booking.css new file mode 100644 index 00000000..a5f814e8 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel.webapp/src/main/webapp/styles/booking.css @@ -0,0 +1,154 @@ + a, a:visited, a:link, a:active { + color: #59924B; + background-color: transparent; + text-decoration: none; + font-weight: bold; + } + + a:hover { + color: white; + background-color: #65a242; + text-decoration: none; + font-weight: bold; + } + + body.spring { + background-color: #9cac7c; + } + + form div, + form p { + padding: 0px; + margin: 0 0 .5em 0; + } + + #header.spring { + margin: 0 0 1em 0; + padding: 0px 0px; + background-color : #414f23; + } + + #branding.spring { + float: none; + width: 100%; + margin: 10px 0 0 0; + padding: 0 0 0 0; + text-align: none; + } + + #welcome { + padding: 10px 10px; + } + + #welcome div.left { + float: left; + } + + #welcome div.right { + float: right; + } + + #content.spring { + width: 740px; + background: #fff url(../images/bg.gif) 0 0 repeat; + margin-bottom: 0px; + } + + #content.spring input[type="submit"], input[type="button"], button { + font-size: 1em; + font-weight: bold; + color: #fff; + background: #fff url(../images/btn.bg.gif) 0 0 repeat-x; + border-style: none; + padding: 2px 2px 2px 2px; + } + + #local.spring{ + width: 215px; + } + + #footer.spring { + padding: 25px 0; + background-color : white; + border-top: 1px solid #C3BBB6; + } + + #footer.spring img { + float: right; + padding-right: 20px; + } + + .errors { + font-weight: bold; + text-align: left; + color: #600; + } + + .errors ul { + list-style: none; + } + + .section { + text-align: left; + width: 505px; + float: left; + margin-bottom: 5px; + } + + .field { + float:left; + } + + .field .label { + float: left; + padding-top: 5px; + padding-right: 5px; + font-weight: bold; + width: 150px; + text-align: right; + } + + .field .input { + float: left; + width: 250px; + text-align: left; + } + + .field .output { + float: left; + width: 250px; + padding-top: 5px; + text-align: left; + } + + .buttonGroup { + clear: both; + text-align: right; + } + + .buttonGroup input[type="submit"], .buttonGroup input[type="button"], .buttonGroup button, .buttonGroup a { + margin-left: 5px; + margin-right: 5px; + } + + .summary { + width: 100%; + border: 1px solid #414f23; + border-collapse: collapse; + } + + .summary thead th { + border-left: 1px solid #414f23; + background: #fff url(../images/th.bg.gif) 0 100% repeat-x; + border-bottom: 1px solid #414f23; + padding: 6px; + text-align: left; + font-size: small; + } + + .summary tbody td { + border-left: 1px solid #9cac7c; + padding: 4px; + border-bottom: 1px solid #9cac7c; + font-size: 8pt; + } \ No newline at end of file diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 00000000..df2c698e --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.eclipse.wst.validation.prefs b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 00000000..f8d7c790 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,54 @@ +#Wed Apr 30 17:12:26 BST 2008 +DELEGATES_PREFERENCE=delegateValidatorList +USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator; +USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator; +USER_PREFERENCE=overrideGlobalPreferencesfalse +eclipse.preferences.version=1 +filters/org.eclipse.wst.wsdl.validation.wsdl/build=true +filters/org.eclipse.wst.wsdl.validation.wsdl/delegate=org.eclipse.wst.wsdl.validation.internal.eclipse.Validator +filters/org.eclipse.wst.wsdl.validation.wsdl/groups/0/rules/0/case=false +filters/org.eclipse.wst.wsdl.validation.wsdl/groups/0/rules/0/pattern=wsdl +filters/org.eclipse.wst.wsdl.validation.wsdl/groups/0/rules/0/type=fileext +filters/org.eclipse.wst.wsdl.validation.wsdl/groups/0/type=include +filters/org.eclipse.wst.wsdl.validation.wsdl/manual=true +filters/org.eclipse.wst.wsdl.validation.wsdl/version=2 +filters/org.eclipse.wst.xml.core.xml/build=true +filters/org.eclipse.wst.xml.core.xml/groups/0/rules/0/pattern=org.eclipse.jst.jsp.core.tldsource +filters/org.eclipse.wst.xml.core.xml/groups/0/rules/0/type=contentType +filters/org.eclipse.wst.xml.core.xml/groups/0/rules/1/pattern=org.eclipse.wst.xml.core.xslsource +filters/org.eclipse.wst.xml.core.xml/groups/0/rules/1/type=contentType +filters/org.eclipse.wst.xml.core.xml/groups/0/rules/2/pattern=org.eclipse.core.runtime.xml +filters/org.eclipse.wst.xml.core.xml/groups/0/rules/2/type=contentType +filters/org.eclipse.wst.xml.core.xml/groups/0/rules/3/pattern=org.eclipse.wst.xml.core.xmlsource +filters/org.eclipse.wst.xml.core.xml/groups/0/rules/3/type=contentType +filters/org.eclipse.wst.xml.core.xml/groups/0/type=include +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/0/case=true +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/0/fileType=1 +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/0/pattern=.classpath +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/0/type=file +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/1/case=true +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/1/fileType=1 +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/1/pattern=.project +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/1/type=file +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/2/pattern=org.eclipse.jst.j2ee.ejb.EJBNature +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/2/type=projectNature +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/3/case=true +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/3/fileType=2 +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/3/pattern=.settings +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/3/type=file +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/4/pattern=org.eclipse.jst.j2ee.EARNature +filters/org.eclipse.wst.xml.core.xml/groups/1/rules/4/type=projectNature +filters/org.eclipse.wst.xml.core.xml/groups/1/type=exclude +filters/org.eclipse.wst.xml.core.xml/manual=true +filters/org.eclipse.wst.xml.core.xml/version=3 +filters/org.eclipse.wst.xsd.core.xsd/build=true +filters/org.eclipse.wst.xsd.core.xsd/delegate=org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator +filters/org.eclipse.wst.xsd.core.xsd/groups/0/rules/0/case=false +filters/org.eclipse.wst.xsd.core.xsd/groups/0/rules/0/pattern=xsd +filters/org.eclipse.wst.xsd.core.xsd/groups/0/rules/0/type=fileext +filters/org.eclipse.wst.xsd.core.xsd/groups/0/type=include +filters/org.eclipse.wst.xsd.core.xsd/manual=true +filters/org.eclipse.wst.xsd.core.xsd/version=2 +override=false +suspend=false +vf.version=2 diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.springframework.ide.eclipse.core.prefs b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.springframework.ide.eclipse.core.prefs new file mode 100644 index 00000000..10a332f1 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/.settings/org.springframework.ide.eclipse.core.prefs @@ -0,0 +1,49 @@ +#Wed Apr 30 17:12:26 BST 2008 +eclipse.preferences.version=1 +org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true +org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=false +org.springframework.ide.eclipse.core.builders.enable.osgibundleupdater=true +org.springframework.ide.eclipse.core.enable.project.preferences=false +org.springframework.ide.eclipse.core.validator.enable.com.springsource.sts.bestpractices.beansvalidator=true +org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=true +org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.AvoidDriverManagerDataSource-com.springsource.sts.bestpractices.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ImportElementsAtTopRulee-com.springsource.sts.bestpractices.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ParentBeanSpecifiesAbstractClassRule-com.springsource.sts.bestpractices.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.RefElementRule-com.springsource.sts.bestpractices.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.TooManyBeansInFileRule-com.springsource.sts.bestpractices.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UnnecessaryValueElementRule-com.springsource.sts.bestpractices.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UseBeanInheritance-com.springsource.sts.bestpractices.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.legacyxmlusage.jndiobjectfactory-com.springsource.sts.bestpractices.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true +org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true diff --git a/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/META-INF/MANIFEST.MF b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/META-INF/MANIFEST.MF new file mode 100644 index 00000000..57311b24 --- /dev/null +++ b/spring-webflow-samples/spring-travel-platform/org.springframework.samples.springtravel/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Application-SymbolicName: org.springframework.samples.springtravel +Application-Name: Spring Travel +