[seam-commits] Seam SVN: r14266 - in branches/community/Seam_2_3: examples-ee6 and 46 other directories.
seam-commits at lists.jboss.org
seam-commits at lists.jboss.org
Thu Jan 26 10:44:13 EST 2012
Author: manaRH
Date: 2012-01-26 10:44:11 -0500 (Thu, 26 Jan 2012)
New Revision: 14266
Added:
branches/community/Seam_2_3/examples-ee6/
branches/community/Seam_2_3/examples-ee6/booking/
branches/community/Seam_2_3/examples-ee6/booking/booking-ear/
branches/community/Seam_2_3/examples-ee6/booking/booking-ear/pom.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-ear/src/
branches/community/Seam_2_3/examples-ee6/booking/booking-ear/src/main/
branches/community/Seam_2_3/examples-ee6/booking/booking-ear/src/main/application/
branches/community/Seam_2_3/examples-ee6/booking/booking-ear/src/main/application/META-INF/
branches/community/Seam_2_3/examples-ee6/booking/booking-ear/src/main/application/META-INF/jboss-deployment-structure.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/pom.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Authenticator.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/AuthenticatorAction.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Booking.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/BookingList.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/BookingListAction.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/ChangePassword.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/ChangePasswordAction.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Hotel.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelBooking.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelBookingAction.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelSearching.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelSearchingAction.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Register.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/RegisterAction.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/User.java
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources-cluster/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources-cluster/META-INF/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources-cluster/META-INF/jboss.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/META-INF/
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/META-INF/ejb-jar.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/META-INF/persistence.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/import.sql
branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/seam.properties
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/pom.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/testng-cluster.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/testng.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-integration/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-integration/testng.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/WEB-INF/
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/WEB-INF/components.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/booking.properties
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/jboss-seam-booking-ds.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/seam.properties
branches/community/Seam_2_3/examples-ee6/booking/booking-web/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/pom.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/resources/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/resources/messages.properties
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp-cluster/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp-cluster/WEB-INF/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp-cluster/WEB-INF/web.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/components.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/faces-config.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/pages.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/web.xml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/book.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/confirm.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/conversations.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/css/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/css/screen.css
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/css/trailblazer_main.css
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/display.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/edit.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/bookingExp.html
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/confirmExp.html
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/introExp.html
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/loginExp.html
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/mainExp.html
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/registerExp.html
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/workspaceExp.html
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/home.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/hotel.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/hotelview.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/bg.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/btn.bg.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cal-next.png
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cal-prev.png
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cnt.bg.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/dtpick.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.ad.jpg
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.bar.jpg
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.bg.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.title.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/header_line.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/input.bg.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/sdb.bg.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/spinner.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/th.bg.gif
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/index.html
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/main.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/password.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/register.xhtml
branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/template.xhtml
branches/community/Seam_2_3/examples-ee6/booking/pom.xml
branches/community/Seam_2_3/examples-ee6/booking/readme.txt
branches/community/Seam_2_3/examples-ee6/pom.xml
branches/community/Seam_2_3/examples-ee6/readme.txt
Modified:
branches/community/Seam_2_3/jboss-seam-jsf2/src/main/java/org/jboss/seam/jsf/SeamApplication.java
branches/community/Seam_2_3/jboss-seam-ui-jsf2/pom.xml
Log:
JBSEAM-4852 - booking example with jsf2 on JBoss AS 7.1
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ear/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ear/pom.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ear/pom.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>booking</artifactId>
+ <groupId>org.jboss.seam.examples-ee6</groupId>
+ <version>2.3.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ear</artifactId>
+ <packaging>ear</packaging>
+ <name>Booking EAR Module</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-web</artifactId>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ejb</artifactId>
+ <type>ejb</type>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-jsf2</artifactId>
+ <type>ejb</type>
+ <scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>xpp3</groupId>
+ <artifactId>xpp3_min</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-validator</artifactId>
+ <scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.transaction</groupId>
+ <artifactId>jta</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-annotations</artifactId>
+ <scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.hibernate</groupId>
+ <artifactId>ejb3-persistence</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-entitymanager</artifactId>
+ <scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.hibernate</groupId>
+ <artifactId>ejb3-persistence</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.transaction</groupId>
+ <artifactId>jta</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>seam-booking</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-ear-plugin</artifactId>
+ <version>2.6</version>
+ <configuration>
+ <defaultLibBundleDir>lib</defaultLibBundleDir>
+ <!-- Exclude eclipse generated application.xml and manually modified jboss-app.xml during mvn build -->
+ <earSourceExcludes>**/application.xml, **/jboss-app.xml</earSourceExcludes>
+ <!-- use maven generated application.xml instead -->
+ <generateApplicationXml>true</generateApplicationXml>
+ <filtering>true</filtering>
+ <modules>
+ <webModule>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-web</artifactId>
+ <contextRoot>/seam-booking</contextRoot>
+ <bundleFileName>booking-web.war</bundleFileName>
+ </webModule>
+ <ejbModule>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ejb</artifactId>
+ <bundleFileName>booking-ejb.jar</bundleFileName>
+ </ejbModule>
+ <ejbModule>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-jsf2</artifactId>
+ <bundleFileName>jboss-seam.jar</bundleFileName>
+ </ejbModule>
+ </modules>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.jboss.as.plugins</groupId>
+ <artifactId>jboss-as-maven-plugin</artifactId>
+ <version>7.1.0.CR1b</version>
+ <executions>
+ <!-- This requires to be enabled manually as <enabled>true</enabled> doesn't
+ work -->
+ <!-- <execution> -->
+ <!-- <id>add-datasource</id> -->
+ <!-- <phase>package</phase> -->
+ <!-- <configuration> -->
+ <!-- <address>subsystem=datasources,data-source=java:/bookingDatasource</address> -->
+ <!-- <properties> -->
+ <!-- <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url> -->
+ <!-- <jndi-name>java:/bookingDatasource</jndi-name> -->
+ <!-- <enabled>true</enabled> -->
+ <!-- <pool-name>bookingDSPool</pool-name> -->
+ <!-- <user-name>sa</user-name> -->
+ <!-- <driver-name>h2</driver-name> -->
+ <!-- </properties> -->
+ <!-- </configuration> -->
+ <!-- <goals> -->
+ <!-- <goal>add-resource</goal> -->
+ <!-- </goals> -->
+ <!-- </execution> -->
+ <!-- Datasource has to be created before running deploy -->
+ <execution>
+ <phase>install</phase>
+ <goals>
+ <goal>deploy</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>exploded</id>
+ <properties>
+ <example.name>booking</example.name>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>unpack</id>
+ <phase>package</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ear</artifactId>
+ <type>ear</type>
+ <overWrite>true</overWrite>
+ <outputDirectory>${project.build.directory}/${project.build.finalName}-exploded/${project.build.finalName}.ear</outputDirectory>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-web</artifactId>
+ <type>war</type>
+ <overWrite>true</overWrite>
+ <outputDirectory>${project.build.directory}/${project.build.finalName}-exploded/${project.build.finalName}.ear/${example.name}-web.war</outputDirectory>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ejb</artifactId>
+ <type>jar</type>
+ <overWrite>true</overWrite>
+ <outputDirectory>${project.build.directory}/${project.build.finalName}-exploded/${project.build.finalName}.ear/${example.name}-ejb.jar</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ear/src/main/application/META-INF/jboss-deployment-structure.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ear/src/main/application/META-INF/jboss-deployment-structure.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ear/src/main/application/META-INF/jboss-deployment-structure.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,12 @@
+<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
+ <deployment>
+ <dependencies>
+ <module name="org.apache.log4j" export="true"/>
+ <module name="org.dom4j" export="true"/>
+ <module name="org.apache.commons.logging" export="true"/>
+ <module name="org.apache.commons.collections" export="true"/>
+ <module name="javax.faces.api" export="true"/>
+ <module name="com.sun.jsf-impl" export="true"/>
+ </dependencies>
+ </deployment>
+</jboss-deployment-structure>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/pom.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/pom.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>booking</artifactId>
+ <groupId>org.jboss.seam.examples-ee6</groupId>
+ <version>2.3.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ejb</artifactId>
+ <packaging>ejb</packaging>
+ <name>Booking EJB Module</name>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>persistence-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-validator</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-entitymanager</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.ejb</groupId>
+ <artifactId>ejb-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-jsf2</artifactId>
+ <type>ejb</type>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.faces</groupId>
+ <artifactId>jsf-api</artifactId>
+ </dependency>
+ </dependencies>
+
+ <profiles>
+ <profile>
+ <id>cluster</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-cluster-resources</id>
+ <phase>prepare-package</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.outputDirectory}</outputDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}/src/main/resources-cluster</directory>
+ <includes>
+ <include>**/*</include>
+ </includes>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Authenticator.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Authenticator.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Authenticator.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,9 @@
+package org.jboss.seam.example.booking;
+
+import javax.ejb.Local;
+
+ at Local
+public interface Authenticator
+{
+ boolean authenticate();
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/AuthenticatorAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/AuthenticatorAction.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/AuthenticatorAction.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,40 @@
+package org.jboss.seam.example.booking;
+
+import static org.jboss.seam.ScopeType.SESSION;
+
+import java.util.List;
+
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Out;
+
+ at Stateless
+ at Name("authenticator")
+public class AuthenticatorAction
+ implements Authenticator
+{
+ @PersistenceContext
+ private EntityManager em;
+
+ @In(required=false)
+ @Out(required=false, scope = SESSION)
+ private User user;
+
+ public boolean authenticate()
+ {
+ List results = em.createQuery("select u from User u where u.username=#{identity.username} and u.password=#{identity.password}")
+ .getResultList();
+
+ if (results.size()==0) {
+ return false;
+ } else {
+ user = (User) results.get(0);
+ return true;
+ }
+ }
+
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Booking.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Booking.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Booking.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,190 @@
+//$Id: Booking.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.util.Date;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import org.hibernate.validator.Length;
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Pattern;
+import org.jboss.seam.annotations.Name;
+
+ at Entity
+ at Name("booking")
+public class Booking implements Serializable
+{
+ private Long id;
+ private User user;
+ private Hotel hotel;
+ private Date checkinDate;
+ private Date checkoutDate;
+ private String creditCard;
+ private String creditCardName;
+ private int creditCardExpiryMonth;
+ private int creditCardExpiryYear;
+ private boolean smoking;
+ private int beds;
+
+ public Booking() {}
+
+ public Booking(Hotel hotel, User user)
+ {
+ this.hotel = hotel;
+ this.user = user;
+ }
+
+ @Transient
+ public BigDecimal getTotal()
+ {
+ return hotel.getPrice().multiply( new BigDecimal( getNights() ) );
+ }
+
+ @Transient
+ public int getNights()
+ {
+ return (int) ( checkoutDate.getTime() - checkinDate.getTime() ) / 1000 / 60 / 60 / 24;
+ }
+
+ @Id @GeneratedValue
+ public Long getId()
+ {
+ return id;
+ }
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ @NotNull
+ @Basic @Temporal(TemporalType.DATE)
+ public Date getCheckinDate()
+ {
+ return checkinDate;
+ }
+ public void setCheckinDate(Date datetime)
+ {
+ this.checkinDate = datetime;
+ }
+
+ @ManyToOne @NotNull
+ public Hotel getHotel()
+ {
+ return hotel;
+ }
+ public void setHotel(Hotel hotel)
+ {
+ this.hotel = hotel;
+ }
+
+ @ManyToOne @NotNull
+ public User getUser()
+ {
+ return user;
+ }
+ public void setUser(User user)
+ {
+ this.user = user;
+ }
+
+ @Basic @Temporal(TemporalType.DATE)
+ @NotNull
+ public Date getCheckoutDate()
+ {
+ return checkoutDate;
+ }
+ public void setCheckoutDate(Date checkoutDate)
+ {
+ this.checkoutDate = checkoutDate;
+ }
+
+ @NotNull(message="Credit card number is required")
+ @Length(min=16, max=16, message="Credit card number must 16 digits long")
+ @Pattern(regex="^\\d*$", message="Credit card number must be numeric")
+ public String getCreditCard()
+ {
+ return creditCard;
+ }
+
+ public void setCreditCard(String creditCard)
+ {
+ this.creditCard = creditCard;
+ }
+
+ @Transient
+ public String getDescription()
+ {
+ DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
+ return hotel==null ? null : hotel.getName() +
+ ", " + df.format( getCheckinDate() ) +
+ " to " + df.format( getCheckoutDate() );
+ }
+
+ public boolean isSmoking()
+ {
+ return smoking;
+ }
+
+ public void setSmoking(boolean smoking)
+ {
+ this.smoking = smoking;
+ }
+
+ public int getBeds()
+ {
+ return beds;
+ }
+
+ public void setBeds(int beds)
+ {
+ this.beds = beds;
+ }
+ @NotNull(message="Credit card name is required")
+ @Length(min=3, max=70, message="Credit card name is required")
+ public String getCreditCardName()
+ {
+ return creditCardName;
+ }
+
+ public void setCreditCardName(String creditCardName)
+ {
+ this.creditCardName = creditCardName;
+ }
+
+ public int getCreditCardExpiryMonth()
+ {
+ return creditCardExpiryMonth;
+ }
+
+ public void setCreditCardExpiryMonth(int creditCardExpiryMonth)
+ {
+ this.creditCardExpiryMonth = creditCardExpiryMonth;
+ }
+
+ public int getCreditCardExpiryYear()
+ {
+ return creditCardExpiryYear;
+ }
+
+ public void setCreditCardExpiryYear(int creditCardExpiryYear)
+ {
+ this.creditCardExpiryYear = creditCardExpiryYear;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "Booking(" + user + ","+ hotel + ")";
+ }
+
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/BookingList.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/BookingList.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/BookingList.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,13 @@
+//$Id: BookingList.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import javax.ejb.Local;
+
+ at Local
+public interface BookingList
+{
+ public void getBookings();
+ public Booking getBooking();
+ public void cancel();
+ public void destroy();
+}
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/BookingListAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/BookingListAction.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/BookingListAction.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,76 @@
+//$Id: BookingListAction.java 8748 2008-08-20 12:08:30Z pete.muir at jboss.org $
+package org.jboss.seam.example.booking;
+
+import static javax.ejb.TransactionAttributeType.REQUIRES_NEW;
+import static org.jboss.seam.ScopeType.SESSION;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.ejb.TransactionAttribute;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.jboss.seam.annotations.Factory;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Observer;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.datamodel.DataModel;
+import org.jboss.seam.annotations.datamodel.DataModelSelection;
+import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.faces.FacesMessages;
+import org.jboss.seam.log.Log;
+
+ at Stateful
+ at Scope(SESSION)
+ at Name("bookingList")
+ at Restrict("#{identity.loggedIn}")
+ at TransactionAttribute(REQUIRES_NEW)
+public class BookingListAction implements BookingList, Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ @PersistenceContext
+ private EntityManager em;
+
+ @In
+ private User user;
+
+ @DataModel
+ private List<Booking> bookings;
+ @DataModelSelection
+ private Booking booking;
+
+ @Logger
+ private Log log;
+
+ @Factory
+ @Observer("bookingConfirmed")
+ public void getBookings()
+ {
+ bookings = em.createQuery("select b from Booking b where b.user.username = :username order by b.checkinDate")
+ .setParameter("username", user.getUsername())
+ .getResultList();
+ }
+
+ public void cancel()
+ {
+ log.info("Cancel booking: #{bookingList.booking.id} for #{user.username}");
+ Booking cancelled = em.find(Booking.class, booking.getId());
+ if (cancelled!=null) em.remove( cancelled );
+ getBookings();
+ FacesMessages.instance().add("Booking cancelled for confirmation number #0", booking.getId());
+ }
+
+ public Booking getBooking()
+ {
+ return booking;
+ }
+
+ @Remove
+ public void destroy() {}
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/ChangePassword.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/ChangePassword.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/ChangePassword.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,16 @@
+//$Id: ChangePassword.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import javax.ejb.Local;
+
+ at Local
+public interface ChangePassword
+{
+ public void changePassword();
+ public boolean isChanged();
+
+ public String getVerify();
+ public void setVerify(String verify);
+
+ public void destroy();
+}
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/ChangePasswordAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/ChangePasswordAction.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/ChangePasswordAction.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,73 @@
+//$Id: ChangePasswordAction.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import static org.jboss.seam.ScopeType.EVENT;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Out;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.faces.FacesMessages;
+
+ at Stateful
+ at Scope(EVENT)
+ at Name("changePassword")
+ at Restrict("#{identity.loggedIn}")
+public class ChangePasswordAction implements ChangePassword
+{
+ @In @Out
+ private User user;
+
+ @PersistenceContext
+ private EntityManager em;
+
+ private String verify;
+
+ private boolean changed;
+
+ @In
+ private FacesMessages facesMessages;
+
+ public void changePassword()
+ {
+ if ( user.getPassword().equals(verify) )
+ {
+ user = em.merge(user);
+ facesMessages.add("Password updated");
+ changed = true;
+ }
+ else
+ {
+ facesMessages.addToControl("verify", "Re-enter new password");
+ revertUser();
+ verify=null;
+ }
+ }
+
+ public boolean isChanged()
+ {
+ return changed;
+ }
+
+ private void revertUser()
+ {
+ user = em.find(User.class, user.getUsername());
+ }
+ public String getVerify()
+ {
+ return verify;
+ }
+ public void setVerify(String verify)
+ {
+ this.verify = verify;
+ }
+
+ @Remove
+ public void destroy() {}
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Hotel.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Hotel.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Hotel.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,114 @@
+//$Id: Hotel.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.validator.Length;
+import org.hibernate.validator.NotNull;
+import org.jboss.seam.annotations.Name;
+
+ at Entity
+ at Name("hotel")
+public class Hotel implements Serializable
+{
+ private Long id;
+ private String name;
+ private String address;
+ private String city;
+ private String state;
+ private String zip;
+ private String country;
+ private BigDecimal price;
+
+ @Id @GeneratedValue
+ public Long getId()
+ {
+ return id;
+ }
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ @Length(max=50) @NotNull
+ public String getName()
+ {
+ return name;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ @Length(max=100) @NotNull
+ public String getAddress()
+ {
+ return address;
+ }
+ public void setAddress(String address)
+ {
+ this.address = address;
+ }
+
+ @Length(max=40) @NotNull
+ public String getCity()
+ {
+ return city;
+ }
+ public void setCity(String city)
+ {
+ this.city = city;
+ }
+
+ @Length(min=4, max=6) @NotNull
+ public String getZip()
+ {
+ return zip;
+ }
+ public void setZip(String zip)
+ {
+ this.zip = zip;
+ }
+
+ @Length(min=2, max=10) @NotNull
+ public String getState()
+ {
+ return state;
+ }
+ public void setState(String state)
+ {
+ this.state = state;
+ }
+
+ @Length(min=2, max=40) @NotNull
+ public String getCountry()
+ {
+ return country;
+ }
+ public void setCountry(String country)
+ {
+ this.country = country;
+ }
+
+ @Column(precision=6, scale=2)
+ public BigDecimal getPrice()
+ {
+ return price;
+ }
+ public void setPrice(BigDecimal price)
+ {
+ this.price = price;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "Hotel(" + name + "," + address + "," + city + "," + zip + ")";
+ }
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelBooking.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelBooking.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelBooking.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,22 @@
+//$Id: HotelBooking.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import javax.ejb.Local;
+
+ at Local
+public interface HotelBooking
+{
+ public void selectHotel(Hotel selectedHotel);
+
+ public void bookHotel();
+
+ public void setBookingDetails();
+ public boolean isBookingValid();
+
+ public void confirm();
+
+ public void cancel();
+
+ public void destroy();
+
+}
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelBookingAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelBookingAction.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelBookingAction.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,108 @@
+//$Id: HotelBookingAction.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import static javax.persistence.PersistenceContextType.EXTENDED;
+
+import java.util.Calendar;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.jboss.seam.annotations.Begin;
+import org.jboss.seam.annotations.End;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Out;
+import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.core.Events;
+import org.jboss.seam.faces.FacesMessages;
+import org.jboss.seam.log.Log;
+
+ at Stateful
+ at Name("hotelBooking")
+ at Restrict("#{identity.loggedIn}")
+public class HotelBookingAction implements HotelBooking
+{
+
+ @PersistenceContext(type=EXTENDED)
+ private EntityManager em;
+
+ @In
+ private User user;
+
+ @In(required=false) @Out
+ private Hotel hotel;
+
+ @In(required=false)
+ @Out(required=false)
+ private Booking booking;
+
+ @In
+ private FacesMessages facesMessages;
+
+ @In
+ private Events events;
+
+ @Logger
+ private Log log;
+
+ private boolean bookingValid;
+
+ @Begin
+ public void selectHotel(Hotel selectedHotel)
+ {
+ hotel = em.merge(selectedHotel);
+ }
+
+ public void bookHotel()
+ {
+ booking = new Booking(hotel, user);
+ Calendar calendar = Calendar.getInstance();
+ booking.setCheckinDate( calendar.getTime() );
+ calendar.add(Calendar.DAY_OF_MONTH, 1);
+ booking.setCheckoutDate( calendar.getTime() );
+ }
+
+ public void setBookingDetails()
+ {
+ Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
+ if ( booking.getCheckinDate().before( calendar.getTime() ) )
+ {
+ facesMessages.addToControl("checkinDate", "Check in date must be a future date");
+ bookingValid=false;
+ }
+ else if ( !booking.getCheckinDate().before( booking.getCheckoutDate() ) )
+ {
+ facesMessages.addToControl("checkoutDate", "Check out date must be later than check in date");
+ bookingValid=false;
+ }
+ else
+ {
+ bookingValid=true;
+ }
+ }
+
+ public boolean isBookingValid()
+ {
+ return bookingValid;
+ }
+
+ @End
+ public void confirm()
+ {
+ em.persist(booking);
+ facesMessages.add("Thank you, #{user.name}, your confimation number for #{hotel.name} is #{booking.id}");
+ log.info("New booking: #{booking.id} for #{user.username}");
+ events.raiseTransactionSuccessEvent("bookingConfirmed");
+ }
+
+ @End
+ public void cancel() {}
+
+ @Remove
+ public void destroy() {}
+}
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelSearching.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelSearching.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelSearching.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,23 @@
+//$Id: HotelSearching.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import javax.ejb.Local;
+
+ at Local
+public interface HotelSearching
+{
+ public int getPageSize();
+ public void setPageSize(int pageSize);
+
+ public String getSearchString();
+ public void setSearchString(String searchString);
+
+ public String getSearchPattern();
+
+ public void find();
+ public void nextPage();
+ public boolean isNextPageAvailable();
+
+ public void destroy();
+
+}
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelSearchingAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelSearchingAction.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/HotelSearchingAction.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,95 @@
+//$Id: HotelSearchingAction.java 8998 2008-09-16 03:08:11Z shane.bryzak at jboss.com $
+package org.jboss.seam.example.booking;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Factory;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.datamodel.DataModel;
+import org.jboss.seam.annotations.security.Restrict;
+
+ at Stateful
+ at Name("hotelSearch")
+ at Scope(ScopeType.SESSION)
+ at Restrict("#{identity.loggedIn}")
+public class HotelSearchingAction implements HotelSearching
+{
+ @PersistenceContext
+ private EntityManager em;
+
+ private String searchString;
+ private int pageSize = 10;
+ private int page;
+ private boolean nextPageAvailable;
+
+ @DataModel
+ private List<Hotel> hotels;
+
+ public void find()
+ {
+ page = 0;
+ queryHotels();
+ }
+
+ public void nextPage()
+ {
+ page++;
+ queryHotels();
+ }
+
+ private void queryHotels() {
+ List<Hotel> results = em.createQuery("select h from Hotel h where lower(h.name) like #{pattern} or lower(h.city) like #{pattern} or lower(h.zip) like #{pattern} or lower(h.address) like #{pattern}")
+ .setMaxResults(pageSize+1)
+ .setFirstResult(page * pageSize)
+ .getResultList();
+
+ nextPageAvailable = results.size() > pageSize;
+ if (nextPageAvailable)
+ {
+ hotels = new ArrayList<Hotel>(results.subList(0,pageSize));
+ } else {
+ hotels = results;
+ }
+ }
+
+ public boolean isNextPageAvailable()
+ {
+ return nextPageAvailable;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ @Factory(value="pattern", scope=ScopeType.EVENT)
+ public String getSearchPattern()
+ {
+ return searchString==null ?
+ "%" : '%' + searchString.toLowerCase().replace('*', '%') + '%';
+ }
+
+ public String getSearchString()
+ {
+ return searchString;
+ }
+
+ public void setSearchString(String searchString)
+ {
+ this.searchString = searchString;
+ }
+
+ @Remove
+ public void destroy() {}
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Register.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Register.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/Register.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,16 @@
+//$Id: Register.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import javax.ejb.Local;
+
+ at Local
+public interface Register
+{
+ public void register();
+ public void invalid();
+ public String getVerify();
+ public void setVerify(String verify);
+ public boolean isRegistered();
+
+ public void destroy();
+}
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/RegisterAction.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/RegisterAction.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/RegisterAction.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,80 @@
+//$Id: RegisterAction.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import static org.jboss.seam.ScopeType.EVENT;
+
+import java.util.List;
+
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.faces.FacesMessages;
+
+ at Stateful
+ at Scope(EVENT)
+ at Name("register")
+public class RegisterAction implements Register
+{
+ @In
+ private User user;
+
+ @PersistenceContext
+ private EntityManager em;
+
+ @In
+ private FacesMessages facesMessages;
+
+ private String verify;
+
+ private boolean registered;
+
+ public void register()
+ {
+ if ( user.getPassword().equals(verify) )
+ {
+ List existing = em.createQuery("select u.username from User u where u.username=#{user.username}")
+ .getResultList();
+ if (existing.size()==0)
+ {
+ em.persist(user);
+ facesMessages.add("Successfully registered as #{user.username}");
+ registered = true;
+ }
+ else
+ {
+ facesMessages.addToControl("username", "Username #{user.username} already exists");
+ }
+ }
+ else
+ {
+ facesMessages.addToControl("verify", "Re-enter your password");
+ verify=null;
+ }
+ }
+
+ public void invalid()
+ {
+ facesMessages.add("Please try again");
+ }
+
+ public boolean isRegistered()
+ {
+ return registered;
+ }
+ public String getVerify()
+ {
+ return verify;
+ }
+ public void setVerify(String verify)
+ {
+ this.verify = verify;
+ }
+
+ @Remove
+ public void destroy() {}
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/User.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/User.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/java/org/jboss/seam/example/booking/User.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,76 @@
+//$Id: User.java 5579 2007-06-27 00:06:49Z gavin $
+package org.jboss.seam.example.booking;
+
+import static org.jboss.seam.ScopeType.SESSION;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.validator.Length;
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Pattern;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+
+ at Entity
+ at Name("user")
+ at Scope(SESSION)
+ at Table(name="Customer")
+public class User implements Serializable
+{
+ private String username;
+ private String password;
+ private String name;
+
+ public User(String name, String password, String username)
+ {
+ this.name = name;
+ this.password = password;
+ this.username = username;
+ }
+
+ public User() {}
+
+ @NotNull
+ @Length(max=100)
+ public String getName()
+ {
+ return name;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ @NotNull
+ @Length(min=5, max=15)
+ public String getPassword()
+ {
+ return password;
+ }
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ @Id
+ @Length(min=4, max=15)
+ @Pattern(regex="^\\w*$", message="not a valid username")
+ public String getUsername()
+ {
+ return username;
+ }
+ public void setUsername(String username)
+ {
+ this.username = username;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "User(" + username + ")";
+ }
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/META-INF/ejb-jar.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/META-INF/ejb-jar.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/META-INF/ejb-jar.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+ version="3.0">
+
+ <interceptors>
+ <interceptor>
+ <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
+ </interceptor>
+ </interceptors>
+
+ <assembly-descriptor>
+ <interceptor-binding>
+ <ejb-name>*</ejb-name>
+ <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
+ </interceptor-binding>
+ </assembly-descriptor>
+
+</ejb-jar>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/META-INF/persistence.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/META-INF/persistence.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/META-INF/persistence.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+ version="1.0">
+ <persistence-unit name="bookingDatabase">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <jta-data-source>java:/bookingDatasource</jta-data-source>
+ <properties>
+ <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+ <property name="hibernate.show_sql" value="true"/>
+ <!-- These are the default for JBoss EJB3, but not for HEM: -->
+<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
+ <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
+ </properties>
+ </persistence-unit>
+</persistence>
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/import.sql
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/import.sql (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/import.sql 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,22 @@
+insert into Customer (username, password, name) values ('gavin', 'foobar', 'Gavin King')
+insert into Customer (username, password, name) values ('demo', 'demo', 'Demo User')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (1, 120, 'Marriott Courtyard', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (2, 180, 'Doubletree', 'Tower Place, Buckhead', 'Atlanta', 'GA', '30305', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (3, 450, 'W Hotel', 'Union Square, Manhattan', 'NY', 'NY', '10011', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (4, 450, 'W Hotel', 'Lexington Ave, Manhattan', 'NY', 'NY', '10011', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (5, 250, 'Hotel Rouge', '1315 16th Street NW', 'Washington', 'DC', '20036', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (6, 300, '70 Park Avenue Hotel', '70 Park Avenue', 'NY', 'NY', '10011', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (8, 300, 'Conrad Miami', '1395 Brickell Ave', 'Miami', 'FL', '33131', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (9, 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 (10, 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 (11, 160, 'Marriott Downtown', '55 Fourth Street', 'San Francisco', 'CA', '94103', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (12, 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 (13, 210, 'Hilton Tel Aviv', 'Independence Park', 'Tel Aviv', '', '63405', 'Israel')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (14, 240, 'InterContinental Tokyo Bay', 'Takeshiba Pier', 'Tokyo', '', '105', 'Japan')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (15, 130, 'Hotel Beaulac', ' Esplanade Léopold-Robert 2', 'Neuchatel', '', '2000', 'Switzerland')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (16, 140, 'Conrad Treasury Place', 'William & George Streets', 'Brisbane', 'QLD', '4001', 'Australia')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (17, 230, 'Ritz Carlton', '1228 Sherbrooke St', 'West Montreal', 'Quebec', 'H3G1H6', 'Canada')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (18, 460, 'Ritz Carlton', 'Peachtree Rd, Buckhead', 'Atlanta', 'GA', '30326', 'USA')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (19, 220, 'Swissotel', '68 Market Street', 'Sydney', 'NSW', '2000', 'Australia')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (20, 250, 'Meliá White House', 'Albany Street', 'Regents Park London', '', 'NW13UP', 'Great Britain')
+insert into Hotel (id, price, name, address, city, state, zip, country) values (21, 210, 'Hotel Allegro', '171 West Randolph Street', 'Chicago', 'IL', '60601', 'USA')
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources/seam.properties
===================================================================
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources-cluster/META-INF/jboss.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources-cluster/META-INF/jboss.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-ejb/src/main/resources-cluster/META-INF/jboss.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_2.dtd">
+<jboss>
+ <enterprise-beans>
+ <session>
+ <ejb-name>BookingListAction</ejb-name>
+ <clustered>true</clustered>
+ </session>
+ <session>
+ <ejb-name>HotelBookingAction</ejb-name>
+ <clustered>true</clustered>
+ </session>
+ <session>
+ <ejb-name>HotelSearchingAction</ejb-name>
+ <clustered>true</clustered>
+ </session>
+ </enterprise-beans>
+</jboss>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/pom.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/pom.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>booking</artifactId>
+ <groupId>org.jboss.seam.examples-ee6</groupId>
+ <version>2.3.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-tests</artifactId>
+ <name>Booking Integration Tests Module</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.embedded</groupId>
+ <artifactId>jboss-embedded-all</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-deployers-client-spi</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-deployers-core-spi</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam.embedded</groupId>
+ <artifactId>thirdparty-all</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam.embedded</groupId>
+ <artifactId>hibernate-all</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <classifier>jdk15</classifier>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ejb</artifactId>
+ <type>ejb</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-jsf2</artifactId>
+ <type>ejb</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.faces</groupId>
+ <artifactId>jsf-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.server</groupId>
+ <artifactId>selenium-server</artifactId>
+ <classifier>standalone</classifier>
+ </dependency>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.client-drivers</groupId>
+ <artifactId>selenium-java-client-driver</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>functional-tests</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ <filtering>true</filtering>
+ </testResource>
+ <testResource>
+ <directory>src/test/bootstrap</directory>
+ <filtering>false</filtering>
+ </testResource>
+ <testResource> <!-- this takes datasource booking-ds.xml -->
+ <directory>${basedir}/src/main/resources</directory>
+ <filtering>true</filtering>
+ </testResource>
+ <testResource> <!-- this takes themes aka *.properties -->
+ <directory>${basedir}/../booking-web/src/main/resources</directory>
+ <filtering>true</filtering>
+ </testResource>
+ </testResources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skipTests>false</skipTests>
+ <argLine>-Dsun.lang.ClassLoader.allowArraySyntax=true -Xms512m -Xmx512m</argLine>
+ <additionalClasspathElements>
+ <additionalClasspathElement>${basedir}/../booking-web/src/main/webapp</additionalClasspathElement>
+ </additionalClasspathElements>
+ <suiteXmlFiles>
+ <suiteXmlFile>src/test/resources-integration/testng.xml</suiteXmlFile>
+ </suiteXmlFiles>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-seam-bootstrap</id>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-embedded-bootstrap</artifactId>
+ <version>${project.version}</version>
+ <type>jar</type>
+ <overWrite>false</overWrite>
+ <outputDirectory>${basedir}/src/test</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>${basedir}/src/test/META-INF/</directory>
+ </fileset>
+ <fileset>
+ <directory>${basedir}/src/test/bootstrap</directory>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>ftest-jbossas</id>
+ <properties>
+ <example.context.path>seam-booking</example.context.path>
+ </properties>
+ <build>
+ <plugins>
+<!-- <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jboss-maven-plugin</artifactId>
+ <configuration>
+ <jbossHome>${jboss.home}</jbossHome>
+ <serverName>${jboss.domain}</serverName>
+ <fileNames>
+ <param>${basedir}/../booking-ear/src/main/resources/jboss-seam-booking-ds.xml</param>
+ <param>${basedir}/../booking-ear/target/seam-booking.ear</param>
+ </fileNames>
+ </configuration>
+ </plugin> -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>selenium-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>failsafe-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>ftest-jbossas-cluster</id>
+ <properties>
+ <example.context.path>seam-booking</example.context.path>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>selenium-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>failsafe-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>ftest-tomcat</id>
+ <properties>
+ <example.context.path>jboss-seam-booking</example.context.path>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>selenium-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>failsafe-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,288 @@
+//$Id: BookingTest.java 5810 2007-07-16 06:46:47Z gavin $
+package org.jboss.seam.example.booking.test;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.faces.model.DataModel;
+import javax.faces.model.ListDataModel;
+
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.booking.Booking;
+import org.jboss.seam.example.booking.Hotel;
+import org.jboss.seam.example.booking.HotelBooking;
+import org.jboss.seam.example.booking.User;
+import org.jboss.seam.mock.SeamTest;
+import org.testng.annotations.Test;
+
+public class BookingTest extends SeamTest
+{
+
+ @Test
+ public void testBookHotel() throws Exception
+ {
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication() throws Exception
+ {
+ Contexts.getSessionContext().set("user", new User("Gavin King", "foobar", "gavin"));
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "foobar");
+ invokeAction("#{identity.login}");
+ }
+
+ }.run();
+
+ new FacesRequest("/main.xhtml") {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ setValue("#{hotelSearch.searchString}", "Union Square");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert invokeAction("#{hotelSearch.find}")==null;
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ DataModel hotels = (DataModel) Contexts.getSessionContext().get("hotels");
+ assert hotels.getRowCount()==1;
+ assert ( (Hotel) hotels.getRowData() ).getCity().equals("NY");
+ assert getValue("#{hotelSearch.searchString}").equals("Union Square");
+ assert !Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ String id = new FacesRequest("/main.xhtml") {
+
+ @Override
+ protected void invokeApplication() throws Exception {
+ HotelBooking hotelBooking = (HotelBooking) getInstance("hotelBooking");
+ DataModel hotels = (DataModel) Contexts.getSessionContext().get("hotels");
+ assert hotels.getRowCount()==1;
+ hotelBooking.selectHotel( (Hotel) hotels.getRowData() );
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ Hotel hotel = (Hotel) Contexts.getConversationContext().get("hotel");
+ assert hotel.getCity().equals("NY");
+ assert hotel.getZip().equals("10011");
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ id = new FacesRequest("/hotel.xhtml", id) {
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeAction("#{hotelBooking.bookHotel}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{booking.user}")!=null;
+ assert getValue("#{booking.hotel}")!=null;
+ assert getValue("#{booking.creditCard}")==null;
+ assert getValue("#{booking.creditCardName}")==null;
+ Booking booking = (Booking) Contexts.getConversationContext().get("booking");
+ assert booking.getHotel()==Contexts.getConversationContext().get("hotel");
+ assert booking.getUser()==Contexts.getSessionContext().get("user");
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ new FacesRequest("/book.xhtml", id) {
+
+ @Override
+ protected void processValidations() throws Exception
+ {
+ validateValue("#{booking.creditCard}", "123");
+ assert isValidationFailure();
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ Iterator messages = FacesContext.getCurrentInstance().getMessages();
+ assert messages.hasNext();
+ assert ( (FacesMessage) messages.next() ).getSummary().equals("Credit card number must 16 digits long");
+ assert !messages.hasNext();
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert !isInvokeApplicationBegun();
+ }
+
+ }.run();
+
+ new FacesRequest("/book.xhtml", id) {
+
+ @Override
+ protected void processValidations() throws Exception
+ {
+ validateValue("#{booking.creditCardName}", "");
+ assert isValidationFailure();
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ Iterator messages = FacesContext.getCurrentInstance().getMessages();
+ assert messages.hasNext();
+ assert ( (FacesMessage) messages.next() ).getSummary().equals("Credit card name is required");
+ assert !messages.hasNext();
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert !isInvokeApplicationBegun();
+ }
+
+ }.run();
+
+ new FacesRequest("/book.xhtml", id) {
+
+ @Override @SuppressWarnings("deprecation")
+ protected void updateModelValues() throws Exception
+ {
+ setValue("#{booking.creditCard}", "1234567891021234");
+ setValue("#{booking.creditCardName}", "GAVIN KING");
+ setValue("#{booking.beds}", 2);
+ Date now = new Date();
+ setValue("#{booking.checkinDate}", now);
+ setValue("#{booking.checkoutDate}", now);
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert invokeAction("#{hotelBooking.setBookingDetails}")==null;
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ Iterator messages = FacesContext.getCurrentInstance().getMessages();
+ assert messages.hasNext();
+ FacesMessage message = (FacesMessage) messages.next();
+ assert message.getSummary().equals("Check out date must be later than check in date");
+ assert !messages.hasNext();
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert isInvokeApplicationComplete();
+ }
+
+ }.run();
+
+ new FacesRequest("/book.xhtml", id) {
+
+ @Override @SuppressWarnings("deprecation")
+ protected void updateModelValues() throws Exception
+ {
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, 2);
+ setValue("#{booking.checkoutDate}", cal.getTime() );
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeAction("#{hotelBooking.setBookingDetails}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert isInvokeApplicationComplete();
+ }
+
+ }.run();
+
+ new FacesRequest("/confirm.xhtml", id) {
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeAction("#{hotelBooking.confirm}");
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert isInvokeApplicationComplete();
+ }
+
+ }.run();
+
+ new NonFacesRequest("/main.xhtml") {
+
+ @Override
+ protected void renderResponse()
+ {
+ ListDataModel bookings = (ListDataModel) getInstance("bookings");
+ assert bookings.getRowCount()==1;
+ bookings.setRowIndex(0);
+ Booking booking = (Booking) bookings.getRowData();
+ assert booking.getHotel().getCity().equals("NY");
+ assert booking.getUser().getUsername().equals("gavin");
+ assert !Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ new FacesRequest("/main.xhtml") {
+
+ @Override
+ protected void invokeApplication()
+ {
+ ListDataModel bookings = (ListDataModel) Contexts.getSessionContext().get("bookings");
+ bookings.setRowIndex(0);
+ invokeAction("#{bookingList.cancel}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ ListDataModel bookings = (ListDataModel) Contexts.getSessionContext().get("bookings");
+ assert bookings.getRowCount()==0;
+ assert !Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ }
+
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,138 @@
+//$Id: ChangePasswordTest.java 5810 2007-07-16 06:46:47Z gavin $
+package org.jboss.seam.example.booking.test;
+
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.booking.User;
+import org.jboss.seam.mock.SeamTest;
+import org.testng.annotations.Test;
+
+public class ChangePasswordTest extends SeamTest
+{
+
+ @Test
+ public void testChangePassword() throws Exception
+ {
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication() throws Exception
+ {
+ Contexts.getSessionContext().set("user", new User("Gavin King", "foobar", "gavin"));
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "foobar");
+ invokeMethod("#{identity.login}");
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void processValidations() throws Exception
+ {
+ validateValue("#{user.password}", "xxx");
+ assert isValidationFailure();
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ setValue("#{user.password}", "xxxyyy");
+ setValue("#{changePassword.verify}", "xxyyyx");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert invokeAction("#{changePassword.changePassword}")==null;
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ setValue("#{user.password}", "xxxyyy");
+ setValue("#{changePassword.verify}", "xxxyyy");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeMethod("#{changePassword.changePassword}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("xxxyyy");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ assert getValue("#{user.password}").equals("xxxyyy");
+ setValue("#{user.password}", "foobar");
+ setValue("#{changePassword.verify}", "foobar");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeMethod("#{changePassword.changePassword}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+
+ }
+
+ }.run();
+
+ }
+
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,115 @@
+//$Id: LoginTest.java 5810 2007-07-16 06:46:47Z gavin $
+package org.jboss.seam.example.booking.test;
+
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.web.Session;
+import org.jboss.seam.mock.SeamTest;
+import org.testng.annotations.Test;
+
+public class LoginTest extends SeamTest
+{
+
+ @Test
+ public void testLoginComponent() throws Exception
+ {
+ new ComponentTest() {
+
+ @Override
+ protected void testComponents() throws Exception
+ {
+ assert getValue("#{identity.loggedIn}").equals(false);
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "foobar");
+ invokeMethod("#{identity.login}");
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert getValue("#{identity.loggedIn}").equals(true);
+ invokeMethod("#{identity.logout}");
+ assert getValue("#{identity.loggedIn}").equals(false);
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "tiger");
+ invokeMethod("#{identity.login}");
+ assert getValue("#{identity.loggedIn}").equals(false);
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void testLogin() throws Exception
+ {
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert !isSessionInvalid();
+ assert getValue("#{identity.loggedIn}").equals(false);
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ assert !isSessionInvalid();
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "foobar");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeAction("#{identity.login}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert !isSessionInvalid();
+ assert getValue("#{identity.loggedIn}").equals(true);
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert !Manager.instance().isLongRunningConversation();
+ assert !isSessionInvalid();
+ invokeMethod("#{identity.logout}");
+ assert Session.instance().isInvalid();
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{identity.loggedIn}").equals(false);
+ assert Session.instance().isInvalid();
+ }
+
+ }.run();
+
+ }
+
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/WEB-INF/components.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/WEB-INF/components.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/WEB-INF/components.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components xmlns="http://jboss.com/products/seam/components"
+ xmlns:core="http://jboss.com/products/seam/core"
+ xmlns:security="http://jboss.com/products/seam/security"
+ xmlns:transaction="http://jboss.com/products/seam/transaction"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation=
+ "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.3.xsd
+ http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.3.xsd
+ http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.3.xsd
+ http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.3.xsd">
+
+<!-- <core:init jndi-pattern="@jndiPattern@" debug="true" distributable="@distributable@"/> -->
+ <core:init jndi-pattern="#{ejbName}/local" debug="true" />
+
+ <core:manager conversation-timeout="120000"
+ concurrent-request-timeout="500"
+ conversation-id-parameter="cid"/>
+
+ <transaction:ejb-transaction/>
+
+ <security:identity authenticate-method="#{authenticator.authenticate}"/>
+
+</components>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/booking.properties
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/booking.properties (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/booking.properties 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,84 @@
+ #
+ # JBoss, Home of Professional Open Source
+ # Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ # by the @authors tag. See the copyright.txt in the distribution for a
+ # full listing of individual contributors.
+ #
+ # This is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU Lesser General Public License as
+ # published by the Free Software Foundation; either version 2.1 of
+ # the License, or (at your option) any later version.
+ #
+ # This software is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ # Lesser General Public License for more details.
+ #
+ # You should have received a copy of the GNU Lesser General Public
+ # License along with this software; if not, write to the Free
+ # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ #
+HOME_PAGE /home.seam
+MAIN_PAGE /main.seam
+PAGE_TITLE JBoss Suites: Seam Framework
+LOGIN_USERNAME_FIELD id=login:username
+LOGIN_PASSWORD_FIELD id=login:password
+LOGIN_SUBMIT id=login:login
+LOGOUT id=logout
+PASSWORD_UPDATED_MESSAGE Password updated
+PASSWORD_REENTER_MESSAGE Re-enter new password
+PASSWORD_VALUE_REQUIRED_MESSAGE //span[text() = 'value is required']
+PASSWORD_LENGTH_MESSAGE length must be between
+PASSWORD_PASSWORD id=setpassword:PasswordDecorate:password
+PASSWORD_VERIFY id=setpassword:VerifyDecorate:verify
+PASSWORD_SUBMIT id=setpassword:change
+SETTINGS id=settings
+SEARCH_STRING_FIELD id=searchCriteria:searchString
+SEARCH_SUBMIT id=searchCriteria:findHotels
+NO_HOTELS_FOUND id=NoHotelsFoundMessage
+SEARCH_RESULT_TABLE xpath=//table[@id = 'hotels']/tbody
+SEARCH_RESULT_TABLE_FIRST_ROW_LINK id=hotels:0:viewHotel
+BOOKING_BOOK id=hotel:bookHotel
+BOOKING_CANCEL id=hotel:cancel
+HOTEL_BED_FIELD id=booking:bedsDecorate:beds
+HOTEL_BED_FIELD_SELECT_CRITERIA value=
+HOTEL_CHECKIN_DATE_FIELD id=booking:checkinDateDecorate:checkinDateInputDate
+HOTEL_CHECKIN_DATE_MESSAGE id=booking:checkinDateDecorate:message
+HOTEL_CHECKOUT_DATE_FIELD id=booking:checkoutDateDecorate:checkoutDateInputDate
+HOTEL_CHECKOUT_DATE_MESSAGE id=booking:checkoutDateDecorate:message
+HOTEL_SMOKING_1 id=booking:smokingDecorate:smoking:0
+HOTEL_SMOKING_2 id=booking:smokingDecorate:smoking:1
+HOTEL_CREDIT_CARD id=booking:creditCardDecorate:creditCard
+HOTEL_CREDIT_CARD_NAME id=booking:creditCardNameDecorate:creditCardName
+HOTEL_PROCEED id=booking:proceed
+HOTEL_CANCEL id=booking:cancel
+HOTEL_CONFIRM id=confirm:confirm
+HOTEL_MESSAGE xpath=//ul[@id='messages']/li
+REGISTRATION id=login:register
+REGISTRATION_USERNAME id=registration:usernameDecorate:username
+REGISTRATION_USERNAME_MESSAGE id=registration:usernameDecorate:message
+REGISTRATION_NAME id=registration:nameDecorate:name
+REGISTRATION_NAME_MESSAGE id=registration:nameDecorate:message
+REGISTRATION_PASSWORD id=registration:passwordDecorate:password
+REGISTRATION_PASSWORD_MESSAGE id=registration:passwordDecorate:message
+REGISTRATION_VERIFY id=registration:verifyDecorate:verify
+REGISTRATION_VERIFY_MESSAGE id=registration:verifyDecorate:message
+REGISTRATION_SUBMIT id=registration:register
+REGISTRATION_REENTER_MESSAGE Re-enter your password
+REGISTRATION_LENGTH_MESSAGE length must be between
+REGISTRATION_SUCCESSFUL_MESSAGE Successfully registered as {0}
+REGISTRATION_USER_EXISTS_MESSAGE Username {0} already exists
+NOT_LOGGED_IN_MESSAGE Please log in first
+CONVERSATION_TIMEOUT_MESSAGE The conversation ended, timed out or was processing another request
+BOOKING_TABLE_ITEM xpath\=//table[@id\="bookings\:bookings"]/tbody/tr[normalize-space(td[6]/text()) \= "{0}"][normalize-space(td[1]/text()) \= "{1}"]
+BOOKING_TABLE_ITEM_LINK xpath\=//table[@id\="bookings\:bookings"]/tbody/tr[normalize-space(td[6]/text()) \= "{0}"][normalize-space(td[1]/text()) \= "{1}"]/td[7]/a
+BOOKING_CANCELLED_MESSAGE Booking cancelled for confirmation number {0}
+BOOKING_CONFIRMATION_MESSAGE Thank you, {0}, your confimation number for {1} is \\d+
+BOOKING_INVALID_DATE_MESSAGE1 Check out date must be later than check in date
+BOOKING_INVALID_DATE_MESSAGE2 Check in date must be a future date
+WORKSPACE_BOOKING_TEXT Book hotel: {0}
+WORKSPACE_VIEW_TEXT View hotel: {0}
+WORKSPACE_TABLE_LINK_BY_ID id=ConversationListForm:ConversationListDataTable:{0}:EntryDescriptionLink
+WORKSPACE_TABLE_ROW_COUNT = //table[@id='ConversationListForm:ConversationListDataTable']/tbody/tr
+SPINNER id\=searchCriteria\:SpinnerGif
\ No newline at end of file
Property changes on: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/booking.properties
___________________________________________________________________
Added: svn:executable
+ *
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/jboss-seam-booking-ds.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/jboss-seam-booking-ds.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/jboss-seam-booking-ds.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE datasources
+ PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
+ "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
+
+<datasources>
+ <local-tx-datasource>
+ <jndi-name>bookingDatasource</jndi-name>
+ <connection-url>jdbc:hsqldb:.</connection-url>
+ <driver-class>org.hsqldb.jdbcDriver</driver-class>
+ <user-name>sa</user-name>
+ <password></password>
+ </local-tx-datasource>
+</datasources>
+
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/seam.properties
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/seam.properties (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources/seam.properties 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,3 @@
+#debug is explicitly disabled in test to avoid JBIDE-3623
+#Thu Dec 31 16:24:37 CET 2009
+org.jboss.seam.core.init.debug=false
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/testng-cluster.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/testng-cluster.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/testng-cluster.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,26 @@
+<!--
+ JBoss, Home of Professional Open Source Copyright 2008, Red Hat
+ Middleware LLC, and individual contributors by the @authors tag. See
+ the copyright.txt in the distribution for a full listing of individual
+ contributors. This is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version. This software is
+ distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ License for more details. You should have received a copy of the GNU
+ Lesser General Public License along with this software; if not, write
+ to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ Boston, MA 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+-->
+<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
+<suite name="Booking example" verbose="2" parallel="false">
+ <test name="booking_tests_cluster">
+ <parameter name="PROPERTY_FILE"
+ value="/booking.properties" />
+ <classes>
+ <class name="org.jboss.seam.example.common.test.booking.cluster.selenium.FailoverTest" />
+ </classes>
+ </test>
+</suite>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/testng.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/testng.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/testng.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,36 @@
+
+ <!--
+ JBoss, Home of Professional Open Source Copyright 2008, Red Hat
+ Middleware LLC, and individual contributors by the @authors tag. See
+ the copyright.txt in the distribution for a full listing of individual
+ contributors. This is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version. This software is
+ distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ License for more details. You should have received a copy of the GNU
+ Lesser General Public License along with this software; if not, write
+ to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ Boston, MA 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ -->
+<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
+<suite name="Booking example" verbose="2" parallel="false">
+ <test name="booking_jboss5">
+ <parameter name="PROPERTY_FILE"
+ value="/booking.properties" />
+ <classes>
+ <class
+ name="org.jboss.seam.example.common.test.booking.selenium.RegistrationTest" />
+ <class
+ name="org.jboss.seam.example.common.test.booking.selenium.ChangePasswordTest" />
+ <class
+ name="org.jboss.seam.example.common.test.booking.selenium.BackButtonTest" />
+ <class
+ name="org.jboss.seam.example.common.test.booking.selenium.SimpleBookingTest" />
+ <class
+ name="org.jboss.seam.example.common.test.booking.selenium.ConversationTest" />
+ </classes>
+ </test>
+</suite>
\ No newline at end of file
Property changes on: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-ftest/testng.xml
___________________________________________________________________
Added: svn:executable
+ *
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-integration/testng.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-integration/testng.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-tests/src/test/resources-integration/testng.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,13 @@
+<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
+
+<suite name="Hotel Booking" verbose="2" parallel="false">
+
+ <test name="Hotel Booking">
+ <classes>
+ <class name="org.jboss.seam.example.booking.test.LoginTest"/>
+ <class name="org.jboss.seam.example.booking.test.BookingTest"/>
+ <class name="org.jboss.seam.example.booking.test.ChangePasswordTest"/>
+ </classes>
+ </test>
+
+</suite>
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/pom.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/pom.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>booking</artifactId>
+ <groupId>org.jboss.seam.examples-ee6</groupId>
+ <version>2.3.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-web</artifactId>
+ <packaging>war</packaging>
+ <name>Booking Web Module</name>
+
+ <properties>
+ <!-- filtering property for components.xml -->
+ <jndiPattern>java:app/booking-ejb/#{ejbName}</jndiPattern>
+ <distributable>false</distributable>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ejb</artifactId>
+ <type>ejb</type>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-ui-jsf2</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-jul</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-debug-jsf2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>richfaces-components-ui</artifactId>
+ <version>4.1.0.Final</version>
+ </dependency>
+ <dependency>
+ <groupId>org.richfaces.core</groupId>
+ <artifactId>richfaces-core-impl</artifactId>
+ <version>4.1.0.Final</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>booking-web</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <configuration>
+ <webResources>
+ <resource>
+ <directory>src/main/webapp</directory>
+ <filtering>true</filtering>
+ </resource>
+ </webResources>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>cluster</id>
+ <properties>
+ <distributable>true</distributable>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <configuration>
+ <webResources>
+ <resource>
+ <directory>src/main/webapp</directory>
+ <filtering>true</filtering>
+ <excludes>
+ <exclude>**/web.xml</exclude>
+ </excludes>
+ </resource>
+ <resource>
+ <directory>src/main/webapp-cluster</directory>
+ <filtering>true</filtering>
+ </resource>
+ </webResources>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>tomcat</id>
+ <properties>
+ <!-- filtering property for components.xml -->
+ <jndiPattern>#{ejbName}/local</jndiPattern>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.seam.examples</groupId>
+ <artifactId>booking-ejb</artifactId>
+ <type>ejb</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam</artifactId>
+ <type>ejb</type>
+ <scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>xpp3</groupId>
+ <artifactId>xpp3_min</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>javax.faces</groupId>
+ <artifactId>jsf-api</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.faces</groupId>
+ <artifactId>jsf-impl</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <finalName>jboss-seam-booking</finalName>
+ <plugins>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-resources</id>
+ <phase>validate</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${basedir}/target/classes</outputDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}/../booking-ear/src/main/resources</directory>
+ <includes>
+ <include>jboss-seam-booking-ds.xml</include>
+ </includes>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/resources/messages.properties
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/resources/messages.properties (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/resources/messages.properties 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,50 @@
+javax.faces.component.UIInput.CONVERSION=value could not be converted to the expected type
+javax.faces.component.UIInput.REQUIRED=value is required
+javax.faces.component.UIInput.REQUIRED_detail=value is required
+javax.faces.component.UIInput.UPDATE=an error occurred when processing your submitted information
+javax.faces.component.UISelectOne.INVALID=value is not valid
+javax.faces.component.UISelectMany.INVALID=value is not valid
+
+javax.faces.converter.BigDecimalConverter.DECIMAL=value must be a number
+javax.faces.converter.BigDecimalConverter.DECIMAL_detail=value must be a signed decimal number consisting of zero or more digits, optionally followed by a decimal point and fraction, eg. {1}
+javax.faces.converter.BigIntegerConverter.BIGINTEGER=value must be a number
+javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail=value must be a signed integer number consisting of zero or more digits
+javax.faces.converter.BooleanConverter.BOOLEAN=value must be true or false
+javax.faces.converter.BooleanConverter.BOOLEAN_detail=value must be true or false (any value other than true will evaluate to false)
+javax.faces.converter.ByteConverter.BYTE=value must be a number between 0 and 255
+javax.faces.converter.ByteConverter.BYTE_detail=value must be a number between 0 and 255
+javax.faces.converter.CharacterConverter.CHARACTER=value must be a character
+javax.faces.converter.CharacterConverter.CHARACTER_detail=value must be a valid ASCII character
+javax.faces.convert.DateTimeConverter.CONVERSION value must be a datetime
+javax.faces.convert.DateTimeConverter.CONVERSION_detail value must be a datetime
+javax.faces.converter.DateTimeConverter.DATE=value must be a date
+javax.faces.converter.DateTimeConverter.DATE_detail=value must be a date, eg. {1}
+javax.faces.converter.DateTimeConverter.TIME=value must be a time
+javax.faces.converter.DateTimeConverter.TIME_detail=value must be a time, eg. {1}
+javax.faces.converter.DateTimeConverter.DATETIME=value must be a date and time
+javax.faces.converter.DateTimeConverter.DATETIME_detail=value must be a date and time, eg. {1}
+javax.faces.converter.DateTimeConverter.PATTERN_TYPE=a pattern or type attribute must be specified to convert the value
+javax.faces.converter.DoubleConverter.DOUBLE=value must be a number
+javax.faces.converter.DoubleConverter.DOUBLE_detail=value must be a number between 4.9E-324 and 1.7976931348623157E308
+javax.faces.converter.EnumConverter.ENUM=value must be convertible to an enum
+javax.faces.converter.EnumConverter.ENUM_detail=value must be convertible to an enum or from the enum that contains the constant {1}
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS=value must be convertible to an enum or from the enum, but no enum class provided
+javax.faces.converter.EnumConverter.ENUM_NO_CLASS_detail=value must be convertible to an enum or from the enum, but no enum class provided
+javax.faces.converter.FloatConverter.FLOAT=value must be a number
+javax.faces.converter.FloatConverter.FLOAT_detail=value must be a number between 1.4E-45 and 3.4028235E38
+javax.faces.converter.IntegerConverter.INTEGER=value must be a number
+javax.faces.converter.IntegerConverter.INTEGER_detail=value must be a number between -2147483648 and 2147483647
+javax.faces.converter.LongConverter.LONG=value must be a number
+javax.faces.converter.LongConverter.LONG_detail=must be a number between -9223372036854775808 and 9223372036854775807
+javax.faces.converter.NumberConverter.CURRENCY=value must be a currency amount
+javax.faces.converter.NumberConverter.CURRENCY_detail=value must be a currency amount, eg. {1}
+javax.faces.converter.NumberConverter.PERCENT=value must be a percentage amount
+javax.faces.converter.NumberConverter.PERCENT_detail=value must be a percentage amount, eg. {1}
+javax.faces.converter.NumberConverter.NUMBER=value must be a number
+javax.faces.converter.NumberConverter.NUMBER_detail=value must be a number
+javax.faces.converter.NumberConverter.PATTERN=value must be a number
+javax.faces.converter.NumberConverter.PATTERN_detail=value must be a number
+javax.faces.converter.ShortConverter.SHORT=value must be a number
+javax.faces.converter.ShortConverter.SHORT_detail=value must be a number between -32768 and 32767
+
+
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/components.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/components.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/components.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components xmlns="http://jboss.com/products/seam/components"
+ xmlns:core="http://jboss.com/products/seam/core"
+ xmlns:security="http://jboss.com/products/seam/security"
+ xmlns:transaction="http://jboss.com/products/seam/transaction"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation=
+ "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.3.xsd
+ http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.3.xsd
+ http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.3.xsd
+ http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.3.xsd">
+
+ <core:init jndi-pattern="@jndiPattern@" debug="true" distributable="@distributable@"/>
+
+ <core:manager conversation-timeout="120000"
+ concurrent-request-timeout="500"
+ conversation-id-parameter="cid"/>
+
+ <transaction:ejb-transaction/>
+
+ <security:identity authenticate-method="#{authenticator.authenticate}"/>
+
+ <component class="org.jboss.seam.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam/EjbSynchronizations"/>
+ <component class="org.jboss.seam.async.TimerServiceDispatcher" jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/>
+
+</components>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/faces-config.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/faces-config.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<faces-config version="2.1"
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">
+
+</faces-config>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/pages.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/pages.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/pages.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pages xmlns="http://jboss.com/products/seam/pages"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.3.xsd"
+
+ no-conversation-view-id="/main.xhtml"
+ login-view-id="/home.xhtml">
+
+ <page view-id="/register.xhtml">
+
+ <action if="#{validation.failed}" execute="#{register.invalid}"/>
+
+ <navigation>
+ <rule if="#{register.registered}">
+ <redirect view-id="/home.xhtml"/>
+ </rule>
+ </navigation>
+
+ </page>
+
+ <page view-id="/home.xhtml" action="#{identity.isLoggedIn}">
+
+ <navigation from-action="#{identity.isLoggedIn}">
+ <rule if-outcome="true">
+ <redirect view-id="/main.xhtml"/>
+ </rule>
+ <rule if-outcome="false">
+ <render view-id="/home.xhtml"/>
+ </rule>
+ </navigation>
+
+ </page>
+
+ <page view-id="/password.xhtml"
+ login-required="true">
+
+ <navigation>
+ <rule if="#{identity.loggedIn and changePassword.changed}">
+ <redirect view-id="/main.xhtml"/>
+ </rule>
+ </navigation>
+
+ </page>
+
+ <page view-id="/main.xhtml"
+ login-required="true">
+
+ <navigation from-action="#{hotelBooking.selectHotel(hot)}">
+ <redirect view-id="/hotel.xhtml"/>
+ </navigation>
+
+ <navigation from-action="#{bookingList.cancel}">
+ <redirect/>
+ </navigation>
+
+ </page>
+
+ <page view-id="/hotel.xhtml"
+ conversation-required="true"
+ login-required="true">
+
+ <description>View hotel: #{hotel.name}</description>
+
+ <navigation from-action="#{hotelBooking.bookHotel}">
+ <redirect view-id="/book.xhtml"/>
+ </navigation>
+
+ </page>
+
+ <page view-id="/book.xhtml"
+ conversation-required="true"
+ login-required="true">
+
+ <description>Book hotel: #{hotel.name}</description>
+
+ <navigation from-action="#{hotelBooking.setBookingDetails}">
+ <rule if="#{hotelBooking.bookingValid}">
+ <redirect view-id="/confirm.xhtml"/>
+ </rule>
+ </navigation>
+
+ </page>
+
+ <page view-id="/confirm.xhtml"
+ conversation-required="true"
+ login-required="true">
+
+ <description>Confirm booking: #{booking.description}</description>
+
+ <navigation from-action="#{hotelBooking.confirm}">
+ <redirect view-id="/main.xhtml"/>
+ </navigation>
+
+ </page>
+
+ <page view-id="*">
+ <navigation from-action="#{identity.logout}">
+ <redirect view-id="/home.xhtml"/>
+ </navigation>
+
+ <navigation from-action="#{hotelBooking.cancel}">
+ <redirect view-id="/main.xhtml"/>
+ </navigation>
+
+ </page>
+
+ <exception class="org.jboss.seam.security.NotLoggedInException">
+ <redirect view-id="/home.xhtml">
+ <message severity="warn">You must be logged in to use this feature</message>
+ </redirect>
+ </exception>
+
+ <exception class="javax.faces.application.ViewExpiredException">
+ <redirect view-id="/home.xhtml">
+ <message severity="warn">Session expired, please log in again</message>
+ </redirect>
+ </exception>
+
+</pages>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/web.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/web.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/WEB-INF/web.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="3.0"
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
+
+ <display-name>Seam Booking Example</display-name>
+
+ <!-- Seam -->
+
+ <listener>
+ <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
+ </listener>
+
+ <servlet>
+ <servlet-name>Seam Resource Servlet</servlet-name>
+ <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>Seam Resource Servlet</servlet-name>
+ <url-pattern>/seam/resource/*</url-pattern>
+ </servlet-mapping>
+
+ <filter>
+ <filter-name>Seam Filter</filter-name>
+ <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>Seam Filter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <!-- JSF -->
+
+ <context-param>
+ <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+ <param-value>.xhtml</param-value>
+ </context-param>
+
+<!-- <context-param> -->
+<!-- <param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name> -->
+<!-- <param-value>true</param-value> -->
+<!-- </context-param> -->
+
+<!-- <context-param> -->
+<!-- <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name> -->
+<!-- <param-value>com.sun.facelets.FaceletViewHandler</param-value> -->
+<!-- </context-param> -->
+
+ <servlet>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>*.seam</url-pattern>
+ </servlet-mapping>
+
+ <session-config>
+ <session-timeout>10</session-timeout>
+ </session-config>
+
+</web-app>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/book.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/book.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/book.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,122 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ xmlns:a="http://richfaces.org/a4j"
+ xmlns:rich="http://richfaces.org/rich"
+ template="template.xhtml">
+
+<!-- content -->
+<ui:define name="content">
+<div class="section">
+ <h1>Book Hotel</h1>
+</div>
+<div class="section">
+ <div class="entry errors">
+ <h:messages id="messages" globalOnly="true"/>
+ </div>
+
+ <ui:include src="hotelview.xhtml"/>
+
+ <div style="clear:both"/>
+
+ <h:form id="booking">
+ <fieldset>
+
+ <s:decorate id="checkinDateDecorate" template="edit.xhtml">
+ <ui:define name="label">Check In Date:</ui:define>
+ <rich:calendar id="checkinDate" value="#{booking.checkinDate}" required="true" datePattern="MM/dd/yyyy" event="onblur" reRender="checkinDateDecorate" style="width: auto;" />
+ </s:decorate>
+
+ <s:decorate id="checkoutDateDecorate" template="edit.xhtml">
+ <ui:define name="label">Check Out Date:</ui:define>
+ <rich:calendar id="checkoutDate" value="#{booking.checkoutDate}" required="true" datePattern="MM/dd/yyyy" event="onblur" reRender="checkoutDateDecorate" style="width: auto;"/>
+ </s:decorate>
+
+ <s:decorate id="bedsDecorate" template="edit.xhtml">
+ <ui:define name="label">Room Preference:</ui:define>
+ <h:selectOneMenu id="beds" value="#{booking.beds}">
+ <f:selectItem id="OneKingBed" itemLabel="One king-size bed" itemValue="1"/>
+ <f:selectItem id="TwoDoubleBeds" itemLabel="Two double beds" itemValue="2"/>
+ <f:selectItem id="ThreeBeds" itemLabel="Three beds" itemValue="3"/>
+ </h:selectOneMenu>
+ </s:decorate>
+
+ <s:decorate id="smokingDecorate" template="edit.xhtml">
+ <ui:define name="label">Smoking Preference:</ui:define>
+ <h:selectOneRadio id="smoking" value="#{booking.smoking}" layout="pageDirection" styleClass="radio">
+ <f:selectItem id="Smoking" itemLabel="Smoking" itemValue="true"/>
+ <f:selectItem id="NonSmoking" itemLabel="Non Smoking" itemValue="false"/>
+ </h:selectOneRadio>
+ </s:decorate>
+
+ <s:decorate id="creditCardDecorate" template="edit.xhtml">
+ <ui:define name="label">Credit Card #:</ui:define>
+ <h:inputText id="creditCard" value="#{booking.creditCard}" required="true">
+ <a:support id="onblur" event="onblur" reRender="creditCardDecorate"/>
+ </h:inputText>
+ </s:decorate>
+
+ <s:decorate id="creditCardNameDecorate" template="edit.xhtml">
+ <ui:define name="label">Credit Card Name:</ui:define>
+ <h:inputText id="creditCardName" value="#{booking.creditCardName}" required="true">
+ <a:support id="onblur" event="onblur" reRender="creditCardNameDecorate"/>
+ </h:inputText>
+ </s:decorate>
+
+ <s:decorate id="creditCardExpiryDecorate" template="edit.xhtml">
+ <ui:define name="label">Credit Card Expiry:</ui:define>
+ <h:selectOneMenu id="creditCardExpiryMonth" value="#{booking.creditCardExpiryMonth}">
+ <f:selectItem id="Jan" itemLabel="Jan" itemValue="1"/>
+ <f:selectItem id="Feb" itemLabel="Feb" itemValue="2"/>
+ <f:selectItem id="Mar" itemLabel="Mar" itemValue="3"/>
+ <f:selectItem id="Apr" itemLabel="Apr" itemValue="4"/>
+ <f:selectItem id="May" itemLabel="May" itemValue="5"/>
+ <f:selectItem id="Jun" itemLabel="Jun" itemValue="6"/>
+ <f:selectItem id="Jul" itemLabel="Jul" itemValue="7"/>
+ <f:selectItem id="Aug" itemLabel="Aug" itemValue="8"/>
+ <f:selectItem id="Sep" itemLabel="Sep" itemValue="9"/>
+ <f:selectItem id="Oct" itemLabel="Oct" itemValue="10"/>
+ <f:selectItem id="Nov" itemLabel="Nov" itemValue="11"/>
+ <f:selectItem id="Dec" itemLabel="Dec" itemValue="12"/>
+ </h:selectOneMenu>
+ <h:selectOneMenu id="creditCardExpiryYear" value="#{booking.creditCardExpiryYear}">
+ <f:selectItem id="Year2005" itemLabel="2005" itemValue="2005"/>
+ <f:selectItem id="Year2006" itemLabel="2006" itemValue="2006"/>
+ <f:selectItem id="Year2007" itemLabel="2007" itemValue="2007"/>
+ <f:selectItem id="Year2008" itemLabel="2008" itemValue="2008"/>
+ <f:selectItem id="Year2009" itemLabel="2009" itemValue="2009"/>
+ </h:selectOneMenu>
+ </s:decorate>
+
+ <div class="buttonBox">
+ <h:commandButton id="proceed" value="Proceed" action="#{hotelBooking.setBookingDetails}"/>
+  
+ <s:button id="cancel" value="Cancel" action="#{hotelBooking.cancel}"/>
+ </div>
+
+ </fieldset>
+ </h:form>
+</div>
+</ui:define>
+
+<!-- sidebar -->
+<ui:define name="sidebar">
+
+<h1>Workspace management</h1>
+<p>
+ As you can see, Seam makes it easy to work in multiple windows or multiple browser
+ tabs. But you can even switch between multiple tasks inside a single browser tab!
+ The "Workspaces" section showcases this advanced feature.
+</p>
+<p>
+ <a href="#" onclick="window.open('exp/workspaceExp.html','exp','width=752,height=500,scrollbars=yes');">
+ How does the workspace list work?
+ </a>
+</p>
+
+</ui:define>
+
+</ui:composition>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/confirm.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/confirm.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/confirm.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,74 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ template="template.xhtml">
+
+<!-- content -->
+<ui:define name="content">
+
+<div class="section">
+ <h1>Confirm Hotel Booking</h1>
+</div>
+
+<div class="section">
+
+ <ui:include src="hotelview.xhtml"/>
+
+ <s:decorate id="DecorateTotalPayment" template="display.xhtml">
+ <ui:define name="label">Total Payment:</ui:define>
+ <h:outputText id="BookingTotal" value="#{booking.total}">
+ <f:convertNumber type="currency" currencySymbol="$"/>
+ </h:outputText>
+ </s:decorate>
+
+ <s:decorate id="DecorateCheckInDate" template="display.xhtml">
+ <ui:define name="label">Check In Date:</ui:define>
+ <h:outputText id="BookingCheckinDate" value="#{booking.checkinDate}"/>
+ </s:decorate>
+
+ <s:decorate id="DecorateCheckoutDate" template="display.xhtml">
+ <ui:define name="label">Check Out Date:</ui:define>
+ <h:outputText id="BookingCheckoutDate" value="#{booking.checkoutDate}"/>
+ </s:decorate>
+
+ <s:decorate id="DecorateCreditCard" template="display.xhtml">
+ <ui:define name="label">Credit Card #:</ui:define>
+ #{booking.creditCard}
+ </s:decorate>
+
+ <div class="buttonBox">
+ <h:form id="confirm">
+ <h:commandButton id="confirm" value="Confirm" action="#{hotelBooking.confirm}"/>
+  
+ <s:button id="revise" value="Revise" view="/book.xhtml"/>
+  
+ <h:commandButton id="cancel" value="Cancel" action="#{hotelBooking.cancel}"/>
+ </h:form>
+ </div>
+
+</div>
+
+</ui:define>
+
+<!-- sidebar -->
+<ui:define name="sidebar">
+<h1>Back button navigation</h1>
+<p>
+ When you click "Confirm", the new booking is written to the database, the
+ conversation ends, and state associated with the conversation is automatically
+ destroyed by Seam. After you confirm your booking, try hitting the back button
+ on your web browser and clicking "Confirm" again. Seam makes it easy implement
+ applications that behave elegantly in response to the back, forward and refresh
+ buttons.
+</p>
+<p>
+ <a href="#" onclick="window.open('exp/confirmExp.html','exp','width=752,height=500,scrollbars=yes');">
+ What happens when the conversation ends?
+ </a>
+</p>
+</ui:define>
+
+</ui:composition>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/conversations.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/conversations.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/conversations.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,36 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:c="http://java.sun.com/jstl/core"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:s="http://jboss.com/products/seam/taglib">
+ <div>
+
+ <div class="section">
+ <h1><h:outputText rendered="#{not empty conversationList}" value="Workspaces"/></h1>
+ </div>
+
+ <div class="section">
+ <h:form id="ConversationListForm">
+ <h:dataTable id="ConversationListDataTable" value="#{conversationList}" var="entry">
+ <h:column id="column1">
+ <h:commandLink id="EntryDescriptionLink" action="#{entry.select}" value="#{entry.description}"/>
+  
+ <h:outputText id="CurrentEntry" value="[current]" rendered="#{entry.current}"/>
+ </h:column>
+ <h:column id="column2">
+ <h:outputText id="EntryStartDateTime" value="#{entry.startDatetime}">
+ <s:convertDateTime type="time" pattern="hh:mm"/>
+ </h:outputText>
+ -
+ <h:outputText id="EntryLastDateTime" value="#{entry.lastDatetime}">
+ <s:convertDateTime type="time" pattern="hh:mm"/>
+ </h:outputText>
+ </h:column>
+ </h:dataTable>
+ </h:form>
+ </div>
+
+ </div>
+</ui:composition>
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/css/screen.css
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/css/screen.css (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/css/screen.css 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,280 @@
+/* Setup defaults since variable in browsers
+----------------------------------------------- */
+body, div, span, dd, dt, dl, img, ul, ol, li, p, h1, h2, h3, h4, h5, form, hr, fieldset {
+ margin: 0;
+ padding: 0;
+}
+/* Element Defaults
+----------------------------------------------- */
+html {
+ height: 100%;
+ background-color: #DBD4C6;
+}
+img {
+ border: 0;
+}
+body {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: small;
+ line-height: 1.25em;
+ color: #362F2D;
+ position: relative;
+ width: 760px;
+ height: 100%;
+ margin-left: auto;
+ margin-right: auto;
+}
+.label {
+ font-weight: bold;
+ color: #5E5147;
+}
+input {
+ border: 1px solid #C3BBB6;
+ padding: 4px;
+ margin: 5px 0;
+ background: #fff url(../img/input.bg.gif) 0 0 repeat-x;
+}
+select {
+ border: 1px solid #C3BBB6;
+ padding: 4px;
+ margin: 5px 0;
+ background: #fff url(../img/input.bg.gif) 0 0 repeat-x;
+}
+ol, ul {
+ margin: 10px 0px 10px 6px;
+}
+li {
+ margin: 10px 12px;
+}
+fieldset {
+ border: 0;
+}
+/* Layout
+----------------------------------------------- */
+#document {
+ padding: 0 1px;
+ background: #fff url(../img/bg.gif) 0 0 repeat-y;
+ float: left;
+ border-bottom: 1px solid #C3BBB6;
+}
+#header {
+ float: left;
+ width: 758px;
+ height: 46px;
+ background: url(../img/hdr.bg.gif) 0 0 repeat-x;
+}
+#container {
+ float: left;
+ width: 758px;
+ background: url(../img/hdr.bar.jpg) 0 0 repeat-x;
+}
+#sidebar {
+ float: left;
+ width: 190px;
+ margin-top: 96px;
+ padding: 20px 10px 0 10px;
+ background: url(../img/sdb.bg.gif) 0 0 no-repeat;
+}
+#content {
+ float: left;
+ width: 548px;
+ margin-top: 75px;
+ padding-top: 5px;
+ background: #fff url(../img/cnt.bg.gif) 0 0 repeat-x;
+}
+#footer {
+ clear: both;
+ margin-top: 40px;
+ float: left;
+ padding: 20px;
+ border-top: 1px solid #C3BBB6;
+ background-color: #fff;
+ width: 718px;
+ text-align: right;
+}
+/* General
+----------------------------------------------- */
+input[type="submit"], input[type="button"] {
+ font-weight: bold;
+ color: #fff;
+ border: 1px solid #5D1414;
+ height: 26px;
+ background: #fff url(../img/btn.bg.gif) 0 0 repeat-x;
+ border-style: none;
+}
+.center {
+ text-align: center;
+}
+.entry {
+ clear: both;
+ padding-top: 10px;
+}
+.entry .label {
+ float: left;
+ padding-right: 5px;
+ font-weight: bold;
+ width: 150px;
+ text-align: right;
+}
+.entry .output {
+ float: right;
+ width: 360px;
+ padding-top: 10px;
+ text-align: left;
+}
+.entry .input {
+ float: right;
+ width: 360px;
+ text-align: left;
+}
+.entry .error {
+ float: right;
+ width: 360px;
+ text-align: left;
+}
+/* Sidebar
+----------------------------------------------- */
+.notes {
+ text-align: center;
+ font-size: small;
+}
+.subnotes {
+ margin-top: 1em;
+ font-size: small;
+}
+.errors {
+ font-size: small;
+ font-weight: bold;
+ text-align: center;
+ color: #600;
+}
+.errors div {
+ text-align: left;
+}
+.errors span {
+ text-align: left;
+}
+.errors input {
+ border: 1px solid #600;
+}
+.errors ul {
+ list-style: none;
+}
+.buttonBox {
+ text-align: center;
+ padding: 5px 0;
+ clear: both;
+}
+#sidebar p {
+ font-size: small;
+ color: #8B7869;
+ line-height: 150%;
+ padding-bottom: 10px;
+}
+#sidebar li {
+ font-size: small;
+ color: #8B7869;
+}
+#sidebar h1 {
+ line-height: normal;
+ font-weight: bold;
+ font-size: small;
+}
+/*
+#sidebar p:hover {
+ color: #362F2D;
+}
+*/
+/* Content
+----------------------------------------------- */
+#content .section {
+ float: left;
+ width: 518px;
+ padding: 15px 15px 0 15px;
+}
+#content .section h1 {
+ font-family: "Trebuchet MS", Arial, sans-serif;
+ line-height: normal;
+ font-weight: normal;
+ font-size: large;
+}
+#content .section p {
+ line-height: 150%;
+ padding: 10px 0;
+ font-size: small;
+}
+#content table {
+ width: 100%;
+ border: 1px solid #D2C9C4;
+ border-collapse: collapse;
+}
+#content table caption {
+ padding-bottom: 6px;
+ text-align: left;
+ font-weight: bold;
+}
+#content table thead th {
+ border-left: 1px solid #D2C9C4;
+ background: #fff url(../img/th.bg.gif) 0 100% repeat-x;
+ border-bottom: 1px solid #D2C9C4;
+ padding: 6px;
+ text-align: left;
+ font-size: small;
+}
+#content table tbody td {
+ border-left: 1px solid #E4DBD5;
+ padding: 4px;
+ border-bottom: 1px solid #D2C9C4;
+ font-size: small;
+}
+#content dt {
+ font-weight: bold;
+ float: left;
+ width: 33%;
+}
+#content dd {
+ padding-left: 10px;
+ float: left;
+ width: 66%;
+}
+#content table.radio {
+ border: 0px;
+}
+#content .input table,
+#content .input tbody tr td,
+#content table.radio tbody tr td {
+ border: 0px;
+ border-left: 0px;
+ border-bottom: 0px;
+}
+/* Header
+----------------------------------------------- */
+#title {
+ float: left;
+ padding: 1px 0 6px 15px;
+}
+#status {
+ color: #C7B299;
+ float: right;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-weight: bold;
+ font-size: x-small;
+ text-align: right;
+ padding-top: 14px;
+ padding-right: 15px;
+}
+#status a {
+ color: #C7B299;
+ text-decoration: none;
+}
+/* Homepage Modifications
+----------------------------------------------- */
+#pgHome #container {
+ background: url(../img/hdr.ad.jpg) 0 0 repeat-x;
+}
+#pgHome #sidebar {
+ margin-top: 207px;
+}
+#pgHome #content {
+ margin-top: 183px;
+}
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/css/trailblazer_main.css
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/css/trailblazer_main.css (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/css/trailblazer_main.css 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,148 @@
+* {
+ margin: 0px;
+ padding: 0px;
+ border: none;
+}
+
+body {
+ font: 1em verdana, arial, sans-serif;
+ background: #CCCCCC;
+}
+
+div#main {
+ margin-left: 0px;
+ width: 751px;
+ background: #ecefdf;
+}
+
+div#top,div#pictures{
+}
+
+div#pictures img {
+ float:left;
+}
+
+img#head1 {
+ margin-right: 3px;
+}
+
+img#head2 {
+ margin-right: 4px;
+}
+
+div.trail {
+ clear:both;
+ margin-left: 50px;
+ margin-top: 0px;
+ margin-right: 50px
+}
+
+div.foot {
+ margin-left: 50px;
+ margin-right: 50px;
+ margin-top: 50px;
+ text-align: center;
+ font-size: .5em;
+ height: 36px;
+}
+
+div.trail h1 {
+ margin-top: -30px;
+ margin-left: -50px;
+ font-size: 1.2em;
+ font-weight: bold;
+ padding-left: .4em;
+}
+
+div.trail h2 {
+ float: left;
+ font-size: 1em;
+ font-weight: bold;
+ padding-left: .4em;
+}
+
+div.trail h3 {
+ float: left;
+ font-size: .8em;
+ font-weight: bold;
+ margin-left: -1.4em;
+ margin-bottom: 1em;
+}
+
+
+div.trail p {
+ clear: both;
+ margin-top: 20px;
+ font-size: .8em;
+ text-decoration: none;
+}
+
+div#next_trail {
+ margin-left: 36px;
+}
+
+div.numbox {
+ border: thin solid black;
+ margin-left: -.8em;
+ float: left;
+ background: #ffffff;
+ padding: .2em .35em .3em;
+ font-style: normal;
+ font-weight: bold;
+ font-size: 1.4em;
+}
+
+div.figure {
+ text-align: center;
+ font-size: .6em;
+ margin-top: 30px;
+}
+
+div.figure img {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+code {
+ font: 1.1em "Courier New", Courier, mono;
+}
+
+code.block {
+ white-space: pre;
+ font: 10pt "Courier New", Courier, mono;
+ display: block;
+ border-style: dashed;
+ border-width: thin;
+ padding: .5em;
+ background: #ffffff;
+ margin: 20px;
+}
+
+div.foot_image {
+ float: left;
+ height: 86px;
+}
+
+a:active {
+ color : #666666;
+ text-decoration: none;
+}
+
+a:hover {
+ color : #000000;
+ background-color : #D6E0FE;
+ text-decoration: none;
+}
+
+a:link {
+ color : #005EB6;
+ text-decoration: none;
+}
+
+a:visited {
+ color : #888888;
+ text-decoration: none;
+}
+
+
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/display.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/display.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/display.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,16 @@
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib">
+
+ <div class="entry">
+ <span class="label">
+ <ui:insert name="label"/>
+ </span>
+ <span class="input">
+ <ui:insert/>
+ </span>
+ </div>
+
+</ui:composition>
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/edit.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/edit.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/edit.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,21 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib">
+
+ <div class="entry">
+ <s:label id="Label" styleClass="label #{invalid?'errors':''}">
+ <ui:insert name="label"/>
+ <s:span id="RequiredStyle" styleClass="required" rendered="#{required}">*</s:span>
+ </s:label>
+ <span class="input #{invalid?'errors':''}">
+ <s:validateAll id="ValidateAll">
+ <ui:insert/>
+ </s:validateAll>
+ </span>
+ <s:message id="message" styleClass="error errors"/>
+ </div>
+
+</ui:composition>
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/bookingExp.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/bookingExp.html (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/bookingExp.html 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <title>In-depth Explanation</title>
+ <link href="../css/trailblazer_main.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+
+<div id="main">
+ <div class="trail">
+ <div class="numbox">5</div>
+ <h2>Conversations</h2>
+ <img src="../img/header_line.gif" />
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ <p>
+ The hotel booking "wizard" is implemented by a conversation-scoped
+ stateful session bean. All Seam components are in the
+ conversation scope by default.
+ The <code>HotelBookingAction</code> maintains
+ state associated with the booking process in the Seam conversation
+ scope. This ensures that if the user is working in multiple brower
+ tabs or multiple brower windows, the various conversations are
+ completely isolated from each other.
+ </p>
+ <p>
+ To see this working in practice, right click on the "View Hotel" button
+ in the search screen and select "open in new tab" or "open in new window",
+ and try working on multiple hotel bookings simultaneously.
+ In the <a href="workspaceExp.html">next step</a>, we will discuss
+ Seam's built-in components to manage multiple concurrent conversations.
+ </p>
+
+<code class="block">
+ at Stateful
+ at Name("hotelBooking")
+ at LoggedIn
+public class HotelBookingAction implements HotelBooking
+{
+
+ @PersistenceContext(type=EXTENDED)
+ private EntityManager em;
+
+ @In
+ private User user;
+
+ @In(required=false) @Out
+ private Hotel hotel;
+
+ @In(required=false)
+ @Out(required=false)
+ private Booking booking;
+
+ @In(create=true)
+ private FacesMessages facesMessages;
+
+ @In(create=true)
+ private Events events;
+
+ @In
+ private HotelSearching hotelSearch;
+
+ @Logger
+ private Log log;
+
+ private boolean bookingValid;
+
+ @Begin
+ public void selectHotel(Hotel selectedHotel)
+ {
+ hotel = em.merge(selectedHotel);
+ }
+
+ public void bookHotel()
+ {
+ booking = new Booking(hotel, user);
+ Calendar calendar = Calendar.getInstance();
+ booking.setCheckinDate( calendar.getTime() );
+ calendar.add(Calendar.DAY_OF_MONTH, 1);
+ booking.setCheckoutDate( calendar.getTime() );
+ }
+
+
+ public void setBookingDetails()
+ {
+ Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
+ if ( booking.getCheckinDate().before( calendar.getTime() ) )
+ {
+ facesMessages.addToControl("checkinDate", "Check in date must be a future date");
+ bookingValid=false;
+ }
+ else if ( !booking.getCheckinDate().before( booking.getCheckoutDate() ) )
+ {
+ facesMessages.addToControl("checkoutDate", "Check out date must be later than check in date");
+ bookingValid=false;
+ }
+ else
+ {
+ bookingValid=true;
+ }
+ }
+
+ public boolean isBookingValid()
+ {
+ return bookingValid;
+ }
+
+ @End
+ public void confirm()
+ {
+ em.persist(booking);
+ facesMessages.add("Thank you, #{user.name}, your confimation number for #{hotel.name} is #{booking.id}");
+ log.info("New booking: #{booking.id} for #{user.username}");
+ events.raiseTransactionSuccessEvent("bookingConfirmed");
+ }
+
+ @End
+ public void cancel() {}
+
+ @Remove
+ public void destroy() {}
+}</code>
+
+ <p>
+ The conversation begins when the <code>@Begin</code> annotated
+ <code>selectHotel()</code> is called, and ends when
+ the <code>@End</code> annotated
+ <code>confirm()</code> or <code>cancel()</code> is called. Between the
+ <code>@Begin</code> and <code>@End</code> methods, the user can do
+ any number of things with the application (i.e., invoke any
+ event handler method or use the BACK button etc.) and the
+ <code>hotelBooking</code> maintains its state throughout the process.
+ When the <code>@End</code> method is called, Seam destroys this
+ component and avoids any memory leak.
+ </p>
+
+ <p>
+ However, none of the <code>HotelBookingAction</code> bean methods
+ may be called outside of a long-running conversation.
+ So if we try to use the
+ back button after the end of the conversation, Seam will redirect to the main page, with an
+ error message.
+ </p>
+
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ </div>
+</div>
+
+</body>
+</html>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/confirmExp.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/confirmExp.html (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/confirmExp.html 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <title>In-depth Explanation</title>
+ <link href="../css/trailblazer_main.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+
+<div id="main">
+ <div class="trail">
+ <div class="numbox">7</div>
+ <h2>Ending Conversations</h2>
+ <img src="../img/header_line.gif" />
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ <p>
+ The "Confirm" button is bound to the action method <code>confirm()</code>
+ of <code>HotelBookingAction</code>.
+ </p>
+
+<code class="block">
+<h:commandButton value="Confirm"
+ action="#{hotelBooking.confirm}"
+ id="confirm"/>
+</code>
+
+ <p>
+ The <code>confirm()</code> method is tagged with the <code>@End</code> annotation,
+ which ends the long-running conversation and results in all state associated with
+ the conversation being destroyed at the end of the request.
+ Since the <code>pages.xml</code> file specifies a redirect for this action, the state
+ will not be destroyed
+ until <em>after the redirect completes</em>. Note that even the success message
+ that we create using the built-in <code>facesMessages</code> component is transparently
+ propagated across the redirect!
+ </p>
+
+<code class="block">
+ @End
+ public void confirm()
+ {
+ if (booking==null || hotel==null) return "main";
+ em.persist(booking);
+ facesMessages.add("Thank you, #{user.name}, your confimation number " +
+ "for #{hotel.name} is #{booking.id}");
+ log.info("New booking: #{booking.id} for #{user.username}");
+ events.raiseEvent("bookingConfirmed");
+ }
+
+ @End
+ public void cancel() {}
+
+ @Destroy @Remove
+ public void destroy() {}
+}
+</code>
+
+ <p>
+ When the conversation state is finally destroyed, Seam calls the <code>@Destroy</code> method,
+ which results in removal of the SFSB.
+ </p>
+
+ <p>
+ Notice that the <code>HotelBookingAction.confirm()</code> method
+ raises a <code>bookingConfirmed</code> event before it finishes. The
+ event mechanism allows Seam components to communicate with each other
+ without direct coupling. In this case, the <code>BookingListAction</code>
+ component captures the <code>bookingConfirmed</code> event and refreshes
+ the existing booking list for the current user.
+ </p>
+
+<code class="block">
+public class BookingListAction implements BookingList, Serializable
+{
+
+ ... ...
+
+ @Factory
+ @Observer("bookingConfirmed")
+ public void getBookings()
+ {
+ bookings = em.createQuery("from Booking b where b.user.username = " +
+ ":username order by b.checkinDate")
+ .setParameter("username", user.getUsername())
+ .getResultList();
+ }
+}
+</code>
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ </div>
+</div>
+
+</body>
+</html>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/introExp.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/introExp.html (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/introExp.html 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <title>In-depth Explanation</title>
+ <link href="../css/trailblazer_main.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+
+<div id="main">
+ <div class="trail">
+ <div class="numbox">1</div>
+ <h2>What is JBoss Seam</h2>
+ <img src="../img/header_line.gif" />
+
+ <p>
+ <center>
+ <form>
+ <INPUT type="button" value="Close Window" onclick="window.close()">
+ </form>
+ </center>
+ </p>
+
+ <p>
+ EJB 3.0 and JSF are perhaps the most exciting new developments in the Java EE 5 platform.
+ Seam is an innovative new application framework that integrates the EJB 3.0 component model
+ with JSF as a presentation tier. Seam builds upon the standard extension points provided by
+ both specifications and provides a set of Java annotations that extends the standard
+ annotations defined by the EJB specification. In addition, Seam introduces several innovative
+ new ideas: managed conversations, declarative and contextual application state management,
+ bijection and integrated business process management.
+ </p>
+
+ <p>
+ Traditional web applications are incredibly vulnerable to bugs and performance problems
+ relating to state management. Developers are forced to handle issues like back button
+ navigation, multi-window browsing, session size management in an utterly ad-hoc fashion.
+ Access to transactional components from the web tier has also been problematic. J2EE
+ provided no way to have simultaneous access to state held in contexts associated with
+ the web request, and state held in transactional resources accessed via EJB. Finally,
+ J2EE had no first-class construct for representing state associated with a long-running
+ business process. Seam tackles all these problems, and provides a uniform model for
+ stateful components in Java EE 5.
+ </p>
+
+ <p>
+ Like all JBoss software, this entire software stack is free. The full source code of this
+ sample application is available in the <code>examples/booking</code> directory of the
+ <a href="http://www.jboss.com/products/list/downloads#seam">Seam distribution</a>.
+ <!--
+ There is even a
+ <a target="_blank" href="http://docs.jboss.com/TrailBlazer/seam-booking/Seam.htm">
+ 10-minute flash demo
+ </a>
+ showing how to build a Seam web application from ground up.
+ -->
+ </p>
+
+ <p>
+ <center>
+ <form>
+ <INPUT type="button" value="Close Window" onclick="window.close()">
+ </form>
+ </center>
+ </p>
+
+ </div>
+</div>
+
+</body>
+</html>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/loginExp.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/loginExp.html (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/loginExp.html 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <title>In-depth Explanation</title>
+ <link href="../css/trailblazer_main.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+
+<div id="main">
+ <div class="trail">
+ <div class="numbox">2</div>
+ <h2>What happens when you login?</h2>
+ <img src="../img/header_line.gif" />
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ <p>
+ The login page is defined using pure XHTML with JSF controls.
+ The form uses JSF EL value binding and method binding
+ expressions to refer to Seam components. For example,
+ <code>#{identity.username}</code> refers to a property of the
+ <code>Identity</code> component and <code>#{identity.login}</code>
+ refers to a method of the <code>Identity</code> component.
+ </p>
+
+<code class="block">
+<div>
+ <h:outputLabel for="username">Login Name</h:outputLabel>
+ <h:inputText id="username" value="#{identity.username}" />
+</div>
+<div>
+ <h:outputLabel for="password">Password</h:outputLabel>
+ <h:inputSecret id="password" value="#{identity.password}" />
+</div>
+
+... ...
+
+<div class="buttonBox">
+ <h:commandButton id="login"
+ action="#{identity.login}"
+ value="Account Login" />
+</div>
+</code>
+
+ <p>
+ After logging in, the <code>User</code> enity bean is mapped to the Seam
+ context variable named <code>user</code> bean via the
+ <code>@Name</code> annotation. <code>User</code> is
+ a session scoped bean, meaning that the <code>user</code>
+ component value is retained for the entire session for
+ each user. You might also notice there are validation annotation
+ on the data properties. We will discuss those annotations in the
+ <a href="registerExp.html">next step</a>.
+ </p>
+
+<code class="block">
+ at Entity
+ at Name("user")
+ at Scope(SESSION)
+public class User implements Serializable {
+ private String username;
+ private String password;
+ private String name;
+
+ @NotNull
+ @Length(min=5, max=15)
+ public String getPassword() {
+ return password;
+ }
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+
+ @Id
+ @Length(min=4, max=15)
+ @Pattern(regex="^\\w*$", message="not a valid username")
+ public String getUsername () {
+ return username;
+ }
+ public void setUsername (String username) {
+ this.username = username;
+ }
+
+ // ... ...
+}
+</code>
+
+ <p>
+ Seam comes with its own Security framework, based on JAAS. It allows you
+ to perform user authentication by configuring your own authentication method
+ in <code>components.xml</code>.
+ </p>
+
+<code class="block">
+ <security:identity authenticate-method="#{authenticator.authenticate}"/>
+</code>
+
+ <p>
+ <code>AuthenticatorAction</code> is an EJB 3.0 session bean mapped
+ to the Seam context variable named <code>authenticator</code>. When
+ the login button is clicked, the JSF method binding
+ <code>#{identity.login}</code> is evaluated, and based upon the previous configuration, the
+ <code>authenticate()</code> method is invoked upon <code>AuthenticatorAction</code>.
+ </p>
+
+<code class="block">
+ at Stateless
+ at Scope(EVENT)
+ at Name("authenticator")
+public class AuthenticatorAction implements Authenticator
+{
+ @PersistenceContext EntityManager em;
+
+ @Out(required=false, scope = SESSION)
+ private User user;
+
+ public boolean authenticate()
+ {
+ List results = em.createQuery("select u from User u where" +
+ " u.username=#{identity.username}" +
+ " and u.password=#{identity.password}")
+ .getResultList();
+
+ if ( results.size()==0 )
+ {
+ return false;
+ }
+ else
+ {
+ user = (User) results.get(0);
+ return true;
+ }
+ }
+}
+</code>
+
+ <p>
+ The <code>@Out</code>
+ annotation indicates the <code>AuthenticatorAction</code> bean can change the
+ value of the <code>user</code> context variable and make the new instance
+ available to other session beans and JSF pages. The query expression
+ makes use of a special syntax in Seam that allows EL expressions to
+ serve as query parameters. This query references the <code>identity</code> component,
+ a built-in Seam component that provides security functionality.
+ </p>
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ </div>
+</div>
+
+</body>
+</html>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/mainExp.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/mainExp.html (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/mainExp.html 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,214 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <title>In-depth Explanation</title>
+ <link href="../css/trailblazer_main.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+
+<div id="main">
+ <div class="trail">
+ <div class="numbox">4</div>
+ <h2>Stateful components</h2>
+ <img src="../img/header_line.gif" />
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ <p>
+ The hotel search page is backed by the a stateful session bean named
+ <code>hotelSearch</code> and implemented by the class
+ <code>HotelSearchingAction</code>.
+ </p>
+
+<code class="block">
+<h:inputText id="searchString" value="#{hotelSearch.searchString}" >
+ <a:support event="onkeyup" actionListener="#{hotelSearch.find}"
+ reRender="searchResults"/>
+</h:inputText>
+
+<h:selectOneMenu value="#{hotelSearch.pageSize}" id="pageSize">
+ <f:selectItem itemLabel="5" itemValue="5"/>
+ <f:selectItem itemLabel="10" itemValue="10"/>
+ <f::selectItem itemLabel="20" itemValue="20"/>
+</h:selectOneMenu>
+</code>
+
+ <p>
+ When the button is clicked, the form is submitted and JSF sets the value
+ of the text box and drop down menu onto the <code>searchString</code> and
+ <code>pageSize</code> attributes of <code>HotelSearchingAction</code>
+ before calling the <code>find()</code> action listener method. We've used a
+ session-scope stateful bean because we want it's state (the search results) to
+ be held in the session between requests to the server. The <code><a:support></code>
+ tax specfies that after a keypress, the contents of the <code><a:outputPanel></code> whose
+ id is <code>searchResults</code> should be rerendererd. This is done through an AJAX-style
+ call back to the server with no additional code required of the application.
+ </p>
+
+<code class="block">
+ at Stateful
+ at Name("hotelSearch")
+ at Scope(ScopeType.SESSION)
+ at LoggedIn
+public class HotelSearchingAction implements HotelSearching
+{
+ @PersistenceContext
+ private EntityManager em;
+
+ private String searchString;
+ private int pageSize = 10;
+ private int page;
+
+ @DataModel
+ private List<Hotel> hotels;
+
+ public void find()
+ {
+ page = 0;
+ queryHotels();
+ }
+ public void nextPage()
+ {
+ page++;
+ queryHotels();
+ }
+
+ private void queryHotels()
+ {
+ hotels = em.createQuery("select h from Hotel h where lower(h.name) " +
+ "like #{pattern} or lower(h.city) like #{pattern} " +
+ "or lower(h.zip) like #{pattern} or " +
+ "lower(h.address) like #{pattern}")
+ .setMaxResults(pageSize)
+ .setFirstResult( page * pageSize )
+ .getResultList();
+ }
+
+ public boolean isNextPageAvailable()
+ {
+ return hotels!=null && hotels.size()==pageSize;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ @Factory(value="pattern", scope=ScopeType.EVENT)
+ public String getSearchPattern()
+ {
+ return searchString==null ?
+ "%" : '%' + searchString.toLowerCase().replace('*', '%') + '%';
+ }
+
+ public String getSearchString()
+ {
+ return searchString;
+ }
+
+ public void setSearchString(String searchString)
+ {
+ this.searchString = searchString;
+ }
+
+ @Remove
+ public void destroy() {}
+}</code>
+
+ <p>
+ The <code>find()</code> method retrieves a list of hotels from the database and
+ initializes the <code>hotels</code> field. The <code>hotels</code> field is marked
+ with the <code>@DataModel</code> annotation, so when the <code>find()</code> method
+ returns, Seam outjects an instance of <code>ListDataModel</code> to a context
+ variable named <code>hotels</code>. So, when the search page is re-rendered, the
+ result list is available to the JSF <code>dataTable</code>.
+ Each row of the data table has an associated command button or link
+ (see below).
+ </p>
+
+<code class="block">
+<h:outputText value="No Hotels Found"
+ rendered="#{hotels != null and hotels.rowCount==0}"/>
+<h:dataTable value="#{hotels}" var="hot" rendered="#{hotels.rowCount>0}">
+ <h:column>
+ <f:facet name="header">Name</f:facet>
+ #{hot.name}
+ </h:column>
+ <h:column>
+ <f:facet name="header">Address</f:facet>
+ #{hot.address}
+ </h:column>
+ <h:column>
+ <f:facet name="header">City, State</f:facet>
+ #{hot.city}, #{hot.state}
+ </h:column>
+ <h:column>
+ <f:facet name="header">Zip</f:facet>
+ #{hot.zip}
+ </h:column>
+ <h:column>
+ <f:facet name="header">Action</f:facet>
+ <s:link value="View Hotel"
+ action="#{hotelBooking.selectHotel(hot)}"/>
+ </h:column>
+</h:dataTable>
+</code>
+
+ <p>
+ The "View Hotel" link is the above mentioned command link associated
+ with each row of the data table. It is implemented
+ using a Seam <code><s:link></code>, which is part of Seam's
+ extension of JSF controls.
+ This JSF control let's us call an action, and pass a request parameter, without
+ submitting any JSF form. The advantage of <code><s:link></code> is that,
+ unlike a standard JSF <code><h:commandLink></code>, there is no JavaScript
+ used, so "open link in new tab" works seamlessly.
+ </p>
+ <p>
+ When this link is clicked, the <code>selectHotel()</code> method of the
+ <code>HotelBookingAction</code> bean is called with the <code>hot</code>
+ parameter that is specified in the query. The parameter values are evaluated
+ at invocation time, not when the link is generated, so the <code><s:link></code>
+ tag adds a dataModelSelection parameter that indicates the value of the
+ <code>hot</code> loop variable for the given row.</p>
+ <p> The <code>selectHotel()</code> method merges the selected hotel into
+ the current persistence context (in case the same
+ hotel has been accessed before in the same session),
+ and starts a Seam conversation. We will discuss Seam conversations
+ in the next step.
+ </p>
+
+<code class="block">
+ at Stateful
+ at Name("hotelBooking")
+ at LoggedIn
+public class HotelBookingAction implements HotelBooking
+{
+
+ ... ...
+
+ @Begin
+ public void selectHotel(Hotel selectedHotel)
+ {
+ hotel = em.merge(selectedHotel);
+ }
+}
+</code>
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ </div>
+</div>
+
+</body>
+</html>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/registerExp.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/registerExp.html (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/registerExp.html 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,229 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <title>In-depth Explanation</title>
+ <link href="../css/trailblazer_main.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+
+<div id="main">
+ <div class="trail">
+ <div class="numbox">3</div>
+ <h2>What happens in the registration process?</h2>
+ <img src="img/header_line.gif" />
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ <p>
+ The register.xhtml JSF form captures the user input for new account
+ registration. It validates the user input, binds the data to a
+ Seam data component, and invokes a Seam UI event handler method
+ when the form is submitted.
+ </p>
+
+<code class="block">
+<s:validateAll>
+<div class="entry">
+ <div class="label">
+ <h:outputLabel for="username">Username:</h:outputLabel>
+ </div>
+ <div class="input">
+ <h:inputText id="username" value="#{user.username}"/><br/>
+ <span class="errors"><h:message for="username" /></span>
+ </div>
+</div>
+<div class="entry">
+ <div class="label">
+ <h:outputLabel for="name">Real Name:</h:outputLabel>
+ </div>
+ <div class="input">
+ <h:inputText id="name" value="#{user.name}" /><br/>
+ <span class="errors"><h:message for="name" /></span>
+ </div>
+</div>
+</s:validateAll>
+
+... ...
+
+ <div class="input">
+ <h:commandButton value="Register"
+ action="#{register.register}"
+ class="button"/>
+ <h:commandButton value="Cancel" action="login" class="button"/>
+ </div>
+</code>
+
+ <p>
+ The form fields are bound to properties of a Seam component named
+ <code>user</code> via JSF EL value binding expressions such as
+ <code>#{user.username}</code>. The form submit button is bound
+ to the <code>register()</code> method of the Seam component named
+ <code>register</code> using the JSF method binding expression
+ <code>#{register.register}</code>.
+ </p>
+
+ <p>
+ Notice that the input fields are enclosed by a <code><s:validateAll</code>
+ tag. This tag is part of Seam's extension to JSF. It tells the Seam
+ runtime to validate those input fields when the form is submitted.
+ The validation conditions are specified on the entity bean classes
+ those input fields map to (e.g., here the validation condition is
+ on the <code>User</code> class, see later).
+ This JSF form also includes <code><h:message></code> tags that
+ will display the results of any JSF validation failures.
+ </p>
+
+ <p>
+ The <code>User</code> class is an EJB 3.0 entity bean with a
+ <code>@Name</code> annotation that binds the bean instance to a
+ context variable named <code>user</code>. In addition to the standard
+ EJB 3.0 O/R mapping metadata, this bean features several Hibernate
+ Validator annotations such as
+ <code>@NotNull</code>, <code>@Length</code>. Due to the
+ <code><s:validateAll</code> tag in the form, these constraints are
+ automatically validated by Seam when the form is submitted. If the user
+ enters invalid data in the JSF form, the form will be redisplayed with
+ error messages.
+ </p>
+
+<code class="block">
+ at Entity
+ at Name("user")
+ at Scope(SESSION)
+public class User implements Serializable
+{
+ private String username;
+ private String password;
+ private String name;
+
+ public User(String name, String password, String username)
+ {
+ this.name = name;
+ this.password = password;
+ this.username = username;
+ }
+
+ public User() {}
+
+ @NotNull
+ @Length(max=100)
+ public String getName()
+ {
+ return name;
+ }
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ @NotNull
+ @Length(min=5, max=15)
+ public String getPassword()
+ {
+ return password;
+ }
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ @Id
+ @Length(min=5, max=15)
+ public String getUsername()
+ {
+ return username;
+ }
+ public void setUsername(String username)
+ {
+ this.username = username;
+ }
+
+}</code>
+
+ <p>
+ <code>RegisterAction</code> is an EJB 3.0 stateful session bean
+ bound to the Seam context variable named <code>register</code>.
+ The <code>register()</code> method is invoked when the form is
+ submitted.
+ </p>
+
+<code class="block">
+ at Stateful
+ at Scope(EVENT)
+ at Name("register")
+public class RegisterAction implements Register
+{
+
+ @In
+ private User user;
+
+ @PersistenceContext
+ private EntityManager em;
+
+ @In(create=true)
+ private transient FacesMessages facesMessages;
+
+ private String verify;
+
+ public String register()
+ {
+ if ( user.getPassword().equals(verify) )
+ {
+ List existing = em.createQuery("select username from User " +
+ "where username=:username")
+ .setParameter("username", user.getUsername())
+ .getResultList();
+ if (existing.size()==0)
+ {
+ em.persist(user);
+ return "login";
+ }
+ else
+ {
+ facesMessages.add("username #{user.username} already exists");
+ return null;
+ }
+ }
+ else
+ {
+ facesMessages.add("re-enter your password");
+ verify=null;
+ return null;
+ }
+ }
+
+ public String getVerify()
+ {
+ return verify;
+ }
+
+ public void setVerify(String verify)
+ {
+ this.verify = verify;
+ }
+
+ @Destroy @Remove
+ public void destroy() {}
+}</code>
+
+ <p>
+ The <code>@In</code> annotations inject Seam components into the <code>RegisterAction</code>
+ bean. The <code>user</code> component is our entity bean, of course. The <code>facesMessages</code>
+ component is a built-in Seam component that makes it very easy to display templated and localized
+ messages to the user, even when redirect after post is used.
+ </p>
+
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+
+ </div>
+</div>
+
+</body>
+</html>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/workspaceExp.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/workspaceExp.html (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/exp/workspaceExp.html 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <title>In-depth Explanation</title>
+ <link href="../css/trailblazer_main.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+
+<div id="main">
+ <div class="trail">
+ <div class="numbox">6</div>
+ <h2>The Workspace List</h2>
+ <img src="../img/header_line.gif" />
+
+ <p>
+ <center>
+ <form>
+ <INPUT type="button" value="Close Window" onclick="window.close()">
+ </form>
+ </center>
+ </p>
+
+ <p>
+ The workspace list allows the user to switch between multiple
+ conversations from the same browser tab. There is no Java code
+ to write, just the following JSF code to include:
+ </p>
+
+<code class="block">
+<h:dataTable value="#{conversationList}" var="entry">
+ <h:column>
+ <h:commandLink action="#{entry.select}" value="#{entry.description}"/>
+
+ <h:outputText value="[current]" rendered="#{entry.current}"/>
+ </h:column>
+ <h:column>
+ <h:outputText value="#{entry.startDatetime}">
+ <f:convertDateTime type="time" pattern="hh:mm"/>
+ </h:outputText>
+ -
+ <h:outputText value="#{entry.lastDatetime}">
+ <f:convertDateTime type="time" pattern="hh:mm"/>
+ </h:outputText>
+ </h:column>
+</h:dataTable>
+</code>
+
+ <p>
+ We do need to specify what text will be displayed by <code>#{entry.description}</code>.
+ We do this by setting the <code>description</code> value for each page in <code>pages.xml</code>.
+ </p>
+
+<code class="block">
+<pages>
+ <!-- ... -->
+ <page view-id="/hotel.xhtml"
+ conversation-required="true"
+ login-required="true">
+
+ <description>View hotel: #{hotel.name}</description>
+ <!-- ... -->
+ </page>
+
+ <page view-id="/book.xhtml"
+ conversation-required="true"
+ login-required="true">
+
+ <description>Book hotel: #{hotel.name}</description>
+ <!-- ... -->
+ </page>
+<pages>
+</code>
+
+ <p>
+ Note that you don't need the <code>pages.xml</code> file if you don't want the
+ workspace list in your application.
+ </p>
+
+ <p>
+ <form>
+ <input type="button" value="Close Window" onclick="window.close()"/>
+ </form>
+ </p>
+
+ </div>
+</div>
+
+</body>
+</html>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/home.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/home.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/home.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib">
+<h:head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <title>JBoss Suites: Seam Framework</title>
+ <link href="css/screen.css" rel="stylesheet" type="text/css" />
+</h:head>
+<body id="pgHome">
+<f:view>
+<div id="document">
+ <div id="header">
+ <div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div>
+ </div>
+ <div id="container">
+ <div id="sidebar">
+ <h:form id="login">
+ <fieldset>
+ <div>
+ <h:outputLabel id="UsernameLabel" for="username">Login Name</h:outputLabel>
+ <h:inputText id="username" value="#{identity.username}" style="width: 175px;"/>
+ <div class="errors"><h:message id="UsernameMessage" for="username"/></div>
+ </div>
+ <div>
+ <h:outputLabel id="PasswordLabel" for="password">Password</h:outputLabel>
+ <h:inputSecret id="password" value="#{identity.password}" style="width: 175px;"/>
+ </div>
+ <div class="errors"><h:messages id="messages" globalOnly="true"/></div>
+ <div class="buttonBox"><h:commandButton id="login" action="#{identity.quietLogin}" value="Account Login"/></div>
+ <div class="notes"><s:link id="register" view="/register.xhtml" value="Register New User"/></div>
+ <div class="subnotes">
+ Or use a demo account:
+ <ul>
+ <li>gavin/foobar</li>
+ <li>demo/demo</li>
+ </ul>
+ </div>
+ </fieldset>
+ </h:form>
+ </div>
+ <div id="content">
+ <div class="section">
+
+ <h1>About this example application</h1>
+
+ <p>
+ This sample application demonstrates how easy it is to develop stateful web
+ applications using JBoss Seam. Just register, login, and book a room to see
+ Seam in action. Throughout the application you'll see popup links like
+ the ones at the bottom of this page. Click them to see how the application
+ works under the hood.
+ </p>
+
+ <p>
+ Note: Please do NOT enter personal information or your credit card number in
+ this sample application.
+ </p>
+
+ <p>
+ <a href="#" onclick="window.open('exp/introExp.html','exp','width=752,height=500,scrollbars=yes');">
+ What is JBoss Seam?
+ </a>
+ </p>
+
+ <p>
+ <a href="#" onclick="window.open('exp/loginExp.html','exp','width=752,height=500,scrollbars=yes');">
+ What happens when I login?
+ </a>
+ </p>
+
+ </div>
+ </div>
+ </div>
+ <div id="footer">Created with JBoss EJB 3.0, Seam, JSF (Mojarra), and Facelets</div>
+</div>
+</f:view>
+</body>
+</html>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/hotel.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/hotel.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/hotel.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,56 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ template="template.xhtml">
+
+<!-- content -->
+<ui:define name="content">
+
+<div class="section">
+ <h1>View Hotel</h1>
+</div>
+
+<div class="section">
+ <ui:include src="hotelview.xhtml"/>
+
+ <div class="buttonBox">
+ <h:form id="hotel">
+ <h:commandButton id="bookHotel" action="#{hotelBooking.bookHotel}" value="Book Hotel"/>
+  
+ <h:commandButton id="cancel" action="#{hotelBooking.cancel}" value="Back to Search"/>
+ </h:form>
+ </div>
+
+
+</div>
+
+</ui:define>
+
+<!-- sidebar -->
+<ui:define name="sidebar">
+
+<h1>Don't kill your database</h1>
+<p>
+ Keeping conversational state in memory in the middle tier is a great way to
+ improve your application's scalability. It saves hitting the database every
+ time we refresh a page, to re-read the data we were just looking at five
+ seconds ago. By using Seam's conversation context, we get a natural cache
+ of data associated with the what the user is currently doing. By nature,
+ this cache has a more efficient eviction policy than the MRU-type algorithms
+ used by a typical second-level data cache in an O/R mapping engine like
+ Hibernate (at least for some kinds of data). Of course, you should use
+ a clever combination of second-level caching and conversational data
+ caching to achieve the best performance for your application.
+</p>
+<p>
+ <a href="#" onclick="window.open('exp/bookingExp.html','exp','width=752,height=500,scrollbars=yes');">
+ How does the hotel booking wizard work?
+ </a>
+</p>
+
+</ui:define>
+
+</ui:composition>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/hotelview.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/hotelview.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/hotelview.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,45 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib">
+
+ <s:decorate id="DecorateName" template="display.xhtml">
+ <ui:define name="label">Name:</ui:define>
+ #{hotel.name}
+ </s:decorate>
+
+ <s:decorate id="DecorateAddress" template="display.xhtml">
+ <ui:define name="label">Address:</ui:define>
+ #{hotel.address}
+ </s:decorate>
+
+ <s:decorate id="DecorateCity" template="display.xhtml">
+ <ui:define name="label">City:</ui:define>
+ #{hotel.city}
+ </s:decorate>
+
+ <s:decorate id="DecorateState" template="display.xhtml">
+ <ui:define name="label">State:</ui:define>
+ #{hotel.state}
+ </s:decorate>
+
+ <s:decorate id="DecorateZip" template="display.xhtml">
+ <ui:define name="label">Zip:</ui:define>
+ #{hotel.zip}
+ </s:decorate>
+
+ <s:decorate id="DecorateCountry" template="display.xhtml">
+ <ui:define name="label">Country:</ui:define>
+ #{hotel.country}
+ </s:decorate>
+
+ <s:decorate id="DecorateNightlyRate" template="display.xhtml">
+ <ui:define name="label">Nightly rate:</ui:define>
+ <h:outputText id="HotelPrice" value="#{hotel.price}">
+ <f:convertNumber type="currency" currencySymbol="$"/>
+ </h:outputText>
+ </s:decorate>
+
+</ui:composition>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/bg.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/bg.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/bg.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,3 @@
+GIF89aø
+
+
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/btn.bg.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/btn.bg.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/btn.bg.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1 @@
+GIF89a
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cal-next.png
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cal-next.png (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cal-next.png 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,6 @@
+‰PNG
+
+
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cal-prev.png
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cal-prev.png (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cal-prev.png 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,5 @@
+‰PNG
+
+
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cnt.bg.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cnt.bg.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/cnt.bg.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1 @@
+GIF89a
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/dtpick.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/dtpick.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/dtpick.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,2 @@
+GIF89a
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.ad.jpg
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.ad.jpg (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.ad.jpg 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,391 @@
+ÿØÿà
+
+
+
+
+
+
+
+ÿÂ
+
+ljAAX á8Òƒ„æ(9©Iœ‘ó9ˆ
+DSOiô¤©–”HK„ƒbqª,,´*âMˆhÞ)ÜÕSh p"Æ,hBÉÐààPx<'!ÈàFyþê»H°ËK,êQvà¶rCNiP¡‡ÔŒrµ$»G•ìbqHÆfGpë¤Tä’HrK2¤(EH$& ñ+iAÂ’¦z‘§N‡1Äàš})îH¹Ä(”8fÀËP²±¦à—š€[Šzq‚™J˜LˆÁÁÁCÄàxs8\aßÏ÷ÇKŸÉÜ9!¥ ÌÃh,¾jEVž—#Øð{j—Ÿs页ª±èxsÒ¡£ŠH‰'¾C¤à‘''"DˆäÑ b&Ø¢A²X±q¶ú“®Ó9ªd%Zàb óÐõ;*ãM¨@œE8¢ª`ø&”¬lbƒÈ‰‘Âààæp¸8888<³ÐäqW8meðÁÚ|V‹*%¥Y†¶ùhÓ‡kèò>‡ƒÃóþ]t:NŸhzo–ùnc´”%&¨PQ801CÍm´Î
+q&Ôpѵ;¦‚"ú²¢Gm€àsH1Å0pps88JŽùï7ã³Îøj‹\狲ŠÒæäCZÂÕ½
+eÇ¡Êö=Ž#Ïù¶Ñi:maààroC“sNB°|ì½3Pp*j…kƒ•²k}¶J
+<{®7[Eá:}±de¨êH›ƒöÊÃ\§¬Ôœae¨êv:q&Ðj8
+jÆò£.0@¼Ó,¶…¶‚ƒ„ƒ“%ÁÁÌ„!„ N!ð(e}E|nÛ;à9¬ÎØÔiXïok2©Ðaª9²ó»™ô<
+??çÓGs¦ÖÇ!Àä<nCƒ¤ ÄÑhßiÀ©+81YhÙ{ñp(gxú&Âë)Þ£Ûæ„ÎÆVæ‰ÒO×+
+q"³QF¨\µ-@ËA¦áD`Ô48e9#\|æ%L‰eç¤ÉÊ‚e¸zÂ>B‰ÌH›C)èr([åwÚ´³;eI¦r+³Î÷|ú[@¬Ã–ƒcPÒÐue%%cÃϰ½%ΣIPx(<Cš¬’ƒ3ÐäqÁÈáôŠ¼ôj{rT(Póí&YNé-¸1PyØêì·ÂËlJ¼ä©lÒ'P¹è&z 2¨Q5
+Nd×ô1ápZsôÏCZÎz@¢ZFÈØäp(pp(¦hÚ‡´Ç%§"<Ó·%Œ®ëà6–gl¨´ÎEg§é|{…9l(cZŒä¡àær<÷7¥¥¨´á8CØä†
+üj¦OIÎ*»IQɨ"1yè‰î4ÉÂáå9ö7+éÜ)ÐéŒj„ÏHô<âôÏ™Áv‰²*±3Ð<ônB6! [™6ÃÃûñAp[su6lšlÄE*Ò&£b¦¢àPcNÒQQ¬¼—²Žõ*ÝöV ],ÎÙPi›Õتô¾M
+—Ía–(æ¬÷É-YDéò¼½N‘šzOE\•šrmy´4grÕ_¿ÀHû›{<îlj¢²ºæÉ47†wH^}´|úNØZ=0ŽhHÒ6õž‡œV™ó8eÇ5z žg¨“P*ƒP P¤Ûô0Ap[ót—&š!BX¶AJQR‚¦”§"'š"(™©¥å»y.1½6 M,ÖÙguÍêìSô®]Nƒ™‡ZFZx7nxm
+rDÔØmSeËZ6¬™LMzs^×4\ÛÂÖ.—\¦éņ«ùÒdû:\éûbVw\½}C§l-á¡cHÛÖzqZgÌàIm‡Øùhz‰5¸A€Ôpç$›ÎŸ»”bK½çÚáÍyÏK„nMÀ¨Pr9¤pKD’§*$ àÀú\*;œoK¨K5¶Y½s|݈ý'›Ss˜u¤a_¢!í„t„Ó6ŒœtÒJÎ{ÏQ†¤Ågõne#¼Þ)ɕɨ}¸ÅR³Q„’Ѩ³ÚÎ4·¨Ìé”Nn¹·»ÃQiÚ¥¤¼cLHÒZžï<ÝrPàdÓaÇ64X± ‘cMA.6!JVw–§ÑààñùßÖb'¼èqßÃtê²çÖ&šÄg¤ôÈD¢|9G"‚£éqp\ãz¬mBjY³Ìë“æíèÜÚ›Va–
+Íi®%gDu(ZìèCBI‘ÉJ7*nb²Ü=qpZÅÄ'“@‰®A24·Ï[#!®:ëÁ8úäçÜ:-Ñ£¼#(Y±UÊÑúd~¹yÏpç-Ncg ‘açbÅÁ$cb|‚Eo¦Z?C‡‘ãsÓëë tŠ^}ü*ºí9¶‚¥Àà‘ „>’E=ÁÀ¡ôxxw8Þ»pKK1¶yms’jÑW¢ádçJ,1¤mTíYZé•v¹“.ù‰• L•*4L‰ µç3-ÅÛMX1aË4Í7H¯¤%¨ÄÉÒÓ=×,ÝæmM¯/EŸ>ÁQl-%ãBEˆ[Àº‹
+r´Ûœ›ÍÍ"p«,<õ;* q&Äù
+ßLtÜj,¶ö™øíáUÙkͬ4”‡¥ =9„–’)Àä(<X?GBçÙáNcéeµŒ®¹½U¢¯IʤÆøX
+±4„š°Š|!l…a^‹†u,–Ú|hà*P]…cÑG”»Irayýd¤¬“”ª$[RE¦¸2“Åmϵ®ZŒ+ai/(Šl5JTŸ®Vûó•y¨¹ª5-C‹*q&ÔÑŠãLo»xø<ÂwÔ)Ñ8<¥ôEÍÑNCÐàP{Wúämç[ž‚Å°s
+×Lš6£Êúñà¹Æ÷Sie¶ŒŽÙÉ5i7é°;¬Œü¬:,¡¾"ÖeF² Œv¦Þ Iå÷ªeú~YÜüý òõC¤Ü°#CÚ"Z9.n¨¶Ë²Ú4̼ UM¾:3vÄi/(
+l%R4c›²ºÛšz”§Øk[–¢MA-‰±>L²nµÆû»‹ƒ-ŽôvjáŠè½3…<–±gTÄ;}2Óï•«)Ì#•¥Dîc¢ùž:8.1Ó{ƒp-,¦ÓÛ)¢í¢ýMÀp󖪈iYERí•F™Øã¥Î;Ôuò?=áFŠóv=`e¼÷É]¾óô;=Û4’æ’\-‹|ŸDYè;7Ô²æVŠ©/
+'ÇQnOOUxŽ¨9°•+GÔ^m…¦¹=®
+©Å5Pé]ž£KblM,›Ý1½ô8¸3YmUFžS¬žå¬jšµ#OIÌhW-'rŒpJ'‰¢ù«>„eÆ:z;{9¬¶Ë¶RMØÅúv™g³«Äú£!7Ó<nzÖ2×Lé³ÐüïuÓË‹Ëa“³¨å£g[-9²ÓWÕ4±wŽ]ZQq¶5ñ{]ðÃcÑÞÏ|29i¬Ó,æ[
+Ùûc.åå¥ÿ
+L Êe®—\À©¶jY¬Î=·¯Ó†wy”æAT§/TYé¢îãX§…lÛpÔs²¸:¦³¯ôÉñJg!ÔIÅ.$á–:¨•Låãþ*
+÷†+Ò2z½33lÜׂPT(£l2«pÚ{ƒª[ŽZ&ˆð
+ŸžZz;x’Œž€4‰€nÙùü³äÓE.’DÕm+!;:…Ãz j ‡ÅS`ÓS))â6Ý$ñ
+æÃ
+›Ž¡ºx¢dP0Ϩ‡Ÿ Øm³Ò@p€ªŸ6È?F'
+ÕÌÉó'!Aƒd‘&Á¢›Y!Û/ô9\7ËÑruú%å ×"t•iBA8J†·
+D¡#—YZ:9»®[r®jŸ¢ÎÜN£Tõ7ŸTX$SN‚„Œá ÆÎ šbé•ð³õTtÁo}xéuÊZž1Âæ"1UTá¨ê¯ïKh ø\?ÖœœÉ´PT½7*šhôÇdJ§AñCE‡´¿78žZ0ø¥›‰§ŠTΓyËy-êoé8sÌ%ˆc74
+i
+
+8ºÞ‡!Á"rÈà‘4/Nq^eg¡XìÆ´·3OTZ"Êhõ”MX¥é<ZævyóOçÁâp 4Ș0ãA€8óÕn©$šr-²#¤•¨¦¥–BR‚5MqmYØ9 Y)ÌÍ8%€éù×ne²ŒA²^¸½¼ž„mÆœ2ÇšŠ*ArÖTç ‘wÚbÄÚ†’àPàòˆìz$CÐæ(¸PÒ§éÂxØŒ´tÒ´ÊBk„Ä_ãvrèõÏ#Õ„ª´˜i¨ÃM4ŒÈîóÆþ§‡?…Ãh˜Æ2 0+c6±êa£“.^I³14vtS›4¦©&¦D£`µ×8-)êdi’“„¬àpœÅiC™À¢á 46"$àš*zš‰Ðª‚AQ¶
+Âäs9
+ÎGŒì(Ü…'"oDŠ•8颢3¥O™"Q\YJ»ÍÐõóä:16ki˾ç1D¡Ö³SÓë“Æàp•ˆŽ6D6‹“‰:IÒ§-O©¶¼äÒ%¸(IÀúJ׃Sb[éBŸ!,è‹Emš&ˆVKICƒƒ„¡ÁÁÌàæp p ¢N¡T‰œ&¡£8%°lC`(yìt¸oIàƒPr+wÆ·|êß› ÜéPñ¼Bi™·“[Yø·f>Ëò-µ
+cÇ]gG¤O0clŽ
+pü¬-ÁýTÁzÅ«·½µõ«ö›³PßnBoÈš›òD7Ë›ºØÛÛB„ð”Ô31Ú\ùC›”ª PMiCJ®W'”äQÉ™/B•¥1‘'¶
+ÓÜ¢¥ê‚jbn%9=<§QÉ›7CŽÝu-Õø`òqèŒÐ„náÞ£w22ÊsXbΛŸš×9¦€õËátR2Vaÿ
+¸äàœ£UEE@¡Ë w°ùGýàÉE»ã¸÷ËE¥1¿”þp
+·ÜÑQã»xzíÿ
+û=1íb†º˜Í/v‹½d<jœÛˆ^ûªzˆ“B*o21žm
+g·Óù
+H¤kSâÏF1pùO7÷¥VnÔË.ã˶÷G °0¨<CœœŠ(äƒÎn*?ó1œ7O">O•Lâ›ÜðvïwED|·’›ÖÇþÁƒ–<53[ŸmÔû‹³üíêsaræ§ó¡ ‰Ýd”MþHÙü”r‹”EµL40ÜÅý\
+á®k¿‰t§Žb!RÚ-%mþoÇ•n?´p›
+[+¸‘µ¹jŽÊêGþŠù~–ý~›pÇn÷j‰Þ
+ÛÛ¦u³×ÑQ]ܶµ¯{íÙF[´ê,=Û±üÝ¿Æê®-Ìn¥£b1¸–ÛZ9¾–Áª}°»Ðìt¼‹o°YÌélç
+13¶c{ÔÑþpC¬‹W÷4ɸ“#SN¥*ï··©>µ´Œ´[x'òmÏöŠ*bª‚·‚™J‘©è£’ßÍo„ð¿»ðèÏbí’9íŽW
+O¥Õ½Ë%Ø.Ú×_ÑÞÑ»5ùu¾Â+
+¤q®Ûi4`ÓQï C“›W°§Ï¿ÝQQ;Áºûe[RYvÎêäB™“:(ÚÕ
+Ýü×sM·€Ü:]1DÍ®_Õ®m¥ß6û»«û»]ÂІM<¯øæòÖ6iu¾ïñÚ¬¯ívé¦ÜusÖòZIvÛ+K;ûÕy
+Í¢.Þ-ö¨a’yß°îqµtUé–âÆkbøb.sVl;‹…ÄqµöÖ[…žË;ç’j°&ìîýL¶óÛ^ov·[ͥ͡‰·¾m³~›uÃä
+wã{mss³zûI?a›ƒÛ;¦c¢±Ü&kí¯›-ÅŒ¬V툪V¢µ¨¢â‹Š.ONEUT(;±JßSƒü—Ĥ©hXÃÁ•Üªˆ¨o,>Ú–µ«šä¬}Í0wƒpöØ7ǺÝ6Ú
+º{ymî¼
+¹¹ÿ
+)¹Klçëû.4HóU86´#
+Yå™Ü”Tsß. M•Ni'°ôÛIŠ}¬ŒQC¸E2w«à¿k~Õÿ
+féÃ$í©ˆ¼(6«û…kbßäJ×ÅL¥rM#cÖBP»ˆ/R‹ž›#õÀÌ-NÜ`
+çscš9‚9Æ?#âxhZÜ™U¡ÎŽp©ù„ÜF\¥†wF>?¼93âÛ±Mø–â™ñ+´ÏŠÊ{“b
+n‹ˆ,T)Ü–´ªq¢–V’@c9*æª
+ZPjÒ¹-L¿^ªÝ>êßKA~m(²«°–Î.vÝ Zm6„?j°"{MšHÔÆK+¾?y*°Ûî-$Ãä^?TTZJ1¹v^»]‡/Nå¸[ll®¶¸C¨'pÉ#“!¸znÛxQÚäÔÛ;”ݲü–m7kô³”Ý£³Â똘øªŒ—ˆ-×n0€j.TdªªªÔµ*Jª¸‚´®ÙÄQˆÔ6‹pž8â³|7Â6Ô‚4]ƪªªªªá¦ô®Íé^’íz‚¿]"ýa_¬õŒGo‰¡€'9tò¢¡ZJw'\s†Ãò[žÝ¹÷_˜û‹mæØ6è]¥Ú´ÕÛjù3
+nÍØîÅêhÊ«®ê°ÔךwHñü—ò}wÿÚ
+›Á(¹É¹×‰È3…¡hZU>‘Ù‰å(¡˜pJ MÎPÈìF'
+`QÁ¸µ.hâ\åÊ.a9=Èd•Tq)¸W㎸)‰B¢ÐV’ƒ8‡ ÀàåL‡€Z9Ñ;`ШŠÑT1©\×4*‹J¢QQhRaN
+r-ÃJ(5QýzâCé
+z8Æo\
+8Š×1Ë_¤®q‰à»áTV¥Tã7®QÁ'†x5Z–¥©Å7Š”òEëQZŠªª*ª¹AãѵNÄpŠo¨æ¢¢9(†w&âQC
+ªªªªªHœ”Oäj8L4ª ÕN9C àž.•¡hZrdd%jZÔ¥jCšr®jKRÔªªª«ÉUELµC
+ñ©p‰â…©jZ–¥«0ªª¨ã@´…£'qªªµf‡BÒ©‡$qk˜}!È2Qš‚)‰Ü]+ITÉE¥6<ã
+pi’‹JÒ©õ”ZJÒsU-h¼eìKÑ8±;‹¨-C0Ôs
+-+JÒ´ýiâ~+SV°»wuwqw8‘…S•S¸‡
+-
+˜QP*eª®4AS
+ŠŠŠŠŠŠŠŠ˜r\—%ÉQQQQQQQQQQQQQQQQQQQQQS…0¢¢¢§
+ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ¸Gø€?Êñ4TÂœ
+*‰e¯Ð£9'9ã®úaŸ¡<!ÀäœGÑ®j*g€<sôA;#q8Œ‡ŒpÔµ-\*qFG`xÇè‚9‰Ä`^µJ¼S”tú
+å€ú€ˆàr7ˆÁÝxç(éĪ¯
+¨"«…p8ÓŠ¢¦!ËRWâq;¯ÑW¶ «’ŠŠŠŠœA‘ØãׂvÐ9ªrÈŽFâq8sÂœcˆÅŸH2;œaL…prg_º8mĪ¦bqFq0gÒ‡
+ªª«¸°µŒç
+ ŽÀbsž1Gœ›ˆ+ZÔ°µ^«ô
+Œ
+(c®‹¹\j©ƒUF *-\Ð(Q.I¸Wž¥E¨ ‹‚ªGŽzbôúAÀýÓWÜàÜ>é«ï‡ÜàÒš¾õO8:ª¯ºjû×a÷pEܪzŽX59ÉÕSˆx#!Ï÷MG©UÇïcT_tUPC®ªjûª¦á÷qDr@Õj ˆ`
+x¥Gx#->ŠŠŠœ!ÁnTÃJ¢Ò¨ˆãœÇ„8cƒEE¥iDg;àî¼›J¢¢§Ô…TG†¸C5UPÊsµ;àq¦TTZPn5ÀpꪉUãžÀñ*ª«…0
+Ƙ;.•§(úÓôZ•p< 8TT‹Bд-+NANTTTC%UpZxaUW
+-(7Œ~Ž¨ŽÂ¸Uðg
+ðjªµ-k¸»‹_}
+V µÕ•ÁhZVˆÓU^V¥kZÖµ\•úÄü–—-vÊí®Òí.ÚÐ8G
+ ªªªª‡`JÖµ*ªªªðëõ5UÉUU^#ŠªB0¢Ò¨¨©–¹ÃOø×àÞEsãò\²8Nÿ
+O
+ÑÔEB^^¹ºUm>áÐß7Tã‘I i*oð¨Â')žèëݧÒp·£W;Š¥¡Âÿ
+q
+o†•*ÍÚª¸‚·¥º!O¯n•^&÷(»B“a¥o?b²}6èë݆X‰Á4Þ‰ÎJ§¡Tâœ?Hª½Truûžõv£C›tȯA«Ò†‚U™s4ÙÂÖÊ6Ø©÷/˜>1šƒœHú+tªî„ÿ
+
+|NL3pVÇBhœ`·YµbŒô¤ \%M§ ü.ÓîLцå§üÇ¢4'ôN
+ººiÚãغ~`Qé³¹üH÷OB®zi‹—ï5toXÕ7uìÒ¹þïðŽ)«QCêrdÖûÃt•ë3jÜpvƒO.èÂí#±S×…ºÑÓÐúäMU:'F
+ººˆ>£ZrER£N¤I~%r1»PM7xMq)ôYÜþ${§¡YÔøC!4ÅGõ
+º,Ñôi\ÿ
+¦®Î«QÂtÍ8hwº9ÈŸ1ð»O6W/6¹óA!·ë¤{
+>]æ²ô˜gíB29ÔÓôà–
+X´gBß®…·MX|²b` †q20QŒN5¸d¶v§èÀîòÆœóª´ß\ØÉ57õ‡¦4uÌÒßo»
+>ë;V¬
+ï'÷oP]#÷GTÝ ÑïLïaåûã œã57b†r¼H’£a2(—F9mMmZžU7q¾*1‘è}r ¦³§ƒ+2¨)/(q²jõÇ]˜+šÔå^ko4N9–óHÉã[;S‹ª
+bŸØÅãŽEq»iU"c,h!úžõáÂ:
+Ð:æiOï·Ý„fk{¸x'woP^÷¸uLׄè÷¦÷°òߨÕõË„b—±Ÿµ;ªR%âûrj1ä·$K”ìOÓЊíV)”üveQ'©÷<Õrد:ƒÝæ˜Å¦Gì)±nñ0y9m†Å2`‰¦L#'ˆ½¶2ç¸iºÑ˜ .Ý–Ô|Á<Ê›Ç
+K59oQ–¸ê{ׇè7G\Í)ýöû°óUÅK¿ÓSa-…¶¨†\ò€iœc%5ÈÆ3N©å^lIÝ ûéA¢' WŸ
+c=»ê6°‹ŒCa™zqÐBe"#!±N“Çå*è¦AüRàÚ¬o‰pXN…ù†Zù[ÚµžÜWª>Té‹J‘ÞøŸˆf
+H¦èYàŽp€&†´æÀî˜M]v1Ím˜dI¤#¼½÷æŸ~½ÈBè½”/òf&&o*ÿ
+”D1¨ ¡Q»Øž-
+,-©šÂ¡ä•ðÇ$T.ç&J5Ÿx}ÖýªÚ3(!vX@,ÀDz4´á:±†ƒ„ˆ¨ÎÔîó»Si±¾g3SÓ¥ïv@ª\©yÆ\Ç7ÿ
+œÐ³&D²ÞÊœ_“s\~³[”œeu‚{ùôNõ‘V(Q¤#o–Oµ^,$C„7\ê°Œ-p–$ê´Ø.XMÉ
+ky³ŒKa•tÌR€M¿ŽäBy–æí8ÅqVì±hA”êÄç@tÔ-Ç(}¨åÐÄO<ï ÞT:¡†H•w˜o–LÀ"ó"áfòÑ©guÙkW+2ëºT@Ö Ls•‰â1ˆE6£šE7?uËÄtsuÌÒxaÿ
+‡‘KÌž4á6DgŠÅbá\%p•aVgAšUØÎðÃþÀê§ØUv^ÔGU¸!—©£Þ]¡4´ŽÔ÷‘j9Ö¡GàâL¢S͘
+“xk Ó¤cWyJÕ錗¥ìWªÕ{ß•Ä’H:·”á-— NRY|8XlW^¡fG9ña^ªç=Ù\IF{…7MÌÝ:Fæ*ä¼TLÎ4)ßq¦,f-˜oÓ{˜ì0@Õª÷ÝlI–„]Uî¨ë/8ÄûQ¦áMÖ²2:•æ×bÕuõœá’Ž„S.Ôp4¥NfZêÕ\ÿ
+õüá)ìoÌ_Y˜‚ÏÙ‡õ‰8ýéÚþXØÏÚÇþÍÄþÝgvÈÞ¿ö³y?÷ÂvLÿ
+^ŠÞ}¶–æqo£mv|¬ÛØuˆ¡¡JПҰÏ[Rc;þàòùöIå²LD¥°|ɸïDwþmÞE
+UÙÞX²¥÷ÛÊr-oæÙ½á”ÃŒ7<åþ
+/h8§“mª$öÞúzJÍ%íÍJpâ&ïgÊ`®_hÐr秤x¢vIxwìÏBt%"–XʶØé
+yÉðIúÙ÷ÿ
+Eï;yÚNüoZYØ}´ƒÐAÕs;P¶c+KÞækOaö¦ë¨ÑžéüOÚõL
+ÌêÐúƒ(³Ã°BåC^Œÿ
+lC~JP—¥Å•gB
+f0Ñ
+÷~¨'vs’é¼.~¤ah*n1ç(÷;ÎÕÜ&óçÉŒ†ˆÅ½Zxæ—å¿þJŽ<›éw6¤m„|Ô‹èËæï.K#¼ Vä—€óaÔr²v‚sOò[Ø3k/þ·hAÝMÝ-þã»pé,.Ÿf+Ãë§[†o¡8}úX†ÀŽ9,͈Ý@ïSÏÄ°×é™T[ÆòÙÚpèÆø^ QJºœEC0wÑŸ8k|Æ÷~lªü‘§;ˆÄ¾"Ôµ}lÄTCeˆã k©`ùÊ PF+·fÉ}¸Ú3F§›¦#Žâ…R÷o‹xƒŒßI†ÝÄ(¼7±/¨Å׿ÒRœ‹`Î<áTV5¥býø™:µ
+ç¬i‰Å¥Fâ>ãê}]:Ç›÷¤f´ßøÄ9„¼2Lü‰Úz’W]D„GCAvz²ÚvÈÚÖûF?º¾Deì)oœpnÏ6÷j hàGiL’½
+Ö«*®ë,7|AQI€)Qkª†2
+ï«™F€jÙØ:¹„qcŒ”ä«3X”ÖÂqw†©'&‚på"‹"úP€1Pï0YÛŠ¹µ”÷Eebæõ
+K@ÔÙ.[s™l¢óÿ
+®'ÒlA¾Ö¬T 6–ðPgÎoÔXt³ ûöb,fwú¬ªQÎßÉkˆ[Õ}6”†×G¤QhK
+ÕŒ]Å0›z&nmzDW
+ý.n¯¨ßÉEyy䈑™a{á\cx¬‚þdËzYb
+î|‰Uûî
+Aš1¦x̼"¸þ r‘ud£GœÙºÕúJ}HRw!]7J(¥ïW(§ÀËírÃê6hÿ
+¢™NeЪîRõ6Ê›_LD;L9:°«Ò=!{ômÄ¢q,ªévƒ®–Lnû8 tž’N¸u£Ö!œ'•ƒ½±AQv¦Ä#ÖD‡zeíþ`wµR¨Ü[¶ïÌÌÔŠ‰r²Ö§½°•¡`å«–Ò™êËé5eÔ ¨ç %ÐX´¨p¼¤ù°zš8.šëÅÓnÂÕ’î½Æfm3„½¨‚6y¢T³ˆÞ®ƒØ‰Œ¬¿˜&Xâ7X1up¶/§û*b±¶ëS©èö63úAÞõ‰ßƒao€ô‡«¾:y±¹Ü;"¶þu´{Ù;Û2ì™Q”¹®`íºD:Pg`B¸ÀôŒROß9q7ÀŒª-£›[ys(v™†ì>øé9L)âã7‚Qš½#·Ç?µ¾Ú>´æò²ÂÖ^ºø%ìUáÎl‚/'höÔÆa·bê¹`` `ßh¥vëÅj®œÌ˜ŠzšâºyÑsŒøf\¿h,ð}ìÅ0vjËë´C`m¾*9Ô0±Õ ·bVx®ó|ÿ
+v 5
+òyóÌ°:è—Žó}nÓ/>{DÀøù›
+åó ¯išù¶ýamX6jíï3¹pÛÀí™v7BåïÑ™¢»OT9mÅÞ›#Vï>ŠÝhɶc/m쌆÷ƒP`ËÔgrnð;³>öœÊå‡Õÿ
+Ј•*0iß$q-û’²ærÊÃXõ¶|KtïœFK˜hb†G׬uì2ΞS¿Á1U&Å‘ÿ
+Š¢•Äwús/ØÇÈÇÜ6Ùó_ÉžgþEJ´?²˜×ô_µÅÔÔTÙk¿›Dó&lðYÁïî°¥Rèç¤àÎõˆp2ô¸h^ZZ^[]§‰Ô=ã
+N{ƹ”ýÔ<á
+ï¿Ù^
+vÀWI¾ñXÉ_S|m‚/¬·a”ð…Ãÿ
+_E%eeK—))+¡Rþ!©ñ÷Mˆâñ Ä<%hiRôb6o¢¸ÅÄ•†%k¿CÀaáÇðfZ[- q6K”ð{ËK—/ðìÔÔþ
+Ù ë³Rå›b#ÍÇ
+8¼!Ö‹Òü%i¿CÀa0K—¢õ¨’¥x‰ºVeEA6xïGñlÔÔÃÂt*Bø´¹sn£6A¨ÙÔη¸:
+£¶¡/0Ði²<FlèÁ…EÐ뇅¨K›ãjêh<,câ7›¥ès9Õ²üMºšØx%£M’ô³n“G#´0—’Óv‹!vÒ¦Íkðƒ«© ð±ˆÞn× ÌZ‚á·àtK% ßu&ÿ
+Ïá“~£À:
+%CÞà6jÃ+¤hˆ/I¡½ERöTh ´a A$
+t5u<KÑŒ|&þ®•Sgÿ
+›u6‰7Chf[A
+¥YfX°»¡.`°©R™z\¿¡6<‘?$Òô\¿ƒ¢á
+´ÄZ—l\x+Je2˜^—N‹¢„|5Òô½kQ¶—Ð"0Õ/Eþ*Л°ßAøhÑ—/óI±¬èÙ/CJÑÛà`@ƒÀ©QBë‚Ž´†\R,¸:\¿ÄÍáÅ"·ã;ƒ˜¿•44ÊÒ¡¡R x7ø¦È²’²’ŠËõhO1h#ùÁa´â-T@üGF†Ãu&[AI‰sÏA—.-L éSBºª•ð^‹KKKËAh¸qà¥T`Òérÿ
+¡Ññøü•Ëè1^5µ½/Eük—._„ҢТ¥JÐ!*TB+oórúÑÒÐq4¿~2¥õ,‡EJÒ´e˃¢þ;—à¦_H–Þqt¸>-B´hƒ
+ümJ•*T0é½¥ a¥Ù7–——ÓYU\Ä¢Q¥øn\¹råË—.^µ*V£Gð߀%g“Må£8ðšB\.Fxxh©_^WJiWÂè^ŒÆ|%ñV¥JðŠðRQ(˜˜˜ÐSCÇŒêR]ø¦\¹rô£+)Ƴf›t¿Ä¿ØÄЕý5*TIZ¿jœhøÃùÀæ¦uk˜Á·ã¤t%´º?þÿÚ
+"¦¥ HÂ6M¡³fØÎSé
+T¯Ë²;j3á64¯þ6hÓ*TIRô-„2´èh±Ôkr® M@ÑÕ4©_h3yxq GñÃ^à0Ò´½7G]šOæ¦Z´\¼¾…GEÇ*¯¯ñ„KtÍÌü"Éü5p‹à™Ñå:Ú0„›¥Â\–Ð¥J‹F\½oJ•*T©Z†—
+åøª+ñYIM þAJbÙ}cH4¸5 y}8K–Ìè4îüÕ*T¯ ÿ
+—p~,LRc]‰¢F’½mÚ‘ý^êP̉•dg·‰_íë{:¹pŠ‘þ!zCÚº•QlDJ Kü׋VÁÉnÓ‘Lã›{ßv°mkàs@ýó€_€š\¼ý
+€gáÚÕØÓãV×ýõ´Æ··œ¹Ì¾¡þ™RÚðŽYõLò[ãðÌÆâŸ4À¡™ƒÈÞn%Ÿç¨¯s™ËÍÈ `Øm³Þ?…ÐH!«~Ç7ȇeà'C×spì6‘nÊ"LSù»ñQ^8Þ4¾íÛÞ`a²©QVÑhüÛÃÚ^ ´‘FÄرpO¥^ŠxnqÖè÷æ^ßf6‡—©!(AÖŒ#ÆGCQœq“+Ìí1™àü`ëe=Ô¦ÜlµÙÆ6¥—÷—ëÐ>¡÷˜UõÞ’? <˜Æ¼ ·äß)aÓZçÄ”ó«üòDùb‚֔ܙÕ;¹YÃü=6E‡ƒE5¹Œq)»H‚{Ò}k#sâµ>¾¸¶õšWòî>éV—íF¨÷µ^¦~ÁG/u«9J°"ÿ
+‡sõÔ¬TI,!>ïžÚÛYÊÉ™«JOB=ÑÇ•áƒ)4ÈB’_AâE Š%w‚Þ^:3<îSŠy_
+îj¿»$‰©ŸªN ¼ØyCkâ!`äùpfò=^Ø-gjû}5†±ÐŽÅg æQÝnsÜ[1'ów2¼J¯Rº{3!¤d7À*ß{iZ( %æ)¦9š„L]'ªÂ”Ø“:C¢Ð¯ô<¡£>Á©D΀S|úd’7áÞ·Ð šgD:nŸI¬Þºé—ä~·eä¾°”™§Vƒ‡BeR×:ßÏPèjpŒaj’Ü…ý¼J™+ êÆ
+A¢3¹5ز~ù·‚žúâb–â÷ 8G§$Ñ‘8‹W%óŠƒ7ŠŒ!AHÖqX®°Wy_ŸÚÄa/§ÿ
+è‡Ð Ù9=\¶Œˆy@|ÕîùbƒöêÜßÞÿ
+»NGþJ…‘T›nÑ4›<ÔÎÿ
+ôEÂ_¢³ºÙ²#¡ÿ
+€J.Vgf“f‚™îAg™P€ðJ=D„ú_zÁcþ¤þJÇøŽ„÷â÷_s-ãÉÚ<¨²t…¢x5†V9¨‹ÍÊ|GvÈ[´7‚ü¬S\S“'®çÃ-⹩]é'îlìúF}ƒÌ:Û àoŠƒÖF
+U¿õ'mA…ÈÌè >‘P{[Ù
+M¾’®¿TÁ=½û—nñžó¨ß°r¯æÍÌ=e½¶j'”°¸Ì¢ñ²¼ÁÞTPÊ=ßluc6Ìg¢¨;ÿ
+|ûF„í\»JKÛ”ÅØâU¼ôŒB)ÏsqàYåÞV~ÿ
+ê§Ájub[)fvárÂÍÌ÷Gx½â…òÑuEîâ>IŽwa‡gUîš#äoÒÞZžr’èKÁÃ=¢«88„oAý‹/Xyƒ
+øIF><ŸŽ•{!'7Ǫ‘ûfè°!”L®ÇÅC¥¥%Æ„7%žºþÂ9u—©êÊ÷Ø}iò©u¤½Uq0{Ô4Nª|¥mèWÆ\‹µÌ§Hþ 30™+7€é jÊŠu%–XúEYh/¾&
+îã¬il¸Ž£‘‰[†Jvî’¶Ï:
+Ð@¸Œnw¦ÖSf
+–zÊGÇ7·þF‹Ð¢=˜ÅiƉn¡GºV`¶]bÀ,²4,[¤ŸXj¡TÎC–Ǥ6 ÍMrX5ç?R2úùûE`À3Þ
+y†Æ-ÞãælTwÄa×÷±yÖ Ê‡üžcçoö-ú1ŽG{¿ˆ
+T—67óœ3èG6+È‹äNìÇ=y¶®T7†Ñ×øÇ@ÊÛ¿ò©mLRÃhòÉ),{—úA*/iú]íúb³û€Q@)³
+†j7U1«pYt²SxJÖ°ˆD³œ@›ÙËvŽëå_«\Öí7œ¥ÂÊa=.!–âl¢)#êFÈRöŠ†Z¶Õ1–k‰“¥æŒo,ƒ
+ãœÍ
+ëhÓÈc†`bìÈå ¶™
+‚½“¾ÒÑ*žÏQÌ9šÿ
+‹KÒ¦ÑÁœ·à¿QšéöS¬¨ü±ï®}Ѩj•ì¤'ÜRÞ¯ú€hEîªÐV6×/ò8€®,“nÇiY¿€hÑ6CÏL
+¸bç1dG̦¼ŒG_[6Ù{Ø0LsUº£qf`Úuû# ð/vÁ*ÎÀ
+¡é/¦ÝÅG™VòÆû³OìK[ºšåÌòB¹Ä.Þæ6µ™ÿ
+Ì*µŠÍCÉlÐy%¾n67\Ô"®n쾬CWí½°÷Ž¤µéWˆ<ÚÇ°z°+ÖìZªéêà¨î;tŽ«cšìÜ<JWIS4€Ù—®Ë£ï™NíËͲmÉÁLC<E-Wu€ˆÛùôûJˆå‹¢o”»‡î(;Þ1“x¯ô°„I³LÍ<ç8éG¼QÅ!Sâ~˜ƒö±ß= mþÌþðeÌ¿CBûÜ
+‚†ãh!Õ‡P€JFðAv0LË¡ÔdTÚB…
+4,9%ìb© ÇÄ!;œÜ"6d¼CœVùøq‘¦p¿ÏXkª©Ö˜èÜ£ö‰Iéy¦â²*ŽßìÝÕOÜUŽ‘ßQª<ý0´VBF£Ò
+¹¹tíŽÒ×è?°¬ÿ
+e£è£Ö;¡²m˜vŽÌÃGK
+§Bõ@óK¨ÖåcÖ–xØ.ÜýT½õhWº‰8ÙšØÚ*â§<«•Š•\@†\cØm¤„MàÍñµCÊ(”`•Kx‹¦òŽ¢J’JÀQÒÖ쨗!É´öÀ²‘7XoØK½gaƒLKP/³ãLëØßð ¹%Úa®ÉÁrF„èÚj0ÙÛÓ6-«ÀÖ.¢ÊcqµbÇh-ÎÂæϘzK.ï¹éQܪ†øÆLu˜ö°à2&Nð(¸Úð@â2à‡uÞ,%ˆ”ÄÈ:@×Óî@NyЉ\ò3$¾gæŸqF}n—ý:•¶^Ó‹39²+g§û*O¶¨È´
+¥Lš½å•¡ƒ¾æ ±Ía
+‡X}<¥9¸PÚÛT®3kS¡èL R‰}®V¶•„zš”ìü‰§k«>±µ8A褼 ›öò†ýˆgôÚõb)róÞ»Æ5•¹Dvßf-¶³(€kJ¯mÙ“-S²¥›cÑÿ
+>R¨F—rË"ÒÆ(“ZDƒò:ÀÛÄèÚý£T
+‹;ÍÏb
+Uu…Úa%^Å,½¥€
+˜ŠÌ‚³Ì^!‘¸—ƒBËe¥ñ8ÖïKܺà8‹ä˜l²¹S%ÇáBûAPßÀ#y,¢q³²î+P‘aÏ\Ìð¡åm0sLY‰gœ9,+MálpéÝ`¸•M ÝÉŒíq³4ܧ™t©
+Ù°AO AFñZHÇHÈ7I¦¼Ðk%!íkäf–W½^ rérù¶v€„¨S'Êupo·ªoY€KÚ^..Qáû€ÉЀÈ6}ÄT
+J<Òv³ÚŒ²,¤ÈƵrð%æ%B¥ò¥—܃üf¸†¥ð±f3ç€MEXj
+£ôˆ‘fÕQ8;¨g4ÓµÜÊóå ;zÚ¶—ìÛjë,QßCtâXHôT^h4ÇÜ– Ús=†2¯*ˆ$U°ŒÐyÔ¡Žr»À*ðE•Àº±^Ôå
+-:T®¼b€7@›§C’µÍ’;±tÌ @P
+ÛÊ ÝE6žõæt9Ñë]Õ,KáJ°ëÝמ”²¸33+ó72N×qÚ’”
+‹E“º @Nð]ªkªDÜÄh€u”Óc¸5&Jý·(•‹@ÿ
+X p¨[B»7ˆ¥…Zªc1ÚÄÀhI13»7¯¶—‰R¶ÎZå…ÕNÂU½åê©nïIeמ<æí–ÿ
+piÂÃ]ãô´’mD5 V¡ˆkËæY(m0£t°¥Š·MK½\»ƒ-²i;_3æe‚¼^Þ’ûçGh±^fâ$ó=: ÝÆ8kF‹Ê»ä®ôñõfÂðE~\ÃèÒäid,7 èÉ%!”l#cÔT܉›a¶ïVÏYt'Žƒj[.ñ«ÅnEª¹X˜tݾŒ;Ïú@ÌIÚuFÛ>’Ç,·*ÿ
+a;MO²¼ôÀ¥¯¡ [P
+½¹”Íþòþˆ%$Ýôœÿ
+•ƒ]²Y ½¦Þ¶%ï2pA´.ð0ãž„©‡¢ÄãØŠ`Û$®ê»÷€¶Ð»*¡ÞNÜËK·`‚‹ÞÏì°k‘—,· n*,ìÂeƬO+奥E¸›;ÉêdѼÉÁ-°‡Óª„–¹Lˆ;nŸY›3²¢ ÿ
+Lv˜b·wïèÊ^ªÙuÉ‹‹&½â·%-Ó˜º6½Ä(®/
+E¥vOT¢Æ N3ñ Íš–«¨’ýfĽK*ß6+M˜^ñ7®
+öŒ¢tÁAìN¢bÄü3Î`Ü®óßö?O
+Þpù€
+2;%1“¿£Ž>%\/e¼ˆ T±œˆS57H4´\ì–ªmW’okKcŠãÿ
+Ò
+»Lq±»ëD¸
+ߨ#yéC†±QË“{˜gk.§$ŽÛÉÞç@±»³Úˆ½Ók+¿0 Ë^ed󅺦°ÏS˜6¯ÌŽP „¯XÑ,…µ×Þ
+g“-ö”ÍŽ'Äl¦0¡ÇTeSÔ9õV÷ò˜þíØ5ÌÊ”ö!v2Z´Ûî{ʪè¼y°&d]ú)/;°lW•AãeëÖ›6ô+6Xw„”1[1³ÞלŠbP0qDôbþUÔ6hVËÚ¥4÷HVÊŇmˆ‰ÄN) uÙ˜ÆLåH68„1p: DjD¥·…5§Œ;î]7ˆ1} bJÄJZÜŠë¨%¶íï-²«Tí){\^mõDZA8QXà8_ì§Ø=—{]Ÿ0x`ðss5hèV=8—Ìp”B8Ä·/'|ù#â©ÙìDx³îzú¢´
++× õ„˜R¢÷“‹ÚÓúu|êÜÄÖ
+k; g.eRV9;•;±Âù›&}Ò‰]b2…°
+Øô6?°*çŬѻ¢5ß« g¦#
+AÃjJ/¯^#¡m|Ë)€XmLǶU1AmŠˆ@ɳ2ᙇöHKC·YPÃp«Ü^ÆýåìRç±NòÂâ×wºå/Ê„±˜·¥Ë…nèÊТ*GZ ¦½¬A*ý-Á-Ž2½zˆù†Vò©|à]Ú¦Fçí)Bðþ©j/M‚uo5¼ßÒ!mðhN¦<ÏdR„ÛWªÇÍÌ
+L±?#9×yùYÀ
+®e"ZÛ ¥ÓÌÓëz‘n ý;Í°>ŸcrØ4F‡r¯¹”içþã’
+
+^Öq¹˜,½üåùlqƒv¡ÎÓ/œgfŒß¬E
+
+Úqˆ8ájÃ)¸»h)ݵ
+œÐÊú†0¢˜ôŽÖàÿ
+"»›G6£f‚ª‘ÒðÞ`pjjËÐ_Ì´+>;ª![ìÐ>P»ÐËØ\IPPm®ªÄæá¾èÁ˜j)µÈ7í¶½y‰‘#öcî'x(ô?©YtSÚ`¨Eº3‚žÑ¦Òj5¾»ÅxžllÍ=bÏÖYXròØí
+½›#ª’«kú©iP\oü‹>«Ò\=Ë<²ùˆir©>I*è8ªÎ`’šB¾‹¦ÜÃU+º>!4‡?1À!º‚iN–\˜’S¬¨½ enl(ô¥yöºÀy2dwÜ?t ø_û–Á[è Vü˜ iÌ^êk‰VD…åÐlL\À@;)a«w
+VÐÈ3†ZJé³ÅoWé, ªµ¹„ÎSWN6Ž]¨·lW ˆ²Ú]íùË¥
+)bŽj!×…ŠÁƒ
+Ê!°PÇb?azÖmO$D¸Ê}Y–ùæD±Äµ¯Rˆ#±]y\¼ÆOhy„¬‘Äþ0{J`«7¼ìÉ-k°ïåfó k‚m9¯Jœ¤<ª`5¼º¬=ªT¨K–Ë—.\¶_Yq•z¼.YµG¸Œ¾=^Qø¤wÉT¬#)(¬ý#-˾Ëï
+çLóñ1ãLÎaÑ£Î{iŽcZ÷heöÍØß´n—wÅÿ
+ËDë:‰Ô¾ñë½ãÖ{Ǩ÷Ç»?è0³ú36ïxõÞó¾÷×¼î½ç}ï;ïyß{Îûï;Ïxu^ñ7wÞwÙß{ÎûÞwÞó¾÷÷ÞwÞóº÷×¼î½çuï;¯x;°
+¦éP*sêCR88>s,¦ÒQ)Ò0L½;Dô"zDtb{Äõ‹Ö-*T©^'MÂx..‹AKð1G¡F1ÓteËŒFfåº\Y—/CðÔI¼Ôœ„a
+MâÆ.³òÒXKÕŠ;`–ðK%Û‘éF|uHÊ ã+At”ÄA4¨Í`
+áM¢:J•ãŠ>›ôV‹ÞŒÝâ¯ÂÞjinÐ<ñ˳I¸ z®#Äy‹+št\EÉê©Z*ŠÙF…zÌaÊ1”Ñ—â„(éqc`/Á`ÃíO
+ø/]æ¤äU™tJÔßAÚpœ#ÃÊ\¹qq6ǘ±Ò£¡¢k[K—À"‹$MÒæ<ÍäX±fÒ¢ð(¢Š1ÑÖå¥J0Ò¼¼5¥Ë—._ƒŽ¤ØÀJbÀ°S¡¼aÛFÂbè½n‚.\¿
++ƒ[æV¨²Úl—.,ÍÒåÅ›S˜ó7ÅŒÝGZ\_‹âß(©¤O_X&´’ÜðT9˜ÒåþN¼|
+®›¥Y5ˆo´mL8i\\M±ËÑqe˗ЪÂ-‰qˆD#rØ™¼–ÅKGgN±f\Yºø„nÀ Ò2ÒÐF:¾cÉàxņY,`é»ÆEA;²Åx6ž?
+«†%j(:ºG
+¢øzÐq¥Œn])e«,”ó›Ä¨¸F`w†nˆº4Îðª*,Éôƒhcð!ÒôtGGMókΨŠÁé,VÐZ¨gx^ó· t']6Â1èÐ3.㽧2µÚø¶Øá°‡Tqû÷,¹‰˜Æó‰a›{ÅVòq*0ë–#ˆÑ[Ê-Ý1Â’Ëyº”°°0·Îo¼Ìc¼C‰j]TA²g¡s9„~Fp¹‚Ø¡Qœ1«3»P–킨l¦!Ú2´ ›`Ë—.0º‡G[j‰‰çÙÌZ*1 Jðt©^-Ž»¢ŠGdÀVbètó1rN"S¹m;á.Z¯˜ì;¾g@ÐS²+˜‘´)([’(S”ö”ß0
+ÙV{$mpÌQ¼g$ÌZ
+È]áHÇ´µÄÌTØ!œt/Cð˜\e‰ˆs6!œÎäîǯ´ë¡“ÐvJ„³C§mU+l`Œ¹—'XuÊ7Rý',T¨—._‰e“%1yLÙ1
+&Xq
+ ~ЀE‹/Ãq¢;Ó;ÄXpSh¸e¸¸£h£I†òé²V7UG,æ+:‹eš\)m;³»¬ï³½:ˆ>°K¢Hc†_‘"^f9‚Åq;±\´ŠIÆ„¹rüFb¨d‹ƒç$5á.\¢XÌŸ†^¨ˆ;£L†b31jç¹åa+´BÒ)Ú'˜—qº¢$fÖq‡„‡Ò¦’Çc™DHŒ÷J"K‹1œj<N+ˆ>%Ò¦Ù¸l™`V!Ti\t+•Å¼ÁYiz»EF),˜‹&2è¥Ãƒ‘0R²²Y–ƒœ²ÓªsÒGJñ±Ui½Žã¥*ZÁø–-c…„,3”„•SˆCÂ>’÷h*åãßü€ÀJUb zJc àEÒãåèø.0ÅÌÊzK¸—ðÎÃ/˜“"ËÌi+ƒ‚
+Â×D±Œ@y›iˆ3ˆ=³ ¼ßƼõ&•*S////K¤G0.ÌN²ó wÉæ°”åPc©~±
+ÙA‰–
+%³A—.^KëßÅ -ö\ÄÕ`¹Y‚¥Ë—.\¹rå]%=¥|D8‰Ùé™k°ß.:\Èf°
+›Lx
+¼tÅ1IÜ Œ½yêÍÆ›tvMìyeËÒ¦øeJ•*T©Q”†‚>M*T©R ‡ŠÐ1¡ ñ‡à·§“ýñãÀxPCë+Ë®%¼.~hë²n`Ú"LI¿Â©QÒ$ï&ôÕk¸e!´
+‹‹b³.%åå á!•ñYÃÁhë°›ÒÈæ¥çéç0.JÒ; ›EŠ¸9n%é²æùhTÀ @é
+§2ÑÕè›k43sÀ@‚ ‡ˆá”[³“ûé)Ò8°ß1<ɲÅMJ%2Úô”p4¯Çᯄ4uÛ7¢‹æs7åto4‘âho.GÎ 2B¹f\M•Q³!¦±ÂGz)Lx at CBKƙڗé-
+À”ˆ„2åéz8ø,¹p{ÏÜ~Yqå›åQøUøwx6o‡'ïR°“)–e¢r@ΘRoúÇyó´•X‡DfÛJC9kp%þ½
+"×zA Qh¸hi½>—SîcöÓsÊÆ>=¿€Óv¬Û*o›½þ¼5¢e(…Iy†–%÷C`gHp‡/Xé³p%ËcCT˜¶V ”fíÊ|‚›ßx
+M7'ÖÊ•éÞ&^r¦÷”ß
+hè½oÁZnñ[æÿ
+ƒ—1)®Ix¢˜LyD†zÄ°QÓþ«C
+ܶfðˆÛý€cªlØà€œ’²ÊÊU 8@ž1_ä1P'Š€!ne˜zB˱‰sÑC Á¹=á•_åÉõߘÜ*˜¦Á¼¢:ŠA„4Ù3|¢®>åþŒÆ° #`†:WˆÄ2Ô
+m %GÀBõl‹àë¿ì(±sÆ—F>
+ј®+òJ• <f6†ƒ7A–ÁL’ƒ1Çu˜ßH:÷ü™/ù9!\DH
+؃¬®Ù
+€·(†Àƒ
+D
+H&Äi‹¸—;M± ðÞq
+QÖã÷Þy#{EïmËu–„ uH‰rí½+ÇR´¹d£™Ý'p”w†ÃF4#dT:™L³‰ºÌ\Eµ¼)®øm£.\¹r’²²’’çßH=HhQ•[Ý”sæ1zLìA6#ÒK¤¨¬zÒÐÁR¼`T©Pj^€ÀÔ[™.Tª*¥¥J•*V—Ë9ù—oòÐu¢gvØæ@V&èÃSÌb¨—%®¥†™M-åå£,\¢â´_€—g@–àŠœ—«;ñnbŸ
+™N’Éz––Ëffffee1}Øóc£7é¶;C6Ã[›4¦[¤íF2%¯/-Öyå%`‘N%¤”Au¨©Z¾!qÉQ4ÝÞˆ®±»—/ç¯ÃrÓˤ²f0𳆙<'KrÕ-X©¹³WñêÏÞÐË9Ðè꯮ct%¡sr:¾>”.µ–ò¸„Äì•ÓýßÿÙ
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.bar.jpg
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.bar.jpg (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.bar.jpg 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,194 @@
+ÿØÿà
+
+
+
+
+
+
+
+ÿÂ
+ZÙUȪÍé¹ß¬„U9ª…-Ôè뎶¸‘Êsus¼ìô©p¦ÉÚƘívò çòÛ"×H€Z’RÊÏLÜîíÈѯ¦W®H*jŒÕvä‹
+HPZùŸ>„éß`æ
+—)´ñÛdh½HÓÖ+,Hªc¯Ž±
+L¾ž&¹dkžÆiN¸ÝK
+ãQ·P}ÏU|Ûã{Ä®W”i[EÎŽNžÙÁ…›
+-{dG7´‹ÛŸjmÞsÔi“¥7ITÙ§yë놖™M¤ÆN ŽX&©ç¦nzUšqM“¶§w\w}$Ö[eQÔÂVIv†œB at G2C²Ï,‰N‘E ˜˜|ÕŸC3_=͉®[eÇéNìߧiŽFZtbå1Û'IÒ¹çâÀÊ´heu4“ÃMXr2‹6"\
+ƒ"ô³Å ªY«lÎiÓzs¡ÅEjy]tÖ¾7JÕˆ¶¬ÊŠcÚÐÛ+:ç¥YÊ“'h)‚*¬]) *‚q—dZÚeÓwð¸¹‰Û ¾øË>uµ¶nÄ$JM¤ª”ÐD €sQGÎf³OK;ôŽw0T¹mNBÓ4tý#\ka®ø¹¶Í¹ÅhÒ³+´&[j"žvÕ$rdÝPœ š‰¢I…¨ÜÅ©MF.E8KPÀ;<4¹–˜Úl4Ð’à‹$ØT‹¶eèÏN³“Q‰rÇ,*ƒ,Uf‚˜æ¬ˆgå~#†ÞzWUÜã]~¹\ß9´‚BptHL]Ž^~w«®r@åÁ8KùóZ`ÖÇOLç&5K‘ÙqÚåiVÌi·®\LW¨B©7ÏMçk‹ ÈŒlm‰“žZS©-E”Ð Ì*\nˆ©ÈD墖ù=Í®má–•%u%‹Õ 'ˆùúëå¶V³Òa{Uš"«M7ÈÚÆ«„Ô˜Ób–4Ę%U±\¼wÑåanå°¢ýWUqo|ä$„ìꕇÍѧ®6šŒ¸K‚l†Ù ÓËOQçdg#«R3G|üö'¿<$ÓuÚp%N¹5Ú‚aU1VeAéå¥-qT®ÈDuKI]8ÆâÏ6ðËZÅ:*l%~¡“ ¡Ž´gj.·2õÎÖñ-ÏV%·N:®têp ƒ‰Â)ÁN@ÈÒ[eã‡-üîêzÜýƒylí‹—iÀ‚q:"ÝqÒÏN
+º}ð„¸KŠl„ÇGn ÑËOVæeh‚ãu¡1˜j›ZÅn{’y3¢Olä
+`˜‘F.¼Ð¦]CŠ…sµYmú¸lk™\°ÜRcŠ#Š+Ï´Cn³dD"4xvšI9§4E©Ëš¢Í3ô™ ¹–¢UOX£·4œžZ¥³,JóÀN`; z¼ÆÏ tzV僄Bu†0€2"0B–Y¢ ˆH¢ëb¥AF
+iWœÐÌ»%º’
+L:$&¼ß¥Zš,YɤØGÕ©èë=ñ¨K`„´‚Rv@(EÐÏM+ÎÈ œ@ƒÇç®IÍ)h*&‰§°ú²…go-Í–¢ž³Sn@ÖSMÙlÅÂ5ªÕÄoävœÚr{¾|ßÔpç’E
+ \hJÛ‚¯NFZ±}¯6½z”8Í/˜ŽŸ_\Hr
+¶‘|!s{Ç=¦; ìÍÓ0îDßmž^¥RúL³ptÀæcX;抷,ˆ4ºí¼× ¬tÈ•$Ô©8;Ž)
+Ó\æ[(}™Qš±s¶U椄nbf’ p@„1&š@à‰›`d80 ``Š?ÿÚ
+1b˜¡Ž_å³ûÒÿ
+ÙýÍ;nƒ€ýJ ›ûxôa,ù;Ù¹Žû\¬ö3,(KëÄÖ—Ñn9m+c¹R¥Jó7B²ep×ÇŒòúù%ãå©’/Å*n9<vy=„˜¹ª6\‡|¼lUB˜Ñ¯óB䱸ìO.,f››s†ŸÓ–ǸØÇ=¨Àó+n‘—5VF9ý)•ÎøȘ'¥’œ+Ü‘ÆýGõÒD1äbÖÍ"'biø|Ñ2áž2Yr#Üå=Îr;;CÏ»"+y®Îû=žäˆkçÄ`ËI9 ú9™VIiÊ1‡¸IgÝœçî3Ê‘ÏBYµ«ª±dÈ¥©ljwœ£ßº¼‹‘ú&êOfÌ8%oµ°¥¥“ï(ܼL'=¸òÔ©RR3JØMΘ"ñëð¯4#Wi›ûÔGýÈ’þÁå—oc3×Z‡½ÙØ1ÏOÇß#±·$kã„qæÉ,ÒÊOæ!³[O¿a„Åãô™¦Èø]f~\^Tòú˜õ§¦þ¼^;W¶´5E§®o…ß ØÂvñ¡¥Â¥J—Fü¿Gßsêj²žÚLüdk;̱üÜjP\!û±ôQþGÿ
+2Ö(1@í¶M}-ÑZä’t¸““‚’/f¿“ÙŒrlc;Èé»°`þ¹6bÅXÿ
+Uc‡Ñ,UM8˜Üªšj¥çÓðr„${]{»eƒŒ‹hJ8ÙíµÙíõ¤<9nr“‘k-,Gj'j&ühÈUË[³«‘9¾rž6n9–X²xýŽÆ¾
+¯ïõäôÐüΉù\'žÝ†Æ“·±ù|Ìü—‘öó=ÆÛö
+¨g’sË&×)'bãO÷§Ž†—ñº[q0îã“î!2r„#¯8Ê2QnU(º§–±#×â^,líÄxË&Õ¸"áä¸k~çÿ
+ )Â|<>?:.¤Èô_"ç}…ÓB(K•rO’Ò…8ÇàσEx.“}'Óe:•¹×
+ž¥Ip|ëà#ó..\WE¾›è2¥J•<ÈñcEòÈo‘©R¥Åx'סò/ÒdzO‘p§
+r®yäeK‹ËËË‹Š—ð©R¨×$GÂœhZSàW"辪‰aiNFù¹¨\\Ë‹‹‹ˆ’+×|—\ëà)ȺL]•*T¼¼¼¼¯q\*Wžƒ K¯^t¹—RÂÂÂ…FZP]ñK•”(UÎ%ÔE………¬¡k,,9×
+rP¡B…¥œ”(Sâ(ZËYc,glí²¼É—
+”bƒàÝrã\”(P¡B…8Þ^^Š…ÅÅdZZXZZS–¿BnáÜ;‡q—²ö\˘ªS¢¥Á2E
+q‰.8¾ éT¯"(P_Nj)Я|ß*é¡ð¯"|àºo–?ãqð—Et">uÌþ‘ä_à¿ÿÚ
+à†„S…
+(P ‘`¨$P¢Bp)$Ù¢Ò…
+-($ZX((Z$Š"Ô4P¡Bˆ¢(>…
+(Š"ˆ¢ä¹*U.Cø!‹¤ß¥82¦8Ôœm$ø!Ì©^.*T©R¬C*T©/™¬Çòã2#ø†SŠä}*ãB…
+áB…
+(S™rZS‘¯/—‹áWAr®[Šˆl¸©Râòââââââòòâ¥Jðl¸¸¨º,}vT¨„1ôßEr>túV¢ãN’<—äcë1ñE8>’C讥z”-*W ¹_à‡Æœ_]ñ´§Q.šèСBƒç‰.1á/ŸAsS©NµJð°\Mé.jð\¯áB<KKKJ–––
+<«©Q¾µ8%ÈúKªÊ•+È——"E
+r¯}ZrW‹é¾¥¥KJãQq‘BÖ§]ôÑR¥J.EzKƒø?˜¹%ÉQp¯
+|
+yÛç|+ËR¥J—2æWâ*\‹‘z/GqøP\ð¨åÁ"Þ•J•*T©Qp§%J•*‹ËËËËŠ¿Š©^}>ÑÚ;gm"ÄZŠ#ЯFœ)¼‹ª¸6WüUyªT¯J|V…
+áB…9êW‹é¢œüløG¢Ä?…}EÅÿ
+„/ˬszxEhb$‘Þ‡ù5 "0¾åëU%âˆTvWÎ2ù5~·'¶¯V7~Üës¯¹ÅUž68 áÄÕ»™ÏO‡UÐ'ö©ÖyùŠŸSÞ*«ÈÙ•â·Jß=+ÔwI^«ºJõÒW¨î’›¯—'¾î•ê;¤¯QÝ%z®é+ÕI^«úJlj:Ü¥xïŒz0ñ·j˜ùcb;’0#J©RµWÔ7 /¸»t`òÝkÔ0Å2¡xœê_o‹®Ãñ’øçÃK—æ׎[ÅmqÕ\ÜÅýz•{Ë¿E7
+¯Jfq½‰j.k<ˆrhüC´'a¥¤v§vº©lW•vY`ÆTb!ƒ‡&ØKW¡CÒ¬³
+¢ûrgTé;znv—OšÎS)# sLø‡o!íÈpÅÄ4g@/û¦Õè5z,^›TÚ2–Œå6B<£¥
+}¸,CBy¬ªxu#zÅ°!‚X£`WªÏ.ñ‰·Bû`¸g—jûkzÖüVñ[&9V²ŒDIdÕÖˆ€öóqeW¯·7râZ o u("×»j•¦1[N&ÒqóQEÅ>¶]–èæfS~!ÛȼÜxnkOB¹ÁRÓUØ»•þ.§÷œOümÝŽ|¨>¬(RÚ!Ò Í£—7¶Š±\ƒ¯
+sCÇ20΋*T&2Šõ“þ‚û|E7f&1‰´œCIWcyΙw4SF!3«™µZ¢„qrMÇá¼w<§2‰ÄÜ3+x¯P ëä ï6ìMk¢WÜajµN.R–…uƒ0©Ö„ÄH\?ÌŽƒØ› s¶¨:yŠhÔUº¥€ºØZ ÝÜPƦ€Àχ¼¨þØ';öØ|-ºVÔ¦ÕµO ¯M6ÀL‘j{üùºwQ
+hºóvrŽ…5xɸ†2„l\Á
+Õä½åôO…Ó‚ +iQ%¾õƒ¤¨ñ`=Ö{Si°Apÿ
+•'ô-¡sJÚsŽíR¦OÄU¬hQ5@Ô§P•â+t%JãlP`Q4å˜ rÍôò2ÿ
+»tŒð+ûv‚óâ”l®¹›%¥MIY6Räï-õ¼U¥cV-ÕcQ;
+Þ*£ŒÉ‰Š x‹®,`ßP¦öŒM[ë}B÷bÜr¤ÐØ]tz“_îzÖËBð•z×t4/Èv¨/Z¡ù”iÕqpµ·Š›NˆÅAÍžU’V«À¦sw€$äWlvC†.0R1 at uàIÃt¶ÅEŸÄÆèŽX)IZ¥·e¤sÀÛËÈƽ©ëÁÞ†
+ƇãõµÂÔ£òؼîÀÍ(/fe¸w¥n5þÞ¥áX–-Kÿ
+«Ù=-eU<?(ñÉsþ°x¥›w¶ó¯ (Í÷Ÿôéÿ
+¥«}~ß´ P|¨–}קê`ì‹øËì¼N`6Kó gó·›â-FI Î\K6A³Wbg_ðÙ#š±ÊÑ]½íF!€·b}ûDÅ
+î»(¨7›eøöÁVÅu."8¸¥¸ÏI²Á›
+žzÿ
+›õ^ñ|,ÜöcNu˜ÊµÎ 8#©NòŒïh}#Ô-ˆ)ñb+ø‰»þ7pÎ:E??¹_ÚJ7µž *œß^¤EHÓ
+±iØæeܱ–ÔFËo‚•KÜ×vâ\ L
+•¶éâÇÄB™¹+÷w+ü‰Ýã·V'ÿ
+Nðñï-“ë§ÚSÆ=¥EËŠ½ r?n–ÝÞŸ¹ìƇâ[߶S½ƒ¼^ø.
+žëŽ°V:üÔl
+\ÌLñ
+¯ãy\-F8÷†=PSƒËÃ^ÒÞÐÔ÷ þâÉìýËlû®f/iÐWŒG¿¸cÄTÛáÿ
+¯xhÁĨy˜ÿ
+ꃸÁøÊÌ4²,o¦ÆØ~çÜaâµ{Úá:ü@¯D’ža5Xºåˆì«Œ¯™½'®OÌÚ€‡Rw%ºË˜Ò´! àaìÓ
+Ž˜…“sfgxë(îfS³7þˆ‘¤<ÁY1,Oþ,'W¹ø]ÌvŠéQ#{ùŒÐ<k÷ûèèßtè¿qþN^ø?•1ðö7ñ>é¿ÄЗn±´çå2ìü°ª”0ª·Ø••0æZžüÆ…ÕbtQ£{¸‘(®eÜŸ‘!´-Ö÷•¢ºVØÏ3x\Äj¼Ž Ïü$n¸ÿ
+”””ú7\eGèÓ-é"´¼!¦Ó.\¸¡Äƒm9N¹8–zš•ô
+¡³ª©WíB5Å©¯¶ŒˆøG¥$$’o¤ì²Bj‰5:Þ®%êØè.i[VÂi„Vë"çOþ\ ’mÖ·“,™ÿ
+WÁ<%ìÀ«pŲ‚ø¼L¼qÇy†Êò÷‚5*DªÍÜ8üÄðS*)®¶Œ¿›Ssû¸–èå
+ ÉÖÀâƒOÒDÛ#zqYÀ¼¶Ú*¹`S¶ÀT·»´hä³
+TTÞ:þ‰äL–1´2N –Øø¸lˆ]Õv–oæ†MÝžÐvéÙ•¬²ß•+µÔ
+À…pf7¶âé,µrBZY/ÉÕéè C%S`bÕÚÝagܱ´,UâËÏFÚõEHlZ
+æÓ~LQaoxDôÖR¶‘_ ³YÆ©Y-¼c¬í^ÃÅóFÐŽ%jë¦Ë¦ý®R%™””¡xÌTåÀ•;1^Úu&Áföï®f£ n1x‰oóÀÊ@+³p¨SUÛT(Ý]=eÀ »^&è¦BLsx˜zƒ2€Û8„Ð]€¤
+廸<ãMîŠìD("¸Ü:3ˆ%%“&ðwsˆÑpäÞ¿
+Ë"ê‚¥™±€yÞ*¸qq®tkvzĪñz÷Ž‹‹tÎgÜ©ŠUðþà ¹@¦ã½?p¼XxÊJˆbG†3í¦yXî^t›ã"¢Þº?Lv=[àÖ+¸ê%
+vEÚ©9X{C{ZòÁ»
+<Ǽs˜Kî8°™ÐÝ8Rx @mECñ ®^!pìZ÷e .ºÆ
+m’\pí)u¾m‹ï°€M‰°mã‰rm|ÊðUEÐ@ Jmx&Ö—ó@Ú-0œº@v¸j)Ÿ-‰Õ§ý‹Ø¬D&PaY %…Vªk•a&¬$¿Xk>*%=ì±ç ‘]ZÜpf_¸u¬F‘¨
+Ê¡Ôf}þ‰\fœJ)švˆ.ãЕþ¬†$
+ÍÖ_7ôY—Ó0bÂ~†(Ôì(§æš#(0¢_á0îû;ϺÙÓ0ÿ
+Ê[Hoa"UnjË#†=€Š ¾CÚ9~BïQòÃa,Á`²"›Ú&”±lq]p¥ŠèŠ¯~*:N H\Òçox
+•›‘ö=¡×’•ýĪÍÓ=ó
+€ç‚,n?Þ)"²¸?1D¢ù¿á‚µÀ/ýµo¿ý‡²æµ¼HíSíÌq’ñÿ
+ž(¿9f‚¹T"+ÃÉÄ©uªÞÐ2$Œ[è ˆZDáêNH*JM富¤M°é¦¶i¾an‰ŏâ{Z ¸KuTG‰q…j×æ<²Áãj6¡ú WÕQnÍ49âc]
+‚pÖí$~übQ¨¡n)RqÖ
+dfú»m,gU¸©„·y\o(@<·Â0Ò§P+¡Î
+ß¼d•”Wñ‰u9ìªÎ ‘ovCÜŒÁ^=Æã«A(—¿+0ìVûö"
+¿hÈÙÙ™þíªæQxå-˾ù‚n,ÌC4.+Šê±Y'c´;"fª¼Ž‚Y¸ð»ty@‚£}·6#3åÚo}žè®–›ÕBGz‹kÚb”øgaÜéžÐª÷"¤à"}Èã¼ÛKùžQúËÍ÷É–<ÀÈ™N¬FÅÏ»ôeKßô•˜9Œ&Áb¢9Uc„d¢ˆµn)ž¼Á¦<Ëà
+tàKƒpE+Kñ„ï³ìEw¢Ág£
+ö`¥{:Æl©¡üLùü¢Kí‰b•ÙsÎÊÄp]»!Îa•ß!Ü|ÃX²ÀE+,)ØSÒ<•P…h[øæxÅu¹²†(ÝŒ˜Ý=¢"þ®3b
+ ð=âÙ÷¥Êl\g0Ù8(¦QËÛæ¬Àß0hûÊ!bÍbá
+ÜA—g²Ua€†QIJ~¢P|Cj¨.Ú0c!Án†d½-ƒ0o³n,ñj£6
+ùÉ9Õ2‹›Ž&°]‰—¼{±y¸ëX<¼c¬n3%Vw”¡„Öv?²f>ñ16 ]
+U+ähW»
+ÔƒU2ªÄV¹”¥…#Úà·b]ì›1›Çeý°b´´WExœã[ȶSÄÅò‚Kqsòú%;LÌncžb÷ï$â]ÙxuŠˆd:+zçÁ4r.(±Þ=”® æct2ö¦¬~%´?ä
+¯îâßd—°QÅ'hÄr—µÁ°ÁÌÛùˆ¢ÍâQ·™†ì#W¼ ëÉð&HTìE9f>Så¨
+Ç1‹
+a—‰O·¼q—eÀ8X<RXºïeÞYa§.oäFB¬±áXüÔfAýAyqlX=±|r?âVõ+
+¶k‰hÃ|h>XÒp#Ž˜"1°ÇÔéQ{`?,FUy[wá0pZ”óXxWbJ.ªÁ^×°7—%[»¶ÒF¯²‰g€ws)«Å°Ã¸¼‚4º¦É]—VcKË…ŒKWîeô•Q ÓFÝãÿ
+-¹[ƒcR1ÏÌÃx¾:M˜Ä»y†CN½GNX:ñ»b·˜º.ÚÛ¶Çð—|À”ËÍ|ÍŒ¾¾·ù—¯ˆ,ŠŠ=±Æ*´éæ|ïûÂŽ-ïaxÄmJJé—h?fY:Ú+ËPa€n÷@/vEùoÜ.¡÷pï=ûžÊ†è›26úæ5&&Þ|ÂP+
+ãŠÅ®`h¢f-¥›7‹m\‰!‰Ó±-¸$R÷G:CîÃ-÷±ü‰çÏè"id¸Ò¯Ì¼¾ð‘.KÜá\_Vm4›6{³=RwKjg d~be÷t…ct¯ðˆc»ùl£Äê¦P¾'SaŠŸpù,H5`7@G*?ÂTŠ.ê·º–b¬jü²Ù]ʼnÝ%)YL¸$À<v ePF*ÖÎI6Ð-óohá³Ê´·ïˆ´ÝAÆ[Ò$\.ü©wvŒeÂ+]pÅHÞ¹Mžlß¾žßõ0¹t¹ýÍág[~’Ê‹¸ýˆ†z"~®
+ë¤þ®èª¯’ÈlÜ”
+૸¥P0ÿ
+Á,ÓÈGh+¹PǾn¹IKÑz¨ó8ÚrÇÛ
+¹½é/à›ƒ_DþGõ$,þúaY¾Çö%¸ç,Ü®›êX¿õý™}jÊAЪ؂YÈýE#÷ˆE‚¥×gir”4»uŽ¤‚v
+ÿ
+p°¯ˆ=àwxº»P:k`ípkEµ'î¢X}Åh.ÞÙXâùFÝrÆù¤,ÃrìX÷;Iž)ÔïÒaKVupm3Bjàà /8WâlóåaAÎ.šª—?àªØwT!àŽLö-‚„ÊRqÚ„Ï°á¤ç¼Á«EгS¤gp¶r;Åäí¾ùÂVÎF;1`ï™’
+
+_†t-u‹Š„hî_Ý8ÅŸ©Ë6ÜAÿ
+xÄ·wóKVñò…AhHçï7]¥®:u–gá
+ÂU@ ~¹ÚÛ&’ÌĵiCÕLWÉUó+*RÅ"¶y³'Åä€Úa•+Ð0eé._IQ ]¦vt…оÂÈC€ÚüÖXduä—r¹S{ðü–ÅCø¹çÊØy9¤(“^y¿w+‰_˜JŽ„WåF`.Ƙþ¡`Ô?õ2¸¡þÇ›CŽvxCù*W’_ȵxµþÌ+N–Ç凄*KÇ1¥¹ÃÈrEh5€oæSO3æPÐm«¡þLp1ÒaJ*ã¼Ê2ƒ±|±éŠÅBló-oJöæmrŒ±ç•ïGŒ_,Ýðý°9f2zBJìåa®ÌM1P>;~ÍÊeáLÆMwÌ5Òß‹‡ÌNDŸta¹,0Ê9£ðTknãäâì*MV9c–‡±¶ ʇ±l5Ç%Oš à–Âÿ
+ûés}
+àÇ}9ôlu߶?ìB’ãáeªm
+©}ABUJa1˜ ƒižöï1PTÌq›EcôCµ&ÀÚ-a–nn-…˜#¸£ˆ•)1á†Cš;5JÓw´áZHA6Á—¢â‹ A7Mˆ2ôó„÷Ž‡¢ zj]KôÞ»wÇZA¼ÛˆGyŠ°3 Á™j€IÀ–‹c,b\èEUJ"‘E1B àåÞš’tØÚ[Ö-çAá¥Ï´®’Ý":¸["Æð{Ëïë-Ö7Ö'¬o´LGF0Þ`y„&}úEXëÄÃ}7è¹vÔ6‹ß¥MŽ»æùihs"†#æöuuЄÜÐb‚´L2ÎSÊ=óÎÌ{¡s,wˆ9„ÀÀÄ ‰X*n4„Í3•Z
+Øàê\X±bÆ$c¡¼ì¶B‚A‡ßâô¡R•ËZ¥ËŒ2êm60—7ÇBV@\[ ¹‘ËlŠ§ð0„Yœh.]β
+í-Ú2ȱÌ]
+š¶ƒrëAÇZ
+ËÚ h–ИÌaCÒ‹éZ*oŸª6Åc™Ä‚ª•¥ýÐ42Ëèå¥Í𣈴5/´{Áb*/ÒiWĨf
+Õ0
+A—/ÑËR+½;Œz’Îñ¾™2Ënf
+E†+¦Ýqa˜Ä…AÓKix°ÕCã÷bÃm0‘Š¸AE”æ5b$´½Z\råÅõ*ƒ€3
+kk‚uˆØ1^ÉbØh_ \9z‘YÔˆë;G8‘ÎægjîUÅŠGdÛú;=!t”Kö‹¹—Õ;„êÉÕB0Æ«••2³¥[Áœ]²–…ó(ìƤ²¥ËõEp\Lu6K‚tƒsmjz.\¨¢7-£ë¨Š÷›Ã<ð˜[EH¼@Bn‹ˆ×h®l• KW¶)Î1=Á“ô¯Ñrå²Ùrã.BU°öF¢X´Éd…¸eÑ)´Yx†ƒLË—.,²0Þ,Q¼Ë)Ù¨uD%Ã0‹/RõF2b½n\½SÀ…EEF
+±ÎŠŽò¬ÇQ«±”AÒ8L‹ñ,›™/:&Öq‡¤ôºï(ŠÞ2‘HÔ¹¢PæoC¶›£8ÔkZ²+Út‡H—€µÄ+º‡Jè]GDÖQ£ã¢ã
+Ð]0Í"ÉY9{Z
+Á6J‰ef<h¯7³æ%[¼ç¤#¥}$§X®±ŒKˆs$Gx|³=,¢À16ºm‰E@‚‡Bv§c@€¯,(›ÊõŸf"Ð
+¥1e‘ŒlÔ$"¸Bé.\¹~‹Šq/á–q”ìñ;äî–Ö¶¥æ*ƒŽ%–b°ÌÎTlGDCHkÏE2òòÒÒÐ^‰Yw²\âÄ/f,¢ÂÅö ¹eë,,ói‡b+‚¹‘ªBKh¬=!/Rýåĸé.åWÙ(¥8”ËÑråËÑ"úG¡‘Ôïǯ-å‰hÛ8BË—3‹2D¡ÌÂ=c·Y¼í¥IYH)aÚOMJ‚ˆo*#&bĹ~º\Eh–h¯ŒKv‚&‡¬…2ýWråëràË—gb:k#ÐÃËèˆé)Òxi´¼[é@•(QЛ fd‚›T°¡ˆ
+æ).SÑ”—,¦–/®@ï(Èà A_¥›àãBˆ€•j9‹ŠÈÚ)ÐÏÓ>£*"R3yhj4tç ½¼?hê&Øi³XûÍÓÝ7:A¦Æ€÷Ôo7A†§Ð÷ÍÙ½è7jý3ÒýÿÚ
+”KÌø–€`"ð!°–2¸&Ö…SwP=`ÊJ•*dƒˆ—--–ëRµH’´- ¬Ì/Kôm„¬hÇJŒ,PŒIÁÞá˜o.c*T©Rµ
+¢¨Mj>°ï„ò!߀ã”ECáÁ:±i.w¡Fò¾òF$K¾b<C™Ë›¡´wŒ>k’iS32Dój:mœ¥ÅŒuYzoŠ|-K";Ã47îÇÒJ†ƒ¨\af i^ªÒ¥hJÑ€ÁUñ)„toѶ*:IsJL¶ Ø|6ŒaôLËIN=% t’¬l‹qeÇ0¿3~Ðn)ÖW¯¦"‡N俉Û4»ñ²ô!tTtµ
+Üßa-/--Š8¾ŠÔÜeDTGóó*W¬œ%JŠ¦iLV¥T
+ý
+ôצ ¦Ó¹¨
+5¤²S R¥J•8B+eQu3|¸ñ o9":…¥úÅQ-’°…\Jt”t)jÄI}aÑrøõŸ¤o\‘0c@%*/ׯ§ihMdaég
+7zN‡FÎfÎfï³ ·˜ï
+Í´çC£èwãC
+MèèÇé†ÄØC]ºŸüOÕÿÙ
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.bg.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.bg.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.bg.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1 @@
+GIF89a
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.title.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.title.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/hdr.title.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,19 @@
+GIF89a$
+$§
+&ðòôý¸õ¯†
+¯JBhÁöð –
+<@1î
+lhô¥ÐI )A â6˜Ðž\ŸiÛ
+F:lè 7¬ÿ®(
+0 fkA‰”GŒ
+ôc©;J
+7rÕ#
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/header_line.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/header_line.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/header_line.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,5 @@
+GIF89aj
+ ùýþ @°`Á
+XÈ°¡Ã‡H”
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/input.bg.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/input.bg.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/input.bg.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1 @@
+GIF89a
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/sdb.bg.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/sdb.bg.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/sdb.bg.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,2 @@
+GIF89aÒ
+}t¨QE*ít©SMŸJuªÔV³JÀªÕ*×®WÁNe V*Ù²NÏ¢UªvѶn…Âës.]vïÚÌ«W¦€¾?ÿÞ)xð͆g"Nür
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/spinner.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/spinner.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/spinner.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,26 @@
+GIF89a
+3Ãð¦DÅæH$^¶”@éøPd€°¸"U…³P#Îa…‚\;ŸÍƒÃ1ª
+
+oÏ::0
+v@$|,3‚_# d€53—"s5e!
+
+¡ŠÄ8ö3ÌbÁ4…k”
+K*: Ôu”Ñ#Á@tX
+ƒ!&0<U#'žáh€Øm'Ñ@Yˆ¢^hÂa-k÷Ü(„Áë.†ƒšNò€|$Cf)@‚f|!
+-ë"è*6CãÈ€*…‚+`jè4ˆ2`È 5’°X¢ÑpÀ’á ñh/H±“`.Ð ¦ëh†ÌõR"]SWB]€~‚†€Š(!
+UÜ‘–¨ÅH
+šÝÀT@ˆF‘`˜B4¨À …ð‰‚A€bZÅbq¸¬²‚ À°‚ ·ÆÃ
+v«Ã"ÈBŽ®Ùlp¨ª¤£XbˆÕݤFŸ‘a²ƒAA&*X†ÇÁ(@ˆ3ºÔ,°(
+}Q+> R!
+)`L¢
+?'I`¨JG‚ƒ¶øbP¾©âñhŽ
+ƒÊñX¸B)0¢Â׸X›Q#} No"tI+ZI!
+¥!ÑMD„l!¡4%ØB‡öBe
+PDY00!
+\0`UL"r(!
+·mè•
+ŽAÉ72,
+ƒ©(PX鲪‚ø “’8 at R%‚a K‡*¡€þD¨ÁŒè2E{$ƒ„ft5†C%!
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/th.bg.gif
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/th.bg.gif (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/img/th.bg.gif 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1 @@
+GIF89a
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/index.html
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/index.html (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/index.html 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,5 @@
+<html>
+<head>
+ <meta http-equiv="Refresh" content="0; URL=home.seam">
+</head>
+</html>
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/main.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/main.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/main.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,139 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ xmlns:a="http://richfaces.org/a4j"
+ template="template.xhtml">
+
+<!-- content -->
+<ui:define name="content">
+
+<div class="section">
+
+ <span class="errors">
+ <h:messages id="messages" globalOnly="true"/>
+ </span>
+
+ <h1>Search Hotels</h1>
+
+ <h:form id="searchCriteria">
+ <fieldset>
+ <h:inputText id="searchString" value="#{hotelSearch.searchString}" style="width: 165px;">
+ <a:ajax event="keyup" render="searchResults" listener="#{hotelSearch.find}"/>
+ </h:inputText>
+  
+ <a:commandButton id="findHotels" value="Find Hotels" actionListener="#{hotelSearch.find}" render="searchResults"/>
+  
+ <a:ajax id="status">
+ <f:facet id="StartStatus" name="start">
+ <h:graphicImage id="SpinnerGif" value="/img/spinner.gif"/>
+ </f:facet>
+ </a:ajax>
+ <br/>
+ <h:outputLabel id="MaximumResultsLabel" for="pageSize">Maximum results:</h:outputLabel> 
+ <h:selectOneMenu id="pageSize" value="#{hotelSearch.pageSize}">
+ <f:selectItem id="PageSize5" itemLabel="5" itemValue="5"/>
+ <f:selectItem id="PageSize10" itemLabel="10" itemValue="10"/>
+ <f:selectItem id="PageSize20" itemLabel="20" itemValue="20"/>
+ </h:selectOneMenu>
+ </fieldset>
+ </h:form>
+
+</div>
+
+<a:outputPanel id="searchResults">
+ <div class="section">
+ <h:outputText id="NoHotelsFoundMessage" value="No Hotels Found" rendered="#{hotels != null and hotels.rowCount==0}"/>
+ <h:dataTable id="hotels" value="#{hotels}" var="hot" rendered="#{hotels.rowCount>0}">
+ <h:column id="column1">
+ <f:facet id="NameFacet" name="header">Name</f:facet>
+ #{hot.name}
+ </h:column>
+ <h:column id="column2">
+ <f:facet id="AddressFacet" name="header">Address</f:facet>
+ #{hot.address}
+ </h:column>
+ <h:column id="column3">
+ <f:facet id="CityStateFacet" name="header">City, State</f:facet>
+ #{hot.city}, #{hot.state}, #{hot.country}
+ </h:column>
+ <h:column id="column4">
+ <f:facet id="ZipFacet" name="header">Zip</f:facet>
+ #{hot.zip}
+ </h:column>
+ <h:column id="column5">
+ <f:facet id="ActionFacet" name="header">Action</f:facet>
+ <s:link id="viewHotel" value="View Hotel" action="#{hotelBooking.selectHotel(hot)}"/>
+ </h:column>
+ </h:dataTable>
+ <s:link id="MoreResultsLink" value="More results" action="#{hotelSearch.nextPage}" rendered="#{hotelSearch.nextPageAvailable}"/>
+ </div>
+</a:outputPanel>
+
+<div class="section">
+ <h1>Current Hotel Bookings</h1>
+</div>
+<div class="section">
+ <h:form id="bookings">
+ <h:outputText id="NoBookingsFoundMessage" value="No Bookings Found" rendered="#{bookings.rowCount==0}"/>
+ <h:dataTable id="bookings" value="#{bookings}" var="book" rendered="#{bookings.rowCount>0}">
+ <h:column id="column1">
+ <f:facet id="NameFacet" name="header">Name</f:facet>
+ #{book.hotel.name}
+ </h:column>
+ <h:column id="column2">
+ <f:facet id="AddressFacet" name="header">Address</f:facet>
+ #{book.hotel.address}
+ </h:column>
+ <h:column id="column3">
+ <f:facet id="CityStateFacet" name="header">City, State</f:facet>
+ #{book.hotel.city}, #{book.hotel.state}
+ </h:column>
+ <h:column id="column4">
+ <f:facet id="CheckInDateFacet" name="header">Check in date</f:facet>
+ <h:outputText id="BookingCheckInDate" value="#{book.checkinDate}"/>
+ </h:column>
+ <h:column id="column5">
+ <f:facet id="CheckOutDateFacet" name="header">Check out date</f:facet>
+ <h:outputText id="BookingCheckOutDate" value="#{book.checkoutDate}"/>
+ </h:column>
+ <h:column id="column6">
+ <f:facet id="ConfNumberFacet" name="header">Confirmation number</f:facet>
+ #{book.id}
+ </h:column>
+ <h:column id="column7">
+ <f:facet id="ActionFacet" name="header">Action</f:facet>
+ <h:commandLink id="cancel" value="Cancel" action="#{bookingList.cancel}"/>
+ </h:column>
+ </h:dataTable>
+ </h:form>
+</div>
+
+</ui:define>
+
+<!-- sidebar -->
+<ui:define name="sidebar">
+
+<h1>State management in Seam</h1>
+<p>
+ State in Seam is <em>contextual</em>. When you click "Find Hotels", the application
+ retrieves a list of hotels from the database and caches it in the session context. When you
+ navigate to one of the hotel records by clicking the "View Hotel" link, a <em>conversation</em>
+ begins. The conversation is attached to a particular tab, in a particular browser window. You can
+ navigate to multiple hotels using "open in new tab" or "open in new window" in your web browser.
+ Each window will execute in the context of a different conversation. The application keeps state
+ associated with your hotel booking in the conversation context, which ensures that the concurrent
+ conversations do not interfere with each other.
+</p>
+
+<p>
+ <a href="#" onclick="window.open('exp/mainExp.html','exp','width=752,height=500,scrollbars=yes');">
+ How does the search page work?
+ </a>
+</p>
+
+</ui:define>
+
+</ui:composition>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/password.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/password.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/password.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,64 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ template="template.xhtml">
+
+<!-- content -->
+<ui:define name="content">
+
+<div class="section">
+ <h1>Change Your Password</h1>
+</div>
+
+<div class="section">
+
+ <div class="entry errors">
+ <h:messages id="messages" globalOnly="true"/>
+ </div>
+
+ <h:form id="setpassword">
+
+ <fieldset>
+
+ <s:decorate id="PasswordDecorate" template="edit.xhtml">
+ <ui:define name="label">Password:</ui:define>
+ <h:inputSecret id="password" value="#{user.password}" required="true"/>
+ </s:decorate>
+
+ <s:decorate id="VerifyDecorate" template="edit.xhtml">
+ <ui:define name="label">Verify:</ui:define>
+ <h:inputSecret id="verify" value="#{changePassword.verify}" required="true"/>
+ </s:decorate>
+
+ <div class="buttonBox">
+ <h:commandButton id="change" value="Change" action="#{changePassword.changePassword}"/>
+  
+ <s:button id="cancel" value="Cancel" view="/main.xhtml"/>
+ </div>
+
+ </fieldset>
+
+ </h:form>
+</div>
+
+</ui:define>
+
+<!-- sidebar -->
+<ui:define name="sidebar">
+<h1>Simple things should be easy</h1>
+<p>
+ (And so should some complex things.) You shouldn't have to write four different classes
+ just to change a password. Traditional J2EE architectures require that developers spend
+ more time writing code to make the frameworks happy, than they ever get to spend writing
+ code to make the user happy. Seam lets you reduce the size of your code dramatically.
+ And that reduces bugs. And it makes refactoring easier. And it makes delivering new
+ functionality quicker. Productivity matters. But with Seam, JSF, EJB 3.0 and jBPM, you
+ don't need to sacrifice the ability to handle complex problems just to achieve great
+ productivity.
+</p>
+</ui:define>
+
+</ui:composition>
\ No newline at end of file
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/register.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/register.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/register.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ xmlns:a="http://richfaces.org/a4j">
+<h:head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <title>JBoss Suites: Seam Framework</title>
+ <link href="css/screen.css" rel="stylesheet" type="text/css" />
+</h:head>
+
+<body id="pgHome">
+
+<div id="document">
+
+ <div id="header">
+ <div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div>
+ </div>
+
+ <div id="container">
+
+ <div id="sidebar">
+ <h1>Integrated multi-layer validation</h1>
+ <p>
+ Robust applications need data validation in several different places. Seam integrates Hibernate Validator,
+ a set of annotations for expressing data model constraints in your domain model classes. Then, these
+ constraints are applied almost completely transparently at three levels of the application: by Seam when
+ the user first enters data, by EJB before persisting data to the database, and, if you use Hibernate to
+ generate your database schema, by the database constraints themselves. Multi-layer validation hardens
+ your application and protects your data. Even better, it's self-documenting, and easy to change when
+ your business rules change.
+ </p>
+ <p>
+ <a href="#" onclick="window.open('exp/registerExp.html','exp','width=752,height=500,scrollbars=yes');">
+ What happens when I register?
+ </a>
+ </p>
+ </div>
+
+ <div id="content">
+
+ <div class="section">
+ <h1>Register</h1>
+ </div>
+
+ <div class="section">
+
+ <div class="entry errors">
+ <h:messages id="messages" globalOnly="true"/>
+ </div>
+
+ <h:form id="registration">
+ <fieldset>
+
+ <s:decorate id="usernameDecorate" template="edit.xhtml">
+ <ui:define name="label">Username:</ui:define>
+ <h:inputText id="username" value="#{user.username}" required="true">
+ <a:ajax event="blur" render="usernameDecorate"/>
+ </h:inputText>
+ </s:decorate>
+
+ <s:decorate id="nameDecorate" template="edit.xhtml">
+ <ui:define name="label">Real Name:</ui:define>
+ <h:inputText id="name" value="#{user.name}" required="true">
+ <a:ajax event="blur" render="nameDecorate"/>
+ </h:inputText>
+ </s:decorate>
+
+ <s:decorate id="passwordDecorate" template="edit.xhtml">
+ <ui:define name="label">Password:</ui:define>
+ <h:inputSecret id="password" value="#{user.password}" required="true"/>
+ </s:decorate>
+
+ <s:decorate id="verifyDecorate" template="edit.xhtml">
+ <ui:define name="label">Verify Password:</ui:define>
+ <h:inputSecret id="verify" value="#{register.verify}" required="true"/>
+ </s:decorate>
+
+ <div class="buttonBox">
+ <h:commandButton id="register" value="Register" action="#{register.register}"/>
+  
+ <s:button id="cancel" value="Cancel" view="/home.xhtml"/>
+ </div>
+
+ </fieldset>
+ </h:form>
+
+ </div>
+
+ </div>
+
+ </div>
+
+ <div id="footer">Created with JBoss EJB 3.0, Seam, JSF (Mojarra) and Facelets</div>
+
+</div>
+
+</body>
+
+</html>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/template.xhtml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/template.xhtml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp/template.xhtml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<f:view contentType="text/html"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:s="http://jboss.com/products/seam/taglib">
+
+<html>
+<h:head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <title>JBoss Suites: Seam Framework</title>
+ <link href="css/screen.css" rel="stylesheet" type="text/css" />
+</h:head>
+<body>
+
+<div id="document">
+ <div id="header">
+ <div id="title"><img src="img/hdr.title.gif" alt="JBoss Suites: seam framework demo"/></div>
+ <div id="status">
+ Welcome #{user.name}
+ | <s:link id="search" view="/main.xhtml" value="Search" propagation="none"/>
+ | <s:link id="settings" view="/password.xhtml" value="Settings" propagation="none"/>
+ | <s:link id="logout" action="#{identity.logout}" value="Logout"/>
+ </div>
+ </div>
+ <div id="container">
+ <div id="sidebar">
+ <ui:insert name="sidebar"/>
+ </div>
+ <div id="content">
+ <ui:insert name="content"/>
+ <ui:include src="conversations.xhtml" />
+ </div>
+ </div>
+ <div id="footer">Created with JBoss Seam, EJB 3, JSF 1.2, Hibernate 3 and Facelets</div>
+</div>
+</body>
+</html>
+</f:view>
Added: branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp-cluster/WEB-INF/web.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp-cluster/WEB-INF/web.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/booking-web/src/main/webapp-cluster/WEB-INF/web.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.5"
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+
+ <distributable/>
+
+ <display-name>Seam Booking Example</display-name>
+
+ <!-- Seam -->
+
+ <listener>
+ <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
+ </listener>
+
+ <servlet>
+ <servlet-name>Seam Resource Servlet</servlet-name>
+ <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>Seam Resource Servlet</servlet-name>
+ <url-pattern>/seam/resource/*</url-pattern>
+ </servlet-mapping>
+
+ <filter>
+ <filter-name>Seam Filter</filter-name>
+ <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>Seam Filter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <!-- JSF -->
+
+ <context-param>
+ <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+ <param-value>.xhtml</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>facelets.DEVELOPMENT</param-name>
+ <param-value>true</param-value>
+ </context-param>
+
+ <servlet>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>*.seam</url-pattern>
+ </servlet-mapping>
+
+ <session-config>
+ <session-timeout>10</session-timeout>
+ </session-config>
+
+</web-app>
Added: branches/community/Seam_2_3/examples-ee6/booking/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/pom.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/pom.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.jboss.seam.examples-ee6</groupId>
+ <artifactId>booking</artifactId>
+ <parent>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>examples-ee6</artifactId>
+ <version>2.3.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <packaging>pom</packaging>
+ <name>Booking Example</name>
+
+ <properties>
+ <example.name>booking</example.name>
+ </properties>
+
+ <modules>
+ <module>booking-ear</module>
+ <module>booking-ejb</module>
+ <module>booking-web</module>
+ <module>booking-tests</module>
+ </modules>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ejb</artifactId>
+ <version>${project.version}</version>
+ <type>ejb</type>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-web</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam.examples-ee6.booking</groupId>
+ <artifactId>booking-ear</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
Added: branches/community/Seam_2_3/examples-ee6/booking/readme.txt
===================================================================
--- branches/community/Seam_2_3/examples-ee6/booking/readme.txt (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/booking/readme.txt 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,19 @@
+Seam Booking Example
+====================
+
+This example demonstrates the use of Seam in a Java EE 6 environment.
+Transaction and persistence context management is handled by the
+EJB container. This example runs on JBoss AS as an EAR
+
+To deploy the example to JBossAS, follow these steps:
+
+* In the example root directory run:
+
+ mvn clean package
+
+* In the booking-ear directory run:
+
+ mvn jboss-as:deploy
+
+* Open this URL in a web browser: http://localhost:8080/seam-booking
+
Added: branches/community/Seam_2_3/examples-ee6/pom.xml
===================================================================
--- branches/community/Seam_2_3/examples-ee6/pom.xml (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/pom.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,893 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-parent</artifactId>
+ <version>2.3.0-SNAPSHOT</version>
+ <relativePath>../jboss-seam-parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>examples-ee6</artifactId>
+ <packaging>pom</packaging>
+
+ <name>Seam 2 EE 6 examples</name>
+ <description>Examples for Seam 2 Framework in Java EE6 enviroment</description>
+
+ <modules>
+ <module>booking</module>
+ </modules>
+
+ <build>
+ <finalName>examples-ee6</finalName>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludedGroups>${tests.excludedGroups}</excludedGroups>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <dependencyManagement>
+ <dependencies>
+ <!-- common provided scope dependencies -->
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.ejb</groupId>
+ <artifactId>ejb-api</artifactId>
+ <version>3.0</version>
+ <type>jar</type>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-jsf2</artifactId>
+ <version>${project.version}</version>
+ <type>ejb</type>
+ <scope>provided</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>jboss</groupId>
+ <artifactId>javassist</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-jsf2</artifactId>
+ <version>${project.version}</version>
+ <type>ejb</type>
+ <scope>provided</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>jboss</groupId>
+ <artifactId>javassist</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.faces</groupId>
+ <artifactId>jsf-api</artifactId>
+ <version>${version.jsf2}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.faces</groupId>
+ <artifactId>jsf-impl</artifactId>
+ <version>${version.jsf2}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax</groupId>
+ <artifactId>javaee-web-api</artifactId>
+ <version>6.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-entitymanager</artifactId>
+ <version>${hibernate-em.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- common test scope dependencies -->
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>5.10</version>
+ <type>jar</type>
+ <scope>test</scope>
+ <classifier>jdk15</classifier>
+ <exclusions>
+ <exclusion>
+ <groupId>org.junit</groupId>
+ <artifactId>junit</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.embedded</groupId>
+ <artifactId>jboss-embedded-all</artifactId>
+ <version>${version.jbossembedded}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam.embedded</groupId>
+ <artifactId>thirdparty-all</artifactId>
+ <version>${version.jbossembedded}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.seam.embedded</groupId>
+ <artifactId>hibernate-all</artifactId>
+ <version>${version.jbossembedded}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>${slf4j.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4j.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <profiles>
+ <profile>
+ <id>distribution</id>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>distribution</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>project</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>ftest-jbossas</id>
+ <properties>
+ <testng.suite>testng.xml</testng.suite>
+ <container>jbossas7</container>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.server</groupId>
+ <artifactId>selenium-server</artifactId>
+ <classifier>standalone</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.client-drivers</groupId>
+ <artifactId>selenium-java-client-driver</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <!-- skip unit tests when running functional tests -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+<!-- this requires to be changed to AS7 plugin -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jboss-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>deploy</id>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>hard-deploy</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>undeploy</id>
+ <phase>post-integration-test</phase>
+ <goals>
+ <goal>hard-undeploy</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+<!-- this above requires to be changed to AS7 plugin -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>selenium-maven-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <id>start-selenium</id>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>start-server</goal>
+ </goals>
+ <configuration>
+ <background>true</background>
+ <port>${selenium.server.port}</port>
+ <logOutput>true</logOutput>
+ <logFile>${selenium.log.dir}/selenium-server.log</logFile>
+ <browserSideLog>${selenium.debug}</browserSideLog>
+ <debug>${selenium.debug}</debug>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>failsafe-maven-plugin</artifactId>
+ <version>2.4.3-alpha-1</version>
+ <configuration>
+ <suiteXmlFiles>
+ <suiteXmlFile>${ftest.resources.dir}/${testng.suite}</suiteXmlFile>
+ </suiteXmlFiles>
+ <argLine>-Xmx748m</argLine>
+ <forkMode>once</forkMode>
+ <properties>
+ <property>
+ <name>listener</name>
+ <value>org.jboss.seam.example.common.test.selenium.SeleniumFunctionalTestListener</value>
+ </property>
+ </properties>
+ <systemProperties>
+ <property>
+ <name>selenium.browser</name>
+ <value>${selenium.browser}</value>
+ </property>
+ <property>
+ <name>selenium.browser.url</name>
+ <value>${selenium.browser.url}</value>
+ </property>
+ <property>
+ <name>example.context.path</name>
+ <value>${example.context.path}</value>
+ </property>
+ <property>
+ <name>selenium.host</name>
+ <value>${selenium.server.host}</value>
+ </property>
+ <property>
+ <name>selenium.server.port</name>
+ <value>${selenium.server.port}</value>
+ </property>
+ <property>
+ <name>selenium.speed</name>
+ <value>${selenium.speed}</value>
+ </property>
+ <property>
+ <name>selenium.timeout</name>
+ <value>${selenium.timeout}</value>
+ </property>
+ <property>
+ <name>selenium.output.dir</name>
+ <value>${selenium.output.dir}</value>
+ </property>
+ <property>
+ <name>jboss.home</name>
+ <value>${jboss.home}</value>
+ </property>
+ <property>
+ <name>container</name>
+ <value>${container}</value>
+ </property>
+ <property>
+ <name>openid.account</name>
+ <value>${openid.account}</value>
+ </property>
+ <property>
+ <name>openid.password</name>
+ <value>${openid.password}</value>
+ </property>
+ <property>
+ <name>xml.namespace.aware</name>
+ <value>${xml.namespace.aware}</value>
+ </property>
+ <!-- WebDriver specific properties -->
+ <property>
+ <name>browser</name>
+ <value>${selenium.browser}</value>
+ </property>
+ <property>
+ <name>server.url</name>
+ <value>${selenium.browser.url}</value>
+ </property>
+ <property>
+ <name>context.path</name>
+ <value>${example.context.path}</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ <executions>
+ <execution>
+ <id>verify</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>integration-test</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>integration-test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <!-- this ant script runs testng natively -->
+ <id>wait-for-application</id>
+ <phase>pre-integration-test</phase>
+ <configuration>
+ <tasks>
+ <echo message="Waiting for ${selenium.browser.url}/${example.context.path}" />
+ <waitfor maxwait="1" maxwaitunit="minute" checkevery="5000">
+ <http url="${selenium.browser.url}/${example.context.path}" errorsBeginAt="404" />
+ </waitfor>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- this ant script runs testng natively -->
+ <id>stop-selenium</id>
+ <phase>post-integration-test</phase>
+ <configuration>
+ <tasks>
+ <echo taskname="selenium-shutdown" message="DGF Errors during shutdown are expected" />
+ <get taskname="selenium-shutdown" src="http://${selenium.server.host}:${selenium.server.port}/selenium-server/driver/?cmd=shutDownSeleniumServer" ignoreerrors="true" dest="${selenium.log.dir}/selenium.stop.msg" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- undeploy the example now in the event of being a directory (exploded) -->
+ <id>undeploy-exploded</id>
+ <phase>post-integration-test</phase>
+ <configuration>
+ <tasks>
+ <delete dir="${jboss.home}/server/${jboss.domain}/deploy/${example.context.path}.war" failonerror="false" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ </profile>
+ <profile>
+ <id>ftest-tomcat</id>
+ <properties>
+ <testng.suite>testng.xml</testng.suite>
+ <container>jboss5</container>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.server</groupId>
+ <artifactId>selenium-server</artifactId>
+ <classifier>standalone</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.client-drivers</groupId>
+ <artifactId>selenium-java-client-driver</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <!-- skip unit tests when running functional tests -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>selenium-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>start-selenium</id>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>start-server</goal>
+ </goals>
+ <configuration>
+ <background>true</background>
+ <port>${selenium.server.port}</port>
+ <logOutput>true</logOutput>
+ <logFile>${selenium.log.dir}/selenium-server.log</logFile>
+ <browserSideLog>${selenium.debug}</browserSideLog>
+ <debug>${selenium.debug}</debug>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>failsafe-maven-plugin</artifactId>
+ <configuration>
+ <suiteXmlFiles>
+ <suiteXmlFile>${ftest.resources.dir}/${testng.suite}</suiteXmlFile>
+ </suiteXmlFiles>
+ <argLine>-Xmx748m</argLine>
+ <forkMode>once</forkMode>
+ <properties>
+ <property>
+ <name>listener</name>
+ <value>org.jboss.seam.example.common.test.selenium.SeleniumFunctionalTestListener</value>
+ </property>
+ </properties>
+ <systemProperties>
+ <property>
+ <name>selenium.browser</name>
+ <value>${selenium.browser}</value>
+ </property>
+ <property>
+ <name>selenium.browser.url</name>
+ <value>${selenium.browser.url}</value>
+ </property>
+ <property>
+ <name>example.context.path</name>
+ <value>${example.context.path}</value>
+ </property>
+ <property>
+ <name>selenium.host</name>
+ <value>${selenium.server.host}</value>
+ </property>
+ <property>
+ <name>selenium.server.port</name>
+ <value>${selenium.server.port}</value>
+ </property>
+ <property>
+ <name>selenium.speed</name>
+ <value>${selenium.speed}</value>
+ </property>
+ <property>
+ <name>selenium.timeout</name>
+ <value>${selenium.timeout}</value>
+ </property>
+ <property>
+ <name>selenium.output.dir</name>
+ <value>${selenium.output.dir}</value>
+ </property>
+ <property>
+ <name>jboss.home</name>
+ <value>${jboss.home}</value>
+ </property>
+ <property>
+ <name>container</name>
+ <value>${container}</value>
+ </property>
+ <property>
+ <name>openid.account</name>
+ <value>${openid.account}</value>
+ </property>
+ <property>
+ <name>openid.password</name>
+ <value>${openid.password}</value>
+ </property>
+ <!-- WebDriver specific properties -->
+ <property>
+ <name>browser</name>
+ <value>${selenium.browser}</value>
+ </property>
+ <property>
+ <name>server.url</name>
+ <value>${selenium.browser.url}</value>
+ </property>
+ <property>
+ <name>context.path</name>
+ <value>${example.context.path}</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ <executions>
+ <execution>
+ <id>verify</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>integration-test</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>integration-test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>deploy-application</id>
+ <phase>pre-integration-test</phase>
+ <configuration>
+ <tasks>
+ <fail unless="catalina.home" message="CATALINA_HOME environment property was not set" />
+ <copy file="${basedir}/../${example.name}-web/target/${example.context.path}.war" todir="${catalina.home}/webapps" overwrite="true" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>wait-for-application</id>
+ <phase>pre-integration-test</phase>
+ <configuration>
+ <tasks>
+ <echo message="Waiting for ${selenium.browser.url}/${example.context.path}" />
+ <waitfor maxwait="1" maxwaitunit="minute" checkevery="5000">
+ <http url="${selenium.browser.url}/${example.context.path}" errorsBeginAt="404" />
+ </waitfor>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>stop-selenium</id>
+ <phase>post-integration-test</phase>
+ <configuration>
+ <tasks>
+ <echo taskname="selenium-shutdown" message="DGF Errors during shutdown are expected" />
+ <get taskname="selenium-shutdown" src="http://${selenium.server.host}:${selenium.server.port}/selenium-server/driver/?cmd=shutDownSeleniumServer" ignoreerrors="true" dest="${selenium.log.dir}/selenium.stop.msg" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>undeploy-application</id>
+ <phase>post-integration-test</phase>
+ <configuration>
+ <tasks>
+ <delete file="${catalina.home}/webapps/${example.context.path}.war" failonerror="false" />
+ <delete dir="${catalina.home}/webapps/${example.context.path}" failonerror="false" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ </profile>
+ <profile>
+ <id>ftest-jbossas-cluster</id>
+ <properties>
+ <testng.suite>testng-cluster.xml</testng.suite>
+ <container>jboss5</container>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.server</groupId>
+ <artifactId>selenium-server</artifactId>
+ <classifier>standalone</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.seleniumhq.selenium.client-drivers</groupId>
+ <artifactId>selenium-java-client-driver</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <!-- skip unit tests when running functional tests -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>selenium-maven-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <id>start-selenium</id>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>start-server</goal>
+ </goals>
+ <configuration>
+ <background>true</background>
+ <port>${selenium.server.port}</port>
+ <logOutput>true</logOutput>
+ <logFile>${selenium.log.dir}/selenium-server.log</logFile>
+ <browserSideLog>${selenium.debug}</browserSideLog>
+ <debug>${selenium.debug}</debug>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>failsafe-maven-plugin</artifactId>
+ <version>2.4.3-alpha-1</version>
+ <configuration>
+ <suiteXmlFiles>
+ <suiteXmlFile>${ftest.resources.dir}/${testng.suite}</suiteXmlFile>
+ </suiteXmlFiles>
+ <argLine>-Xmx748m</argLine>
+ <forkMode>once</forkMode>
+ <properties>
+ <property>
+ <name>listener</name>
+ <value>org.jboss.seam.example.common.test.selenium.SeleniumFunctionalTestListener</value>
+ </property>
+ </properties>
+ <systemProperties>
+ <property>
+ <name>selenium.browser</name>
+ <value>${selenium.browser}</value>
+ </property>
+ <property>
+ <name>selenium.browser.url</name>
+ <value>${selenium.browser.url}</value>
+ </property>
+ <property>
+ <name>example.context.path</name>
+ <value>${example.context.path}</value>
+ </property>
+ <property>
+ <name>selenium.host</name>
+ <value>${selenium.server.host}</value>
+ </property>
+ <property>
+ <name>selenium.server.port</name>
+ <value>${selenium.server.port}</value>
+ </property>
+ <property>
+ <name>selenium.speed</name>
+ <value>${selenium.speed}</value>
+ </property>
+ <property>
+ <name>selenium.timeout</name>
+ <value>${selenium.timeout}</value>
+ </property>
+ <property>
+ <name>selenium.output.dir</name>
+ <value>${selenium.output.dir}</value>
+ </property>
+ <property>
+ <name>jboss.home</name>
+ <value>${jboss.home}</value>
+ </property>
+ <property>
+ <name>container</name>
+ <value>${container}</value>
+ </property>
+ <property>
+ <name>openid.account</name>
+ <value>${openid.account}</value>
+ </property>
+ <property>
+ <name>openid.password</name>
+ <value>${openid.password}</value>
+ </property>
+ <property>
+ <name>xml.namespace.aware</name>
+ <value>${xml.namespace.aware}</value>
+ </property>
+ <!-- WebDriver specific properties -->
+ <property>
+ <name>browser</name>
+ <value>${selenium.browser}</value>
+ </property>
+ <property>
+ <name>server.url</name>
+ <value>${selenium.browser.url}</value>
+ </property>
+ <property>
+ <name>context.path</name>
+ <value>${example.context.path}</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ <executions>
+ <execution>
+ <id>verify</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>integration-test</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>integration-test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>deploy-to-cluster</id>
+ <phase>pre-integration-test</phase>
+ <configuration>
+ <tasks>
+ <copy todir="${jboss.master.configuration}/farm" overwrite="true" flatten="true">
+ <fileset dir="${basedir}/../${example.name}-ear/">
+ <include name="src/main/resources/jboss-seam-${example.name}-ds.xml" />
+ <include name="target/${example.context.path}.ear" />
+ </fileset>
+ </copy>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- this ant script runs testng natively -->
+ <id>wait-for-application</id>
+ <phase>pre-integration-test</phase>
+ <configuration>
+ <tasks>
+ <echo message="Waiting for ${selenium.browser.cluster.url}/${example.context.path}" />
+ <waitfor maxwait="1" maxwaitunit="minute" checkevery="5000">
+ <http url="${selenium.browser.cluster.url}/${example.context.path}" errorsBeginAt="404" />
+ </waitfor>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ <execution>
+ <!-- this ant script runs testng natively -->
+ <id>stop-selenium</id>
+ <phase>post-integration-test</phase>
+ <configuration>
+ <tasks>
+ <echo taskname="selenium-shutdown" message="DGF Errors during shutdown are expected" />
+ <get taskname="selenium-shutdown" src="http://${selenium.server.host}:${selenium.server.port}/selenium-server/driver/?cmd=shutDownSeleniumServer" ignoreerrors="true" dest="${selenium.log.dir}/selenium.stop.msg" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>undeploy-from-cluster</id>
+ <phase>post-integration-test</phase>
+ <configuration>
+ <tasks>
+ <delete failonerror="false">
+ <fileset dir="${jboss.master.configuration}/farm">
+ <include name="jboss-seam-${example.name}-ds.xml" />
+ <include name="${example.context.path}.ear" />
+ </fileset>
+ </delete>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ </profile>
+ </profiles>
+
+ <properties>
+ <!-- artifact versions -->
+ <hibernate.version>3.3.2.GA</hibernate.version>
+ <hibernate-em.version>3.4.0.GA</hibernate-em.version>
+ <richfaces.version>4.1.0.Final</richfaces.version>
+ <slf4j.version>1.5.8</slf4j.version>
+ <java.version>1.5</java.version>
+ <!-- Excluded TestNG groups (ex: slow annotated tests won't run during
+ the test phase) -->
+ <tests.excludedGroups>slow</tests.excludedGroups>
+
+ <!-- dependencies for functional tests -->
+ <ant.junit.version>1.6.2</ant.junit.version>
+ <ftest.version.discriminator />
+ <selenium.browser>*firefoxproxy</selenium.browser>
+ <selenium.browser.url>http://localhost:8080</selenium.browser.url>
+ <selenium.browser.cluster.url>http://localhost:8180</selenium.browser.cluster.url>
+ <selenium.server.port>14444</selenium.server.port>
+ <selenium.server.host>localhost</selenium.server.host>
+ <selenium.speed>0</selenium.speed>
+ <selenium.timeout>30000</selenium.timeout>
+ <selenium.debug>false</selenium.debug>
+ <selenium.log.dir>${project.build.directory}/ftest-logs</selenium.log.dir>
+ <selenium.output.dir>${project.build.directory}/ftest-output</selenium.output.dir>
+ <application.deploy.timeout>300</application.deploy.timeout>
+ <browserSessionReuse>true</browserSessionReuse>
+ <ftest.resources.dir>src/test/resources-ftest</ftest.resources.dir>
+ <context.host>localhost</context.host>
+ <example.context.path>/${project.build.finalName}/</example.context.path>
+ <jboss.master.configuration>${env.JBOSS_HOME}/server/all</jboss.master.configuration>
+ <jboss.home>${env.JBOSS_HOME}</jboss.home>
+ <jboss.domain>default</jboss.domain>
+ <catalina.home>${env.CATALINA_HOME}</catalina.home>
+ <xml.namespace.aware>false</xml.namespace.aware>
+ </properties>
+</project>
+
Added: branches/community/Seam_2_3/examples-ee6/readme.txt
===================================================================
--- branches/community/Seam_2_3/examples-ee6/readme.txt (rev 0)
+++ branches/community/Seam_2_3/examples-ee6/readme.txt 2012-01-26 15:44:11 UTC (rev 14266)
@@ -0,0 +1,106 @@
+Seam Example EE6 Applications
+=========================
+This directory contains the Seam example applications, which have all been
+tested on the latest release of JBoss AS 7.1. Consult the readme.txt file in each of
+the examples to see details.
+
+Below is a list of examples with a brief description. The name of the example,
+refered to later as ${example.name}, is equivalent to the name of the folder
+unless the folder name begins with seam, in which case the prefix "seam" is
+omitted (i.e. seamspace -> space).
+
+----------------------------------------------------------------------
+
+booking/ The Seam Booking demo application for EJB 3.0.
+
+
+
+Deploying and Testing an Example Application
+============================================
+
+These are general instructions for deploying Seam examples. Take a look at the
+readme.txt in the example to see if there are any specific instructions.
+
+How to Build and Deploy an Example on JBoss AS
+----------------------------------------------
+
+1. Download and unzip JBoss AS 7.1 from:
+
+ http://jboss.org/jbossas/downloads
+
+2. Make sure you have an up to date version of Seam:
+
+ http://seamframework.org/Download
+
+3. Build the example by running the following command from the Seam
+ "examples-ee6/${example.name}" directory:
+
+ mvn clean package
+
+ NOTE: Firstly, this command will also run unit tests on that example. To skip the tests add
+ -Dmaven.test.skip=true to the maven call. Secondly, there is an option to deploy an "exploded"
+ archive. For this purpose, use -Pexploded maven profile.
+
+4. Deploy the example by calling g JBOSS_HOME property and running the
+ following command from the Seam "examples-ee6/${example.name}/{example.name}-ear" directory:
+
+ mvn jboss-as:deploy
+
+ To undeploy the example, run:
+
+ mvn jboss-as:undeploy
+
+5. Point your web browser to:
+
+ http://localhost:8080/seam-${example.name}
+
+ Recall that ${example.name} is the name of the example folder unless the
+ folder begins with seam, in which the prefix "seam" is omitted. The
+ context path is set in META-INF/application.xml for EAR deployments.
+
+ However, WAR deployments use a different naming convention for the context
+ path. If you deploy a WAR example, point your web browser to:
+
+ http://localhost:8080/jboss-seam-${example.name}
+
+ The WAR examples are ... TODO later
+
+NOTE: The examples use the H2 database embedded in JBoss AS
+
+
+Running The TestNG Tests
+------------------------
+
+TestNG tests are executed during building of the application using:
+
+ mvn clean package -P<maven_profile>
+
+TODO: Running the TestNG Tests in Eclipse
+
+
+Running functional tests on an example
+=======================================
+
+The following steps describe executing of functional tests in general. If particular example
+does not contain certain profile, it is simply ignored during the maven call.
+
+* Start JBoss AS 4, 5, 6 or Tomcat
+* Set JBOSS_HOME or CATALINA_HOME environment property, respectively
+
+To run functional tests on JBoss AS 4.2:
+
+* mvn clean verify -Pjbossas42,ftest-jbossas
+
+To run functional tests on JBoss AS 5.1:
+
+* mvn clean verify -Pjbossas51,ftest-jbossas
+
+To run functional tests on JBoss AS 6:
+
+* mvn clean verify -Pjbossas6,ftest-jbossas
+
+To run functional tests on Tomcat with Embedded JBoss:
+
+* mvn clean verify -Ptomcat,ftest-tomcat
+
+
Modified: branches/community/Seam_2_3/jboss-seam-jsf2/src/main/java/org/jboss/seam/jsf/SeamApplication.java
===================================================================
--- branches/community/Seam_2_3/jboss-seam-jsf2/src/main/java/org/jboss/seam/jsf/SeamApplication.java 2012-01-26 13:21:15 UTC (rev 14265)
+++ branches/community/Seam_2_3/jboss-seam-jsf2/src/main/java/org/jboss/seam/jsf/SeamApplication.java 2012-01-26 15:44:11 UTC (rev 14266)
@@ -435,13 +435,13 @@
@Override
public void publishEvent(FacesContext context, Class<? extends SystemEvent> systemEventClass, Object source)
{
- // empty publish method
+ application.publishEvent(context, systemEventClass, source);
}
@Override
public void publishEvent(FacesContext context, Class<? extends SystemEvent> systemEventClass, Class<?> sourceBaseType, Object source)
{
- // empty publish method
+ application.publishEvent(context, systemEventClass, sourceBaseType, source);
}
}
Modified: branches/community/Seam_2_3/jboss-seam-ui-jsf2/pom.xml
===================================================================
--- branches/community/Seam_2_3/jboss-seam-ui-jsf2/pom.xml 2012-01-26 13:21:15 UTC (rev 14265)
+++ branches/community/Seam_2_3/jboss-seam-ui-jsf2/pom.xml 2012-01-26 15:44:11 UTC (rev 14266)
@@ -128,12 +128,14 @@
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
+ <scope>provided</scope>
<!-- <version>2.1.1-b04</version> -->
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
+ <scope>provided</scope>
<!-- <version>2.1.1-b04</version> -->
</dependency>
More information about the seam-commits
mailing list