Seam SVN: r13174 - modules/xml/trunk/docs/src/main/docbook/en-US.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-06-15 23:01:38 -0400 (Tue, 15 Jun 2010)
New Revision: 13174
Modified:
modules/xml/trunk/docs/src/main/docbook/en-US/master.xml
modules/xml/trunk/docs/src/main/docbook/en-US/xml-general.xml
Log:
update seam-xml docs
Modified: modules/xml/trunk/docs/src/main/docbook/en-US/master.xml
===================================================================
--- modules/xml/trunk/docs/src/main/docbook/en-US/master.xml 2010-06-16 00:56:36 UTC (rev 13173)
+++ modules/xml/trunk/docs/src/main/docbook/en-US/master.xml 2010-06-16 03:01:38 UTC (rev 13174)
@@ -6,6 +6,7 @@
<toc/>
<title>Seam XML Configuration</title>
+ <xi:include href="xml-introduction.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
<xi:include href="xml-general.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
</book>
\ No newline at end of file
Modified: modules/xml/trunk/docs/src/main/docbook/en-US/xml-general.xml
===================================================================
--- modules/xml/trunk/docs/src/main/docbook/en-US/xml-general.xml 2010-06-16 00:56:36 UTC (rev 13173)
+++ modules/xml/trunk/docs/src/main/docbook/en-US/xml-general.xml 2010-06-16 03:01:38 UTC (rev 13174)
@@ -179,48 +179,67 @@
<programlisting>
<![CDATA[xmlns:ns="urn:java:com.mydomain.package1:com.mydomain.package2"]]>
</programlisting>
- <para>This maps <literal>ns</literal> to the packages <literal>com.mydomain.package1</literal> and <literal>com.mydomain.package2</literal>. These
- packages are searched in order to resolve elements in this namespace.</para>
+ <para>This maps <literal>ns</literal> to the packages <literal>com.mydomain.package1</literal>
+ and <literal>com.mydomain.package2</literal>. These packages are searched in order to
+ resolve elements in this namespace.</para>
+ <para>For example, say you had a class <literal>com.mydomain.package2.Report</literal>.
+ To configure a <literal>Report</literal> bean you
+ would use <literal><ns:Report></literal>. Methods and fields of a bean come
+ from the same namespace as the bean iteself.</para>
</section>
<section>
<title>Overriding and extending beans</title>
- <para>The default is to add a new bean, however there may be cases where you want to modify an existing bean rather than
+ <para>By configuring a bean via XML creates a new bean, however there
+ may be cases where you want to modify an existing bean rather than
adding a new one. The <literal><s:overrides></literal> and
- <literal><s:specializes></literal> tags allow you to do this. The
- <literal><s:overrides></literal> tag prevents the existing bean from being
+ <literal><s:specializes></literal> tags allow you to do this.</para>
+ <para>The <literal><s:overrides></literal> tag prevents the existing bean from being
installed, and registers a new one with the given configuration. The
- <literal><s:specializes></literal> tag allows you to add extra configuration
- to an existing bean.</para>
+ <literal><s:specializes></literal> tag does the same, except that it merges
+ the annotations on the bean with the annotations defined in XML. This has the
+ same effect as modifiying an existing bean.</para>
- <programlisting><![CDATA[
-<test:MyBean>
+ <programlisting role="XML"><![CDATA[
+<test:Report>
<s:specializes>
<test:NewQualifier/>
-</test:MyBean>
+</test:Report>
-<test:OtherBean>
+<test:ReportDatasource>
<s:overrides>
<test:NewQualifier/>
-</test:OtherBean>]]>
+</test:ReportDatasource>]]>
</programlisting>
- <para>The first entry above adds a new qualifier to an existing bean definition. The second prevents the existing bean from being installed, and registers a new bean with a single qualifier.</para>
+ <para>The first entry above adds a new bean with an extra qualifier, in addition to the qualifiers already present,
+ and prevents the existing <literal>Report</literal> bean from being installed.</para>
+ <para>The second prevents the existing bean from being installed, and registers a new bean with a single qualifier.</para>
</section>
<section>
<title>Initial Field Values</title>
- <para>Inital field values can be set in two different ways, in addition to the <literal><s:value></literal> element shown above it can be set as follows:</para>
- <programlisting>
+ <para>Inital field values can be set three different ways as shown below:</para>
+ <programlisting role="XML">
<![CDATA[
-<test:someField>hello world</test:someField>
- ]]>
+<r:MyBean company="Red Hat Inc" />
+
+<r:MyBean>
+ <r:company>Red Hat Inc</r:company>
+</r:MyBean>
+
+<r:MyBean>
+ <r:company>
+ <s:value>Red Hat Inc<s:value>
+ <r:SomeQualifier/>
+ </r:company>
+</r:MyBean>]]>
</programlisting>
- <para>Using this method prevents you from adding any annotations to the field.</para>
+ <para>The third form is the only one that also allows you to add annotations such as qualifiers to the field.</para>
<para>It is possible to set <literal>Map</literal>,<literal>Array</literal> and <literal>Collection</literal> field values. Some examples:</para>
- <programlisting>
- <![CDATA[
+ <programlisting role="XML">
+ <![CDATA[
<test:ArrayFieldValue>
<test:iarray>
<s:value>1</s:value>
@@ -251,13 +270,12 @@
<para>Type conversion is done automatically for all primitives and primitive wrappers, <literal>Date</literal>,
<literal>Calendar</literal>,<literal>Enum</literal> and <literal>Class</literal> fields.
In this instance <literal>ArrayFieldValue.carray</literal> is actually an array of classes, not an array of Strings.</para>
-
</section>
<section>
<title>Configuring methods</title>
<para>It is also possible to configure methods in a similar way to configuring fields:</para>
- <programlisting>
+ <programlisting role="XML" >
<![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
@@ -265,10 +283,10 @@
xmlns:s="urn:java:seam:core"
xmlns:test="urn:java:org.jboss.seam.xml.test.method">
<test:MethodBean>
- <test:method>
+ <test:doStuff>
<s:Produces/>
- </test:method>
- <test:method>
+ </test:doStuff>
+ <test:doStuff>
<s:Produces/>
<test:Qualifier1/>
<s:parameters>
@@ -276,8 +294,8 @@
<test:Qualifier2/>
</test:MethodValueBean>
</s:parameters>
- </test:method>
- <test:method>
+ </test:doStuff>
+ <test:doStuff>
<s:Produces/>
<test:Qualifier1/>
<s:parameters>
@@ -286,62 +304,70 @@
<test:MethodValueBean/>
</s:array>
</s:parameters>
- </test:method>
+ </test:doStuff>
</test:MethodBean>
</beans>
-
+]]>
+</programlisting>
+<programlisting role="java" >
+<![CDATA[
public class MethodBean {
- public int method() {
+ public int doStuff() {
return 1;
}
- public int method(MethodValueBean bean) {
+ public int doStuff(MethodValueBean bean) {
return bean.value + 1;
}
- public void method(MethodValueBean[][] beans) {
+ public void doStuff(MethodValueBean[][] beans) {
//do stuff
}
}
-
- ]]>
- </programlisting>
-
+]]>
+</programlisting>
+
<para>In this instance <literal>MethodBean</literal> has three methods, all of them rather
- imaginatively named <literal>method</literal>. The first <literal><test:method></literal>
+ imaginatively named <literal>doStuff</literal>.</para>
+ <para> The first <literal><test:doStuff></literal>
entry in the XML file configures the method that takes no arguments. The
- <literal><s:Produces></literal> element makes it into a producer method. The next
- entry in the file configures the method that takes a <literal>MethodValueBean</literal>
- as a parameter. The final entry configures a method that takes a two
- dimensional array of<literal>MethodValueBean</literal>'s as a parameter.
- Method parameters are specified inside the <literal><s:parameters></literal>
+ <literal><s:Produces></literal> element makes it into a producer method.
+ </para>
+ <para>The next entry in the file configures the method that takes a
+ <literal>MethodValueBean</literal> as a parameter and the final entry
+ configures a method that takes a two dimensional array of<literal>MethodValueBean</literal>'s
+ as a parameter. For both these methods a qualifier was added to the method parameter and
+ they were made into producer methods.</para>
+ <para>Method parameters are specified inside the <literal><s:parameters></literal>
element. If these parameters have annotation children they are taken to be annotations on
the parameter. </para>
<para>The corresponding Java declaration for the XML above would be:</para>
- <programlisting>
+ <programlisting role="java">
<![CDATA[
-@Produces
-public int method() {//method body}
+public class MethodBean {
-@Produces
-@Qualifier1
-public int method(@Qualifier2 MethodValueBean param) {//method body}
-
-@Produces
-@Qualifier1
-public int method(@Qualifier2 MethodValueBean[][] param) {//method body}
- ]]>
+ @Produces
+ public int doStuff() {//method body}
+
+ @Produces
+ @Qualifier1
+ public int doStuff(@Qualifier2 MethodValueBean param) {//method body}
+
+ @Produces
+ @Qualifier1
+ public int doStuff(@Qualifier2 MethodValueBean[][] param) {//method body}
+} ]]>
</programlisting>
<para>Array parameters can be represented using the <literal><s:array></literal> element,
with a child element to represent the type of the array. E.g.</para>
- <programlisting>
+ <programlisting role="java">
int method(MethodValueBean[] param);
</programlisting>
<para>could be configured via xml using the following:</para>
- <programlisting>
+ <programlisting role="XML">
<![CDATA[
<test:method>
<s:array>
14 years, 3 months
Seam SVN: r13173 - in examples/trunk/booking-simplified: src/main/java/org/jboss/seam/examples/booking and 12 other directories.
by seam-commits@lists.jboss.org
Author: dan.j.allen
Date: 2010-06-15 20:56:36 -0400 (Tue, 15 Jun 2010)
New Revision: 13173
Added:
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountHolder.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountHolderBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Authenticated.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/bootstrap/
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/bootstrap/ApplicationSetup.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/bootstrap/ApplicationSetupBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Credentials.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Identity.java
examples/trunk/booking-simplified/src/main/webapp/resources/components/property/input.xhtml
examples/trunk/booking-simplified/src/main/webapp/resources/components/property/output.xhtml
Removed:
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducer.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducerBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Registered.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockIdentity.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/setup/
examples/trunk/booking-simplified/src/main/webapp/resources/components/property/display.xhtml
examples/trunk/booking-simplified/src/main/webapp/resources/components/property/edit.xhtml
Modified:
examples/trunk/booking-simplified/
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/PasswordManager.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/PasswordManagerBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Registrar.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/RegistrarBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingHistory.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingHistoryBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/inventory/HotelSearchBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/Booking.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/User.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Authenticator.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/AuthenticatorBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockCredentials.java
examples/trunk/booking-simplified/src/main/resources/META-INF/persistence.xml
examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml
examples/trunk/booking-simplified/src/main/webapp/WEB-INF/fragments/account.xhtml
examples/trunk/booking-simplified/src/main/webapp/WEB-INF/fragments/hotel.xhtml
examples/trunk/booking-simplified/src/main/webapp/book.xhtml
examples/trunk/booking-simplified/src/main/webapp/confirm.xhtml
examples/trunk/booking-simplified/src/main/webapp/hotel.xhtml
examples/trunk/booking-simplified/src/main/webapp/password.xhtml
examples/trunk/booking-simplified/src/main/webapp/register.xhtml
examples/trunk/booking-simplified/src/main/webapp/search.xhtml
examples/trunk/booking-simplified/src/test/java/org/jboss/seam/examples/booking/booking/BookingAgentTest.java
Log:
change currentUser to dependent-scoped producer
use critiera query for history
use UIInputContainer
renames
Property changes on: examples/trunk/booking-simplified
___________________________________________________________________
Name: svn:ignore
- .settings
.classpath
.project
faces-config.NavData
nbactions*
target
+ .settings
.classpath
.project
faces-config.NavData
nbactions*
target
Copied: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountHolder.java (from rev 13171, examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducer.java)
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountHolder.java (rev 0)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountHolder.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -0,0 +1,19 @@
+package org.jboss.seam.examples.booking.account;
+
+import javax.ejb.Local;
+import org.jboss.seam.examples.booking.model.User;
+
+/**
+ * The <strong>AccountProducer</strong> produces the object that
+ * represents the current user's account information. The account
+ * information is represented by the {@link User} entity.
+ *
+ * @author Dan Allen
+ */
+@Local
+public interface AccountHolder
+{
+ User getCurrentAccount();
+
+ void onLogin(User user);
+}
Copied: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountHolderBean.java (from rev 13171, examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducerBean.java)
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountHolderBean.java (rev 0)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountHolderBean.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -0,0 +1,38 @@
+package org.jboss.seam.examples.booking.account;
+
+import javax.ejb.Stateful;
+import javax.enterprise.context.SessionScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.Typed;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.jboss.seam.examples.booking.model.User;
+import org.slf4j.Logger;
+
+/**
+ * @author Dan Allen
+ */
+@Stateful
+@SessionScoped
+public class AccountHolderBean implements AccountHolder
+{
+ @Inject
+ private Logger log;
+
+ private User currentUser;
+
+ @Produces
+ @Authenticated
+ @Named("currentUser")
+ public User getCurrentAccount()
+ {
+ return currentUser;
+ }
+
+ public void onLogin(@Observes @Authenticated User user)
+ {
+ currentUser = user;
+ }
+}
Deleted: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducer.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducer.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducer.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,17 +0,0 @@
-package org.jboss.seam.examples.booking.account;
-
-import javax.ejb.Local;
-import org.jboss.seam.examples.booking.model.User;
-
-/**
- * The <strong>AccountProducer</strong> produces the object that
- * represents the current user's account information. The account
- * information is represented by the {@link User} entity.
- *
- * @author Dan Allen
- */
-@Local
-public interface AccountProducer
-{
- User getCurrentAccount();
-}
Deleted: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducerBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducerBean.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducerBean.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,43 +0,0 @@
-package org.jboss.seam.examples.booking.account;
-
-import javax.ejb.Stateless;
-import javax.enterprise.context.SessionScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
-import org.jboss.seam.examples.booking.model.User;
-import org.jboss.seam.examples.booking.security.MockCredentials;
-import org.slf4j.Logger;
-
-/**
- * @author Dan Allen
- */
-@Stateless
-public class AccountProducerBean implements AccountProducer
-{
- @Inject
- private Logger log;
-
- @PersistenceContext
- private EntityManager em;
-
- @Inject
- MockCredentials credentials;
-
- @Produces
- @Registered
- @Named("currentUser")
- @SessionScoped
- public User getCurrentAccount()
- {
- User result = em.find(User.class, credentials.getUsername());
- if (result == null)
- {
- result = new User();
- }
- return result;
- }
-}
Copied: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Authenticated.java (from rev 13171, examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Registered.java)
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Authenticated.java (rev 0)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Authenticated.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -0,0 +1,31 @@
+package org.jboss.seam.examples.booking.account;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+import org.jboss.seam.examples.booking.model.User;
+
+/**
+ * A binding type representing something that is registererd.
+ * In this simple application the only thing that can be
+ * registered is a {@link User}.
+ *
+ * @author Dan Allen
+ */
+@Target({TYPE, METHOD, PARAMETER, FIELD})
+@Retention(RUNTIME)
+@Documented
+@Qualifier
+public @interface Authenticated
+{
+}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/PasswordManager.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/PasswordManager.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/PasswordManager.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -20,6 +20,4 @@
@NotNull
@Size(min = 5, max = 15)
String getConfirmPassword();
-
- void destroy();
}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/PasswordManagerBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/PasswordManagerBean.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/PasswordManagerBean.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,6 +1,5 @@
package org.jboss.seam.examples.booking.account;
-import javax.annotation.PreDestroy;
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
@@ -31,7 +30,7 @@
private RegistrationFormControls formControls;
@Inject
- @Registered
+ @Authenticated
private User user;
private String confirmPassword;
@@ -42,15 +41,13 @@
{
if (user.getPassword().equals(confirmPassword))
{
- // FIXME: dirty hack, can't merge a managed bean
- em.merge(new User(user.getName(), user.getUsername(), user.getPassword()));
- user.setPassword(null);
+ em.merge(user);
messages.info(new BundleKey("messages.properties", "account.passwordChanged")).textDefault("Password successfully updated.");
changed = true;
}
else
{
- // FIME reverting isn't going to work here
+ // FIXME reverting isn't going to work here
// revertUser();
confirmPassword = null;
messages.error(new BundleKey("messages.properties", "account.passwordsDoNotMatch")).textDefault("Passwords do not match. Please re-type the new password.");
@@ -71,9 +68,4 @@
{
return this.confirmPassword;
}
-
- @PreDestroy
- public void destroy()
- {
- }
}
Deleted: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Registered.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Registered.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Registered.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,31 +0,0 @@
-package org.jboss.seam.examples.booking.account;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.inject.Qualifier;
-
-import org.jboss.seam.examples.booking.model.User;
-
-/**
- * A binding type representing something that is registererd.
- * In this simple application the only thing that can be
- * registered is a {@link User}.
- *
- * @author Dan Allen
- */
-@Target({TYPE, METHOD, PARAMETER, FIELD})
-@Retention(RUNTIME)
-@Documented
-@Qualifier
-public @interface Registered
-{
-}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Registrar.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Registrar.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/Registrar.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -26,6 +26,4 @@
String getConfirmPassword();
void setConfirmPassword(String password);
-
- void destroy();
}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/RegistrarBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/RegistrarBean.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/RegistrarBean.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,6 +1,5 @@
package org.jboss.seam.examples.booking.account;
-import javax.annotation.PreDestroy;
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
@@ -117,9 +116,4 @@
return true;
}
-
- @PreDestroy
- public void destroy()
- {
- }
}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -37,7 +37,7 @@
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
-import org.jboss.seam.examples.booking.account.Registered;
+import org.jboss.seam.examples.booking.account.Authenticated;
import org.jboss.seam.examples.booking.controls.BookingFormControls;
import org.jboss.seam.examples.booking.model.Booking;
import org.jboss.seam.examples.booking.model.Hotel;
@@ -60,9 +60,6 @@
@PersistenceContext(type = EXTENDED)
private EntityManager em;
- // @Inject
- // private Conversation conversation;
-
@Inject
private MessageFactory mf;
@@ -73,7 +70,7 @@
private BookingFormControls formControls;
@Inject
- @Registered
+ @Authenticated
private User user;
// @Inject @Fires @Confirmed Event<BookingEvent> bookingConfirmedEvent;
@@ -91,12 +88,11 @@
{
// NOTE get a fresh reference that's managed by the conversational
// persistence context
- if (id != null)
+ hotelSelection = em.find(Hotel.class, id);
+ if (hotelSelection != null)
{
- hotelSelection = em.find(Hotel.class, id);
log.info(mf.info("Selected the {0} in {1}").textParams(hotelSelection.getName(), hotelSelection.getCity()).build().getText());
}
- // conversation.begin();
}
public void bookHotel()
@@ -139,7 +135,6 @@
manager.fireEvent(new BookingEvent(booking), ConfirmedLiteral.INSTANCE);
log.info(mf.info("New booking at the {0} confirmed for {1}").textParams(booking.getHotel().getName(), booking.getUser().getName()).build().getText());
messages.info(new BundleKey("messages.properties", "booking.confirmed")).textDefault("Booking confirmed.");
- // conversation.end();
}
@End
@@ -147,7 +142,6 @@
{
booking = null;
hotelSelection = null;
- // conversation.end();
}
@Produces
@@ -163,12 +157,7 @@
@RequestScoped
public Hotel getHotelSelection()
{
- Hotel hotel = booking != null ? booking.getHotel() : hotelSelection;
- if (hotel == null)
- {
- hotel = new Hotel();
- }
- return hotel;
+ return booking != null ? booking.getHotel() : hotelSelection;
}
public boolean isBookingValid()
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingHistory.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingHistory.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingHistory.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -7,13 +7,12 @@
/**
* @author Dan Allen
*/
+@Local
public interface BookingHistory
{
List<Booking> getBookingsForCurrentUser();
void cancelBooking(Booking booking);
- void destroy();
-
void afterBookingConfirmed(BookingEvent bookingEvent);
}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingHistoryBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingHistoryBean.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingHistoryBean.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -23,22 +23,28 @@
*/
package org.jboss.seam.examples.booking.booking;
-import java.util.ArrayList;
import java.util.List;
-import javax.annotation.PreDestroy;
import javax.ejb.Stateful;
import javax.enterprise.context.SessionScoped;
import javax.enterprise.event.Observes;
+import javax.enterprise.event.TransactionPhase;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.JoinType;
+import javax.persistence.criteria.Root;
+import org.jboss.seam.examples.booking.account.AccountHolder;
-import org.jboss.seam.examples.booking.account.Registered;
+import org.jboss.seam.examples.booking.account.Authenticated;
import org.jboss.seam.examples.booking.model.Booking;
-import org.jboss.seam.examples.booking.model.User;
+import org.jboss.seam.examples.booking.model.Booking_;
+import org.jboss.seam.examples.booking.model.User_;
+import org.jboss.seam.examples.booking.security.Identity;
import org.jboss.seam.international.status.Messages;
import org.jboss.seam.international.status.builder.BundleKey;
import org.slf4j.Logger;
@@ -51,7 +57,6 @@
@SessionScoped
public class BookingHistoryBean implements BookingHistory
{
-
@Inject
private Logger log;
@@ -62,31 +67,45 @@
private Messages messages;
@Inject
- @Registered
- private User user;
+ private Identity identity;
- private final List<Booking> bookingsForUser = new ArrayList<Booking>();
+ @Inject
+ private AccountHolder accountProducer;
+ private List<Booking> bookingsForUser = null;
+
@Produces
- @Registered
+ @Authenticated
@Named("bookings")
- @SessionScoped
public List<Booking> getBookingsForCurrentUser()
{
- bookingsForUser.clear();
- bookingsForUser.addAll(em.createQuery("select b from Booking b join fetch b.hotel where b.user.username = :username order by b.checkinDate").setParameter("username", user.getUsername()).getResultList());
+ if (identity.isLoggedIn() && bookingsForUser == null)
+ {
+ String username = accountProducer.getCurrentAccount().getUsername();
+ CriteriaBuilder builder = em.getCriteriaBuilder();
+ CriteriaQuery<Booking> cquery = builder.createQuery(Booking.class);
+ Root<Booking> booking = cquery.from(Booking.class);
+ booking.fetch(Booking_.hotel, JoinType.INNER);
+ cquery.select(booking)
+ .where(builder.equal(booking.get(Booking_.user).get(User_.username), username))
+ .orderBy(builder.asc(booking.get(Booking_.checkinDate)));
+
+ bookingsForUser = em.createQuery(cquery).getResultList();
+ }
return bookingsForUser;
}
- // TODO should probably observe @AfterTransactionSuccess (but it is broken)
- public void afterBookingConfirmed(@Observes @Confirmed final BookingEvent bookingEvent)
+ public void afterBookingConfirmed(@Observes(during = TransactionPhase.AFTER_SUCCESS) @Confirmed final BookingEvent bookingEvent)
{
- getBookingsForCurrentUser();
+ if (bookingsForUser != null)
+ {
+ bookingsForUser.add(bookingEvent.getBooking());
+ }
}
public void cancelBooking(final Booking selectedBooking)
{
- log.info("Canceling booking {0} for {1}", selectedBooking.getId(), user.getName());
+ log.info("Canceling booking {0} for {1}", selectedBooking.getId(), accountProducer.getCurrentAccount().getName());
Booking booking = em.find(Booking.class, selectedBooking.getId());
if (booking != null)
{
@@ -101,9 +120,4 @@
bookingsForUser.remove(selectedBooking);
}
- @PreDestroy
- public void destroy()
- {
- }
-
}
Copied: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/bootstrap/ApplicationSetup.java (from rev 13171, examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/setup/SetupBean.java)
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/bootstrap/ApplicationSetup.java (rev 0)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/bootstrap/ApplicationSetup.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., 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.
+ */
+package org.jboss.seam.examples.booking.bootstrap;
+
+import javax.ejb.Local;
+import javax.faces.event.PostConstructApplicationEvent;
+
+/**
+ * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
+ *
+ */
+@Local
+public interface ApplicationSetup
+{
+ public void init(final PostConstructApplicationEvent event);
+}
Copied: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/bootstrap/ApplicationSetupBean.java (from rev 13171, examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/setup/ApplicationSetupBean.java)
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/bootstrap/ApplicationSetupBean.java (rev 0)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/bootstrap/ApplicationSetupBean.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -0,0 +1,90 @@
+package org.jboss.seam.examples.booking.bootstrap;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.Stateless;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Alternative;
+import javax.faces.event.PostConstructApplicationEvent;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+
+import org.jboss.seam.examples.booking.model.Hotel;
+import org.jboss.seam.examples.booking.model.User;
+
+/**
+ * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
+ */
+@Stateless
+@Alternative
+public class ApplicationSetupBean implements ApplicationSetup
+{
+ @PersistenceContext
+ private EntityManager em;
+
+ private final List<User> users = new ArrayList<User>();
+ private final List<Hotel> hotels = new ArrayList<Hotel>();
+
+ public ApplicationSetupBean()
+ {
+ users.add(new User("Dan Allen", "dan", "laurel"));
+ users.add(new User("Pete Muir", "pete", "edinburgh"));
+ users.add(new User("Lincoln Baxter III", "lincoln", "charlotte"));
+ users.add(new User("Shane", "shane", "brisbane"));
+ users.add(new User("Gavin King", "gavin", "mexico"));
+
+ hotels.add(new Hotel(129, 3, "Marriott Courtyard", "Tower Place, Buckhead", "Atlanta", "GA", "30305", "USA"));
+ hotels.add(new Hotel(84, 4, "Doubletree Atlanta-Buckhead", "3342 Peachtree Road NE", "Atlanta", "GA", "30326", "USA"));
+ hotels.add(new Hotel(289, 4, "W New York - Union Square", "201 Park Avenue South", "New York", "NY", "10003", "USA"));
+ hotels.add(new Hotel(219, 3, "W New York", "541 Lexington Avenue", "New York", "NY", "10022", "USA"));
+ hotels.add(new Hotel(250, 3, "Hotel Rouge", "1315 16th Street NW", "Washington", "DC", "20036", "USA"));
+ hotels.add(new Hotel(159, 4, "70 Park Avenue Hotel", "70 Park Avenue, 38th St", "New York", "NY", "10016", "USA"));
+ hotels.add(new Hotel(198, 4, "Parc 55", "55 Cyril Magnin Street", "San Francisco", "CA", "94102", "USA"));
+ hotels.add(new Hotel(189, 4, "Conrad Miami", "1395 Brickell Ave", "Miami", "FL", "33131", "USA"));
+ hotels.add(new Hotel(111, 4, "Grand Hyatt", "345 Stockton Street", "San Francisco", "CA", "94108", "USA"));
+ hotels.add(new Hotel(54, 1, "Super 8 Eau Claire Campus Area", "1151 W MacArthur Ave", "Eau Claire", "WI", "54701", "USA"));
+ hotels.add(new Hotel(199, 4, "San Francisco Marriott", "55 Fourth Street", "San Francisco", "CA", "94103", "USA"));
+ hotels.add(new Hotel(543, 4, "Hilton Diagonal Mar", "Passeig del Taulat 262-264", "Barcelona", "Catalunya", "08019", "ES"));
+ hotels.add(new Hotel(335, 5, "Hilton Tel Aviv", "Independence Park", "Tel Aviv", null, "63405", "IL"));
+ hotels.add(new Hotel(242, 5, "InterContinental Hotel Tokyo Bay", "1-15-2 Kaigan", "Tokyo", "Minato", "105", "JP"));
+ hotels.add(new Hotel(130, 4, "Hotel Beaulac", " Esplanade Léopold-Robert 2", "Neuchatel", null, "2000", "CH"));
+ hotels.add(new Hotel(266, 5, "Conrad Treasury Place", "130 William Street", "Brisbane", "QL", "4001", "AU"));
+ hotels.add(new Hotel(170, 4, "Ritz-Carlton Montreal", "1228 Sherbrooke St West", "Montreal", "Quebec", "H3G1H6", "CA"));
+ hotels.add(new Hotel(179, 4, "Ritz-Carlton Atlanta", "181 Peachtree St NE", "Atlanta", "GA", "30303", "USA"));
+ hotels.add(new Hotel(145, 4, "Swissotel Sydney", "68 Market Street", "Sydney", "NSW", "2000", "AU"));
+ hotels.add(new Hotel(178, 4, "Meliá White House", "Albany Street Regents Park", "London", null, "NW13UP", "GB"));
+ hotels.add(new Hotel(159, 3, "Hotel Allegro", "171 W Randolph Street", "Chicago", "IL", "60601", "USA"));
+ hotels.add(new Hotel(296, 5, "Caesars Palace", "3570 Las Vegas Blvd S", "Las Vegas", "NV", "89109", "USA"));
+ hotels.add(new Hotel(300, 4, "Mandalay Bay Resort & Casino", "3950 Las Vegas Blvd S", "Las Vegas", "NV", "89119", "USA"));
+ hotels.add(new Hotel(100, 2, "Hotel Cammerpoorte", "Nationalestraat 38-40", "Antwerp", null, "2000", "BE"));
+ }
+
+ public void init(@Observes final PostConstructApplicationEvent event)
+ {
+ try {
+
+ for (User u : users)
+ {
+ if (em.find(User.class, u.getUsername()) == null)
+ {
+ em.persist(u);
+ }
+ }
+
+ for (Hotel h : hotels)
+ {
+ em.persist(h);
+ }
+ }
+ catch (ConstraintViolationException e)
+ {
+ for (ConstraintViolation v : e.getConstraintViolations())
+ {
+ System.out.println(v.getPropertyPath() + ": " + v.getMessage());
+ }
+ }
+ }
+}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/inventory/HotelSearchBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/inventory/HotelSearchBean.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/inventory/HotelSearchBean.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -108,9 +108,17 @@
CriteriaQuery<Hotel> cquery = builder.createQuery(Hotel.class);
Root<Hotel> hotel = cquery.from(Hotel.class);
// QUESTION can like create the pattern for us?
- cquery.select(hotel).where(builder.or(builder.like(builder.lower(hotel.get(Hotel_.name)), criteria.getSearchPattern()), builder.like(builder.lower(hotel.get(Hotel_.city)), criteria.getSearchPattern()), builder.like(builder.lower(hotel.get(Hotel_.zip)), criteria.getSearchPattern()), builder.like(builder.lower(hotel.get(Hotel_.address)), criteria.getSearchPattern())));
+ cquery.select(hotel)
+ .where(builder.or(
+ builder.like(builder.lower(hotel.get(Hotel_.name)), criteria.getSearchPattern()),
+ builder.like(builder.lower(hotel.get(Hotel_.city)), criteria.getSearchPattern()),
+ builder.like(builder.lower(hotel.get(Hotel_.zip)), criteria.getSearchPattern()),
+ builder.like(builder.lower(hotel.get(Hotel_.address)), criteria.getSearchPattern())));
- List<Hotel> results = em.createQuery(cquery).setMaxResults(criteria.getFetchSize()).setFirstResult(criteria.getFetchOffset()).getResultList();
+ List<Hotel> results = em.createQuery(cquery)
+ .setMaxResults(criteria.getFetchSize())
+ .setFirstResult(criteria.getFetchOffset())
+ .getResultList();
nextPageAvailable = results.size() > criteria.getPageSize();
if (nextPageAvailable)
@@ -122,6 +130,7 @@
{
hotels = results;
}
- log.info(mf.info("Found {0} hotel(s) matching search term ''{1}'' (limit {2})").textParams(hotels.size(), criteria.getQuery(), criteria.getPageSize()).build().getText());
+ log.info(mf.info("Found {0} hotel(s) matching search term [ {1} ] (limit {2})")
+ .textParams(hotels.size(), criteria.getQuery(), criteria.getPageSize()).build().getText());
}
}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/Booking.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/Booking.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/Booking.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -151,7 +151,8 @@
{
this.smoking = smoking;
}
-
+
+ //@Size(min = 1, max = 3)
public int getBeds()
{
return beds;
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/User.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/User.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/User.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -43,7 +43,7 @@
* @author Dan Allen
*/
@Entity
-@Table(name = "customer")
+@Table(name = "traveler")
@Typed()
public class User implements Serializable
{
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Authenticator.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Authenticator.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Authenticator.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -12,4 +12,5 @@
@Local
public interface Authenticator // extends org.jboss.seam.security.Authenticator
{
+ public boolean authenticate();
}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/AuthenticatorBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/AuthenticatorBean.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/AuthenticatorBean.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,7 +1,14 @@
package org.jboss.seam.examples.booking.security;
import javax.ejb.Stateless;
+import javax.enterprise.event.Event;
import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import org.jboss.seam.examples.booking.account.Authenticated;
+import org.jboss.seam.examples.booking.model.User;
+import org.jboss.seam.international.status.Messages;
+import org.jboss.seam.international.status.builder.BundleKey;
import org.slf4j.Logger;
@@ -16,11 +23,40 @@
{
@Inject
private Logger log;
+
+ @PersistenceContext
+ private EntityManager em;
+ @Inject
+ private Messages messages;
+
+ @Inject
+ private Credentials credentials;
+
+ @Inject @Authenticated
+ private Event<User> loginEventSrc;
+
public boolean authenticate()
{
- log.info("Logging you in!");
- return true;
+ log.info("Logging in " + credentials.getUsername());
+ if (credentials.getUsername() == null || credentials.getPassword() == null)
+ {
+ messages.info(new BundleKey("messages.properties", "identity.loginFailed"));
+ return false;
+ }
+
+ User user = em.find(User.class, credentials.getUsername());
+ if (user != null && user.getPassword().equals(credentials.getPassword()))
+ {
+ loginEventSrc.fire(user);
+ messages.info(new BundleKey("messages.properties", "identity.loggedIn"));
+ return true;
+ }
+ else
+ {
+ messages.info(new BundleKey("messages.properties", "identity.loginFailed"));
+ return false;
+ }
}
}
Added: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Credentials.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Credentials.java (rev 0)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Credentials.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -0,0 +1,8 @@
+package org.jboss.seam.examples.booking.security;
+
+public interface Credentials {
+ String getUsername();
+ void setUsername(String username);
+ String getPassword();
+ void setPassword(String password);
+}
Copied: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Identity.java (from rev 13167, examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockIdentity.java)
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Identity.java (rev 0)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/Identity.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., 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.
+ */
+package org.jboss.seam.examples.booking.security;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.SessionScoped;
+import javax.faces.context.FacesContext;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.servlet.http.HttpSession;
+
+/**
+ * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
+ */
+@Named("identity")
+@SessionScoped
+public class Identity implements Serializable
+{
+ private boolean loggedIn;
+
+ @Inject
+ private FacesContext facesContext;
+
+ @Inject
+ private Authenticator authenticator;
+
+ @Inject
+ private Credentials credentials;
+
+ public String getUsername()
+ {
+ return credentials.getUsername();
+ }
+
+ public boolean isLoggedIn()
+ {
+ return loggedIn;
+ }
+
+ public void login()
+ {
+ if (authenticator.authenticate())
+ {
+ loggedIn = true;
+ credentials.setPassword(null);
+ }
+ }
+
+ public void logout()
+ {
+ loggedIn = false;
+ HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
+ session.invalidate();
+ }
+
+}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockCredentials.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockCredentials.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockCredentials.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -28,11 +28,10 @@
/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
- *
*/
@Named("credentials")
@SessionScoped
-public class MockCredentials implements Serializable
+public class MockCredentials implements Credentials, Serializable
{
private String username;
private String password;
Deleted: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockIdentity.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockIdentity.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockIdentity.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,84 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., 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.
- */
-package org.jboss.seam.examples.booking.security;
-
-import java.io.Serializable;
-
-import javax.enterprise.context.SessionScoped;
-import javax.faces.context.FacesContext;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.servlet.http.HttpSession;
-
-import org.jboss.seam.international.status.Messages;
-import org.jboss.seam.international.status.builder.BundleKey;
-
-/**
- * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
- *
- */
-@Named("identity")
-@SessionScoped
-public class MockIdentity implements Serializable
-{
- private boolean loggedIn;
-
- @Inject
- FacesContext context;
-
- @Inject
- Messages messages;
-
- @Inject
- MockCredentials credentials;
-
- public boolean isLoggedIn()
- {
- return loggedIn;
- }
-
- public void setLoggedIn(final boolean loggedIn)
- {
- this.loggedIn = loggedIn;
- }
-
- public void login()
- {
- if ((credentials.getUsername() != null) && !"".equals(credentials.getUsername().trim()))
- {
- loggedIn = true;
- messages.info(new BundleKey("messages.properties", "identity.loggedIn"));
- }
- else
- {
- messages.info(new BundleKey("messages.properties", "identity.loginFailed"));
- }
- }
-
- public void logout()
- {
- loggedIn = false;
- HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
- session.invalidate();
- }
-
-}
Modified: examples/trunk/booking-simplified/src/main/resources/META-INF/persistence.xml
===================================================================
--- examples/trunk/booking-simplified/src/main/resources/META-INF/persistence.xml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/resources/META-INF/persistence.xml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -4,10 +4,10 @@
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="booking">
-<!-- <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>-->
+ <!--<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>-->
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/__default</jta-data-source>
<!--
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/DefaultDS</jta-data-source>
<jta-data-source>jdbc/__arquillian</jta-data-source>
-->
@@ -15,7 +15,8 @@
<!-- Properties for Hibernate (default provider for JBoss AS) -->
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true"/>
- <property name="hibernate.format_sql" value="true"/>
+ <!-- Only format when you need to debug, because it slows things down -->
+ <property name="hibernate.format_sql" value="false"/>
<!-- Properties for EclipseLink (default provider for GlassFish) -->
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
Modified: examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,14 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
-<beans 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/beans_1_0.xsd">
-
- <alternatives>
- <class>org.jboss.seam.examples.booking.setup.ApplicationSetupBean</class>
- </alternatives>
-
- <interceptors>
- <class>org.jboss.seam.faces.context.conversation.ConversationBoundaryInterceptor</class>
- </interceptors>
-</beans>
\ No newline at end of file
+<beans 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/beans_1_0.xsd">
+ <interceptors>
+ <class>org.jboss.seam.faces.context.conversation.ConversationBoundaryInterceptor</class>
+ </interceptors>
+ <alternatives>
+ <class>org.jboss.seam.examples.booking.bootstrap.ApplicationSetupBean</class>
+ </alternatives>
+</beans>
Modified: examples/trunk/booking-simplified/src/main/webapp/WEB-INF/fragments/account.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/WEB-INF/fragments/account.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/WEB-INF/fragments/account.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -6,7 +6,7 @@
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://http://java.sun.com/jsf/composite/components/property">
- <p:display label="Username" value="#{currentUser.username}"/>
- <p:display label="Real name" value="#{currentUser.name}"/>
+ <p:output label="Username" value="#{currentUser.username}"/>
+ <p:output label="Real name" value="#{currentUser.name}"/>
</ui:composition>
Modified: examples/trunk/booking-simplified/src/main/webapp/WEB-INF/fragments/hotel.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/WEB-INF/fragments/hotel.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/WEB-INF/fragments/hotel.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -6,17 +6,17 @@
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://http://java.sun.com/jsf/composite/components/property">
- <p:display label="Name" value="#{hotel.name}"/>
- <p:display label="Address" value="#{hotel.address}"/>
- <p:display label="City" value="#{hotel.city}"/>
- <p:display label="State" value="#{hotel.state}"/>
- <p:display label="Zip" value="#{hotel.zip}"/>
- <p:display label="Country" value="#{hotel.country}"/>
- <p:display label="Class" override="true">
+ <p:output label="Name" value="#{hotel.name}"/>
+ <p:output label="Address" value="#{hotel.address}"/>
+ <p:output label="City" value="#{hotel.city}"/>
+ <p:output label="State" value="#{hotel.state}"/>
+ <p:output label="Zip" value="#{hotel.zip}"/>
+ <p:output label="Country" value="#{hotel.country}"/>
+ <p:output label="Class" override="true">
<h:graphicImage value="/img/#{hotel.stars}-star.gif" style="padding-top: 4px;"/>
- </p:display>
- <p:display label="Nightly rate" value="#{hotel.price}">
+ </p:output>
+ <p:output label="Nightly rate" value="#{hotel.price}">
<f:convertNumber for="output" type="currency" currencySymbol="$"/>
- </p:display>
+ </p:output>
</ui:composition>
Modified: examples/trunk/booking-simplified/src/main/webapp/book.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/book.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/book.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -25,54 +25,54 @@
<h:form id="bookingForm">
<fieldset>
- <p:edit id="checkinDate" label="Check-in date">
+ <p:input id="checkinDate" label="Check-in date">
<h:inputText id="input" value="#{booking.checkinDate}" binding="#{bookingFormControls.checkinDate}">
<f:convertDateTime type="date" pattern="MM/dd/yyyy"/>
</h:inputText>
- </p:edit>
+ </p:input>
- <p:edit id="checkoutDate" label="Check-out date">
+ <p:input id="checkoutDate" label="Check-out date">
<h:inputText id="input" value="#{booking.checkoutDate}" binding="#{bookingFormControls.checkoutDate}">
<f:convertDateTime type="date" pattern="MM/dd/yyyy"/>
</h:inputText>
- </p:edit>
+ </p:input>
- <p:edit id="beds" label="Room preference">
+ <p:input id="roomPreference">
<h:selectOneMenu id="input" value="#{booking.beds}">
<f:selectItem itemLabel="One king-size bed" itemValue="1"/>
<f:selectItem itemLabel="Two double beds" itemValue="2"/>
<f:selectItem itemLabel="Three beds" itemValue="3"/>
</h:selectOneMenu>
- </p:edit>
+ </p:input>
- <p:edit id="smoking" label="Smoking preference">
+ <p:input id="smokingPreference">
<h:selectOneRadio id="input" value="#{booking.smoking}" layout="pageDirection" styleClass="radio">
<f:selectItem itemLabel="Smoking" itemValue="true"/>
<f:selectItem itemLabel="Non Smoking" itemValue="false"/>
</h:selectOneRadio>
- </p:edit>
+ </p:input>
- <p:edit id="creditCardName" label="Credit card name">
+ <p:input id="creditCardName">
<h:inputText id="input" value="#{booking.creditCardName}"/>
- </p:edit>
+ </p:input>
- <p:edit id="creditCardNumber" label="Credit card #">
+ <p:input id="creditCardNumber" inputs="2">
<h:inputText id="input" value="#{booking.creditCardNumber}"/>
#{' '}
<h:selectOneMenu id="input2" value="#{booking.creditCardType}">
<f:selectItem itemValue="#{null}" itemLabel="Select..." noSelectionOption="true"/>
<f:selectItems value="#{creditCardTypes}" var="_type" itemValue="#{_type}"/>
</h:selectOneMenu>
- </p:edit>
+ </p:input>
- <p:edit id="creditCardExpiry" label="Credit card expiry">
+ <p:input id="creditCardExpiry" inputs="2">
<h:selectOneMenu id="input" value="#{booking.creditCardExpiryMonth}">
<f:selectItems value="#{months}" var="_month" itemValue="#{_month.number}" itemLabel="#{_month.shortName}"/>
</h:selectOneMenu>
<h:selectOneMenu id="input2" value="#{booking.creditCardExpiryYear}">
<f:selectItems value="#{creditCardExpiryYears}" var="_year" itemValue="#{_year}"/>
</h:selectOneMenu>
- </p:edit>
+ </p:input>
<div class="buttonBox">
<h:commandButton id="proceed" value="Proceed" action="#{bookingAgent.validateBooking}"/>
Modified: examples/trunk/booking-simplified/src/main/webapp/confirm.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/confirm.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/confirm.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -17,21 +17,21 @@
<ui:include src="/WEB-INF/fragments/hotel.xhtml"/>
- <p:display label="Total payment" value="#{booking.total}">
+ <p:output label="Total payment" value="#{booking.total}">
<f:convertNumber for="output" type="currency" currencySymbol="$"/>
- </p:display>
+ </p:output>
- <p:display label="Check-in date" value="#{booking.checkinDate}">
+ <p:output label="Check-in date" value="#{booking.checkinDate}">
<f:convertDateTime for="output" type="date" pattern="MM/dd/yyyy"/>
- </p:display>
+ </p:output>
- <p:display label="Check-out date" value="#{booking.checkoutDate}">
+ <p:output label="Check-out date" value="#{booking.checkoutDate}">
<f:convertDateTime for="output" type="date" pattern="MM/dd/yyyy"/>
- </p:display>
+ </p:output>
- <p:display label="Credit card #" value="#{booking.creditCardNumber}"/>
+ <p:output label="Credit card #" value="#{booking.creditCardNumber}"/>
- <p:display label="Credit card type" value="#{booking.creditCardType}"/>
+ <p:output label="Credit card type" value="#{booking.creditCardType}"/>
<div class="buttonBox">
<h:form id="confirmForm">
Modified: examples/trunk/booking-simplified/src/main/webapp/hotel.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/hotel.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/hotel.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -23,7 +23,7 @@
<div class="buttonBox">
<h:form id="actions">
- <h:commandButton id="bookHotel" action="#{bookingAgent.bookHotel}" value="Book Hotel"/>
+ <h:commandButton id="bookHotel" action="#{bookingAgent.bookHotel}" value="Book Hotel" rendered="#{identity.loggedIn}"/>
#{' '}
<h:commandButton id="cancel" action="#{bookingAgent.cancel}" value="Return to Search" immediate="true"/>
</h:form>
Modified: examples/trunk/booking-simplified/src/main/webapp/password.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/password.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/password.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -23,14 +23,14 @@
<fieldset>
- <p:edit id="password" label="Password">
+ <p:input id="password">
<h:inputSecret id="input" value="#{currentUser.password}" redisplay="true"/>
- </p:edit>
+ </p:input>
- <p:edit id="confirmPassword" label="Confirm password">
+ <p:input id="confirmPassword">
<h:inputSecret id="input" value="#{passwordManager.confirmPassword}" redisplay="true"
binding="#{registrationFormControls.confirmPassword}"/>
- </p:edit>
+ </p:input>
<div class="buttonBox">
<h:commandButton id="change" value="Change" action="#{passwordManager.changePassword}"/>
Modified: examples/trunk/booking-simplified/src/main/webapp/register.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/register.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/register.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -29,31 +29,31 @@
<fieldset>
- <p:edit id="username" label="Username">
+ <p:input id="username">
<h:inputText id="input" value="#{newUser.username}"
binding="#{registrationFormControls.username}">
<f:ajax event="blur" render="username"/>
</h:inputText>
- </p:edit>
+ </p:input>
- <p:edit id="name" label="Real name">
+ <p:input id="name">
<h:inputText id="input" value="#{newUser.name}">
<f:ajax event="blur" render="name"/>
</h:inputText>
- </p:edit>
+ </p:input>
- <p:edit id="password" label="Password">
+ <p:input id="password">
<h:inputSecret id="input" value="#{newUser.password}" redisplay="true">
<f:ajax event="blur" render="password"/>
</h:inputSecret>
- </p:edit>
+ </p:input>
- <p:edit id="confirmPassword" label="Confirm Password">
+ <p:input id="confirmPassword">
<h:inputSecret id="input" value="#{registrar.confirmPassword}" redisplay="true"
binding="#{registrationFormControls.confirmPassword}">
<f:ajax event="blur" render="confirmPassword"/>
</h:inputSecret>
- </p:edit>
+ </p:input>
<div class="buttonBox">
<h:commandButton id="register" value="Register" action="#{registrar.register}"/>
Deleted: examples/trunk/booking-simplified/src/main/webapp/resources/components/property/display.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/resources/components/property/display.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/resources/components/property/display.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,32 +0,0 @@
-<!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:f="http://java.sun.com/jsf/core"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:c="http://java.sun.com/jsp/jstl/core"
- xmlns:comp="http://java.sun.com/jsf/composite">
-
- <comp:interface>
- <comp:attribute name="label" required="true"/>
- <comp:attribute name="value" required="false"/>
- <comp:attribute name="override" required="false" default="false"/>
- </comp:interface>
-
- <ui:remove>
- TODO allow for a template to be specified, falling back to a default
- </ui:remove>
-
- <comp:implementation>
- <div class="entry" id="#{cc.clientId}">
- <span class="label">#{cc.attrs.label}:</span>
- <span class="output">
- <c:choose>
- <c:when test="#{cc.attrs.override}"><comp:insertChildren/></c:when>
- <c:otherwise><h:outputText id="output" value="#{cc.attrs.value}"><comp:insertChildren/></h:outputText></c:otherwise>
- </c:choose>
- </span>
- </div>
- </comp:implementation>
-
-</ui:composition>
Deleted: examples/trunk/booking-simplified/src/main/webapp/resources/components/property/edit.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/resources/components/property/edit.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/resources/components/property/edit.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -1,40 +0,0 @@
-<!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:f="http://java.sun.com/jsf/core"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:c="http://java.sun.com/jsp/jstl/core"
- xmlns:comp="http://java.sun.com/jsf/composite">
-
- <comp:interface>
- <comp:attribute name="label" required="true"/>
- <comp:attribute name="required" required="false" default="true"/>
- </comp:interface>
-
- <ui:remove>
- TODO allow for a template to be specified, falling back to a default
- TODO detect required from child or from bean validation annotation
- Ed claims there is #{component.messageList}, but I don't see it
- </ui:remove>
-
- <comp:implementation>
-
- <c:set var="invalid" value="#{not empty facesContext.getMessageList(cc.clientId.concat(':input'))}"/>
- <c:set var="invalid2" value="#{not empty facesContext.getMessageList(cc.clientId.concat(':input2'))}"/>
-
- <div class="entry" id="#{cc.clientId}">
- <h:outputLabel value="#{cc.attrs.label}:" for="input" styleClass="label#{invalid || invalid2 ? ' errors' : ''}">
- <c:if test="#{required}"><span class="required">*</span></c:if>
- </h:outputLabel>
- <span class="input#{invalid || invalid2 ? ' errors' : ''}">
- <comp:insertChildren/>
- </span>
- <h:message for="input" styleClass="error errors" rendered="#{invalid}"/>
- <h:message for="input2" styleClass="error errors" rendered="#{invalid2}"/>
- </div>
-
- </comp:implementation>
-
-
-</ui:composition>
Copied: examples/trunk/booking-simplified/src/main/webapp/resources/components/property/input.xhtml (from rev 13171, examples/trunk/booking-simplified/src/main/webapp/resources/components/property/edit.xhtml)
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/resources/components/property/input.xhtml (rev 0)
+++ examples/trunk/booking-simplified/src/main/webapp/resources/components/property/input.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -0,0 +1,34 @@
+<!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:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:c="http://java.sun.com/jsp/jstl/core"
+ xmlns:cc="http://java.sun.com/jsf/composite">
+
+ <cc:interface componentType="org.jboss.seam.faces.InputContainer">
+ <cc:attribute name="label" required="true"/>
+ <cc:attribute name="required" required="false"/>
+ <cc:attribute name="inputs" required="false" default="1"/>
+ </cc:interface>
+
+ <cc:implementation>
+
+ <div class="entry" id="#{cc.clientId}">
+ <h:outputLabel id="label" for="" value="#{cc.attrs.label}:" styleClass="#{cc.attrs.invalid ? 'label errors' : 'label'}">
+ <h:panelGroup styleClass="required" rendered="#{cc.attrs.required}">*</h:panelGroup>
+ </h:outputLabel>
+ <span class="#{cc.attrs.invalid ? 'input errors' : 'input'}">
+ <cc:insertChildren/>
+ </span>
+ <h:panelGroup rendered="#{cc.attrs.invalid}">
+ <c:forEach var="i" begin="1" end="#{cc.attrs.numInputs}">
+ <h:message id="message" for="" errorClass="invalid message"/>
+ </c:forEach>
+ </h:panelGroup>
+ </div>
+
+ </cc:implementation>
+
+</ui:composition>
Copied: examples/trunk/booking-simplified/src/main/webapp/resources/components/property/output.xhtml (from rev 13171, examples/trunk/booking-simplified/src/main/webapp/resources/components/property/display.xhtml)
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/resources/components/property/output.xhtml (rev 0)
+++ examples/trunk/booking-simplified/src/main/webapp/resources/components/property/output.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -0,0 +1,28 @@
+<!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:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:c="http://java.sun.com/jsp/jstl/core"
+ xmlns:cc="http://java.sun.com/jsf/composite">
+
+ <cc:interface>
+ <cc:attribute name="label" required="true"/>
+ <cc:attribute name="value" required="false"/>
+ <cc:attribute name="override" required="false" default="false"/>
+ </cc:interface>
+
+ <cc:implementation>
+ <div class="entry" id="#{cc.clientId}">
+ <span class="label">#{cc.attrs.label}:</span>
+ <span class="output">
+ <c:choose>
+ <c:when test="#{cc.attrs.override}"><cc:insertChildren/></c:when>
+ <c:otherwise><h:outputText id="output" value="#{cc.attrs.value}"><cc:insertChildren/></h:outputText></c:otherwise>
+ </c:choose>
+ </span>
+ </div>
+ </cc:implementation>
+
+</ui:composition>
Modified: examples/trunk/booking-simplified/src/main/webapp/search.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/search.xhtml 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/main/webapp/search.xhtml 2010-06-16 00:56:36 UTC (rev 13173)
@@ -112,10 +112,10 @@
<h1>Current Hotel Bookings</h1>
</div>
<div class="section">
- <h:panelGroup rendered="#{false}">
+ <h:panelGroup rendered="#{not identity.loggedIn}">
You must be logged in to see the list of your hotel bookings.
</h:panelGroup>
- <h:form id="bookings" rendered="#{true}">
+ <h:form id="bookings" rendered="#{identity.loggedIn}">
<h:outputText value="No bookings found." rendered="#{bookings.size() == 0}"/>
<h:dataTable id="bookings" value="#{bookings}" var="_booking" rendered="#{bookings.size() gt 0}">
<h:column id="nameCol">
Modified: examples/trunk/booking-simplified/src/test/java/org/jboss/seam/examples/booking/booking/BookingAgentTest.java
===================================================================
--- examples/trunk/booking-simplified/src/test/java/org/jboss/seam/examples/booking/booking/BookingAgentTest.java 2010-06-16 00:39:22 UTC (rev 13172)
+++ examples/trunk/booking-simplified/src/test/java/org/jboss/seam/examples/booking/booking/BookingAgentTest.java 2010-06-16 00:56:36 UTC (rev 13173)
@@ -13,7 +13,7 @@
import org.jboss.arquillian.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.seam.examples.booking.account.Registered;
+import org.jboss.seam.examples.booking.account.Authenticated;
import org.jboss.seam.examples.booking.controls.BookingFormControls;
import org.jboss.seam.examples.booking.model.Booking;
import org.jboss.seam.examples.booking.model.CreditCardType;
@@ -37,7 +37,7 @@
@Deployment
public static Archive<?> createTestArchive()
{
- WebArchive war = ShrinkWrap.create("test.war", WebArchive.class).addPackage(Hotel.class.getPackage()).addClasses(BookingAgent.class, BookingAgentBean.class, Confirmed.class, Registered.class, BookingEvent.class, BookingFormControls.class, NoOpLogger.class).addLibraries(MavenArtifactResolver.resolve("joda-time:joda-time:1.6"), MavenArtifactResolver.resolve("org.jboss.seam.international:seam-international-api:3.0.0.Alpha1"), MavenArtifactResolver.resolve("org.jboss.seam.international:seam-international:3.0.0.Alpha1")).addWebResource("META-INF/persistence.xml", "classes/META-INF/persistence.xml").addWebResource(new ByteArrayAsset(new byte[0]), "beans.xml");
+ WebArchive war = ShrinkWrap.create("test.war", WebArchive.class).addPackage(Hotel.class.getPackage()).addClasses(BookingAgent.class, BookingAgentBean.class, Confirmed.class, Authenticated.class, BookingEvent.class, BookingFormControls.class, NoOpLogger.class).addLibraries(MavenArtifactResolver.resolve("joda-time:joda-time:1.6"), MavenArtifactResolver.resolve("org.jboss.seam.international:seam-international-api:3.0.0.Alpha1"), MavenArtifactResolver.resolve("org.jboss.seam.international:seam-international:3.0.0.Alpha1")).addWebResource("META-INF/persistence.xml", "classes/META-INF/persistence.xml").addWebResource(new ByteArrayAsset(new byte[0]), "beans.xml");
return war;
}
@@ -71,7 +71,7 @@
// cc.setBeanStore(new HashMapBeanStore());
// cc.setActive(true);
- bookingAgent.selectHotel(em.find(Hotel.class, 1l));
+ bookingAgent.selectHotel(1l);
bookingAgent.bookHotel();
Booking booking = bookingInstance.get();
booking.setCreditCardNumber("1111222233334444");
@@ -86,7 +86,7 @@
}
@Produces
- @Registered
+ @Authenticated
User getRegisteredUser()
{
return em.find(User.class, "ike");
14 years, 3 months
Seam SVN: r13172 - modules/xml/trunk/docs/src/main/docbook/en-US.
by seam-commits@lists.jboss.org
Author: swd847
Date: 2010-06-15 20:39:22 -0400 (Tue, 15 Jun 2010)
New Revision: 13172
Modified:
modules/xml/trunk/docs/src/main/docbook/en-US/xml-general.xml
modules/xml/trunk/docs/src/main/docbook/en-US/xml-introduction.xml
Log:
update docs
Modified: modules/xml/trunk/docs/src/main/docbook/en-US/xml-general.xml
===================================================================
--- modules/xml/trunk/docs/src/main/docbook/en-US/xml-general.xml 2010-06-15 22:31:49 UTC (rev 13171)
+++ modules/xml/trunk/docs/src/main/docbook/en-US/xml-general.xml 2010-06-16 00:39:22 UTC (rev 13172)
@@ -2,19 +2,10 @@
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="xml">
- <title>Seam XML General</title>
-
- <para>Seam provides a method for configuring JSR-299 beans using XML. Using XML it is possible to add new beans, override existing beans, and add
- extra configuration to existing beans. The default is to add a new bean.
- </para>
-
+ <title>Seam XML Reference</title>
+
<section>
- <title>Configuration</title>
- <para>No special configuration is required to use seam-xml, all that is required is to include the jar file and the weld extensions jar in your deployment. </para>
- </section>
-
- <section>
- <title>Getting Started</title>
+ <title>OLD Getting Started - To be removed</title>
<para>By default XML files are discovered from the classpath. The extension looks for an XML file in the following locations:</para>
<itemizedlist>
<listitem><literal>/WEB-INF/beans.xml</literal></listitem>
@@ -144,8 +135,9 @@
</section>
<section>
- <title>The main namespace</title>
- <para>The main namesapce is <literal>urn:java:seam:core</literal> can contain the following elements:</para>
+ <title>XML Namespaces</title>
+ <para>The main namesapce is <literal>urn:java:seam:core</literal> contains builtin tags and types from core packages.
+ The builting tags are:</para>
<itemizedlist>
<listitem><para><literal>Beans</literal></para></listitem>
@@ -183,15 +175,17 @@
<listitem><para><literal>javax.interceptor</literal></para></listitem>
</itemizedlist>
- <para>So the <literal><s:Produces></literal> element above actually resolves
- to <literal>java.enterprise.inject.Produces</literal>
- and the <literal><s:Inject></literal> element resolves to <literal>javax.inject.Inject</literal>.</para>
-
+ <para>Other namspaces are specified using the following syntax:</para>
+ <programlisting>
+ <![CDATA[xmlns:ns="urn:java:com.mydomain.package1:com.mydomain.package2"]]>
+ </programlisting>
+ <para>This maps <literal>ns</literal> to the packages <literal>com.mydomain.package1</literal> and <literal>com.mydomain.package2</literal>. These
+ packages are searched in order to resolve elements in this namespace.</para>
</section>
<section>
<title>Overriding and extending beans</title>
- <para>There may be cases where you want to modify an existing bean rather than
+ <para>The default is to add a new bean, however there may be cases where you want to modify an existing bean rather than
adding a new one. The <literal><s:overrides></literal> and
<literal><s:specializes></literal> tags allow you to do this. The
<literal><s:overrides></literal> tag prevents the existing bean from being
@@ -208,8 +202,7 @@
<test:OtherBean>
<s:overrides>
<test:NewQualifier/>
-</test:OtherBean>
- ]]>
+</test:OtherBean>]]>
</programlisting>
<para>The first entry above adds a new qualifier to an existing bean definition. The second prevents the existing bean from being installed, and registers a new bean with a single qualifier.</para>
</section>
Modified: modules/xml/trunk/docs/src/main/docbook/en-US/xml-introduction.xml
===================================================================
--- modules/xml/trunk/docs/src/main/docbook/en-US/xml-introduction.xml 2010-06-15 22:31:49 UTC (rev 13171)
+++ modules/xml/trunk/docs/src/main/docbook/en-US/xml-introduction.xml 2010-06-16 00:39:22 UTC (rev 13172)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
<chapter id="introduction">
<title>Seam XML Introduction</title>
@@ -10,7 +10,7 @@
<section>
<title>Getting Started</title>
- <para>No special configuration is required to use seam-xml, all that is required is to include the jar file and the weld extensions jar in your deployment. </para>
+ <para>No special configuration is required, all that is required is to include the jar file and the weld extensions jar in your deployment. </para>
<para>The first thing we need is some xml files, by default these are discovered from the classpath in the following locations:</para>
<itemizedlist>
<listitem><literal>/META-INF/beans.xml</literal></listitem>
@@ -25,122 +25,134 @@
<para>The <literal>beans.xml</literal> file is the preferred way of configuring beans via XML, however it may be possible that some JSR-299 implementations will not allow this,
so <literal>seam-beans.xml</literal> is provided as an alternative. </para>
- <para>Let's start with a simple example. Say we have the following classes:</para>
+ <para>Let's start with a simple example. Say we have the following class that represents a report:</para>
<programlisting role="JAVA">
- <![CDATA[public class Robot
+ <![CDATA[
+public class Report
{
- @Inject RobotArm leftArm;
+ String filename;
- @Inject RobotArm rightArm;
+ @Inject
+ Datasource datasource;
+
+ //getters and setters
}
+]]>
+ </programlisting>
+ <para>And the following support classes:</para>
+ <programlisting role="JAVA">
+ <![CDATA[
+public interface Datasource
+{
+ public Data getData();
+}
-public class RobotArm
+@SalesQualifier
+public class SalesDatasource implements Datasource
{
- String attachment = "welder";
-
- public void doStuff()
- {
- //do robot things...
- }
+ public Data getData()
+ {
+ //return sales data
+ }
}
-@Retention(RUNTIME)
-public @Interface LeftArm{}
+public class BillingDatasource implements Datasource
+{
+ public Data getData()
+ {
+ //return billing data
+ }
+}
-@Retention(RUNTIME)
-public @Interface RightArm{}
- ]]>
- </programlisting>
- <para>So we have a robot class that injects a left arm and a right arm, with both arms having a welder attachment. At some point in the future we decide that our robot is no longer needed for welding, instead it needs a plasma cutter in it's left hand and a
- vice in its right hand. Rather than modifying the class files, we decide to configure this up with xml:</para>
- <programlistingco>
- <areaspec>
- <area id="namepsace-declaration-seam" coords="5"/>
- <area id="namepsace-declaration-robots" coords="6"/>
- <area id="right-arm-qualifier" coords="9"/>
- <area id="robot-right-arm" coords="16"/>
- <area id="overrrides" coords="17"/>
- <area id="left-arm-applied-qualifier" coords="18"/>
- <area id="left-arm-set-length" coords="19"/>
- <area id="specializes" coords="29"/>
- <area id="left-arm-injected" coords="30"/>
- </areaspec>
+]]>
+ </programlisting>
+
+ <para>Our <literal>Report</literal> bean is fairly simple. It has a filename that tells the report engine where to load the report definition from, and a datasource that provides the data used to
+ fill the report. We are going to configure up multiple <literal>Report</literal> beans via xml.</para>
+ <programlistingco>
+ <areaspec>
+ <area id="namepsace-declaration-seam" coords="6"/>
+ <area id="namepsace-declaration-reports" coords="7"/>
+ <area id="resport-dec" coords="9"/>
+ <area id="specializes" coords="10"/>
+ <area id="filename" coords="11"/>
+ <area id="datasource-qualifier" coords="13"/>
+ <area id="filename-short" coords="17"/>
+ <area id="overrides" coords="18"/>
+ <area id="inject" coords="20"/>
+ <area id="datasource-type" coords="21"/>
+ </areaspec>
<programlisting role="XML">
- <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+ <![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:s="urn:java:seam:core"
- xmlns:r="urn:java:org.example.robots">
-
- <r:RightArm>
- <s:Qualifier/>
- </r:RightArm>
-
- <r:LeftArm>
- <s:Qualifier/>
- </r:LeftArm>
-
- <r:RobotArm>
- <s:overrides/>
- <r:LeftArm/>
- <r:attachment>Plasma Cutter</r:attachment>
- </r:RobotArm>
+ xmlns:r="urn:java:org.example.reports">
+
+ <r:Report>
+ <s:specializes/>
+ <r:filename>sales.jrxml<r:filename>
+ <r:datasource>
+ <r:SalesQualifier/>
+ </r:datasource>
+ </r:Report>
- <r:RobotArm>
+ <r:Report filename="billing.jrxml">
<s:overrides/>
- <r:RightArm/>
- <r:attachment>Vice</r:attachment>
- </r:RobotArm>
-
- <r:Robot>
- <s:specializes/>
- <r:leftArm>
- <r:LeftArm/>
- </r:leftArm>
- <r:rightArm>
- <r:RightArm/>
- </r:rightArm>
- </r:Robot>
-
+ <r:datasource>
+ <s:Inject/>
+ <s:type>
+ <r:BillingDatasource/>
+ </s:type>
+ </r:datasource>
+ </r:Report>
</beans>
]]>
</programlisting>
<calloutlist>
<callout arearefs="namepsace-declaration-seam">
- <para>The namespace <literal>urn:java:seam:core</literal> is seam-xml's root namespace. More on this later</para>
+ <para>The namespace <literal>urn:java:seam:core</literal> is seam-xml's root namespace. This is where the builtin tags and CDI annotations live.</para>
</callout>
- <callout arearefs="namepsace-declaration-robots">
- <para>The namespace <literal>urn:java:org.example.robots</literal> corresponds to the package <literal>org.example.robots</literal>, where our robot classes live.</para>
+ <callout arearefs="namepsace-declaration-reports">
+ <para>The namespace <literal>urn:java:org.example.reports</literal> corresponds to the package <literal>org.example.reports</literal>, where our reporting classes live.</para>
</callout>
- <callout arearefs="right-arm-qualifier">
- <para>This declares the <literal>@RightArm</literal> annotation to be a qualifier. The <literal><r:RightArm></literal> declaration resolves to
- <literal>org.example.robots.RightArm</literal> and the <literal><s:Qualifier></literal> declaration tells seam-xml to register this class as a qualifier.</para>
+ <callout arearefs="resport-dec">
+ <para>The <literal><Report></literal> declaration configures an instance of our <literal>Report</literal> class as a bean.</para>
</callout>
- <callout arearefs="robot-right-arm">
- <para>The <literal><r:RobotArm></literal> declaration configures an instance of our <literal>RobotArm</literal> class.</para>
+ <callout arearefs="specializes">
+ <para>Beans installed using <literal><s:specializes></literal> read annotations from the existing class, and merge them with the annotations defined via xml.
+ In addition if a bean is installed with <literal><s:specializes></literal> it prevents the original class being installed as a bean.</para>
</callout>
- <callout arearefs="overrrides">
- <para>The <literal><s:overrides></literal> tells CDI that this bean overrides the default bean. The existing <literal>RobotArm</literal> definition will not be
- installed, only <literal>RobotArm</literal> beans that are configured via XML.</para>
+ <callout arearefs="filename">
+ <para>The <literal><r:filename></literal> element sets the initial value of the filename field.</para>
</callout>
- <callout arearefs="left-arm-applied-qualifier">
- <para>The <literal><r:LeftArm></literal> element applies the <literal>@LeftArm</literal> annotation to the enclosing element, in this case out <literal>RobotArm</literal>
- class (remember we declared <literal>@LeftArm</literal> to be a qualifier). In seam-xml an element that resolves to an annotation means 'apply this annotation to the parent element'.</para>
+ <callout arearefs="datasource-qualifier">
+ <para>The <literal><r:SalesQualifier></literal> element applies the <literal>@SalesQualifier</literal> to the <literal>datasource</literal> field.
+ As the field already has an <literal>@Inject</literal> on the class definition this will cause the <literal>SalesDatasource</literal>
+ bean to be injected.</para>
</callout>
- <callout arearefs="left-arm-set-length">
- <para>This sets the arm's attachment field to the string <literal>Plasma Cutter</literal></para>
+ <callout arearefs="filename-short">
+ <para>This is the shorthand syntax for setting a field value.</para>
</callout>
- <callout arearefs="specializes">
- <para>The <literal><s:specializes></literal> is similar to <literal><s:overrides></literal>. The difference is that <literal><s:specializes></literal>
- beans have the annotated from the java class merged with the annotations in XML.</para>
+ <callout arearefs="overrides">
+ <para>Beans installed using <literal><s:overrides></literal> do not read annotations from the existing class. In addition if a bean is installed with
+ <literal><s:overrides></literal> it prevents the original class being installed as a bean.</para>
</callout>
- <callout arearefs="left-arm-injected">
- <para>This configures a qualifier on the injection point. There is no need for an <literal><s:Inject></literal> as it is present on the underlying class.</para>
+ <callout arearefs="inject">
+ <para>The <literal><s:Inject></literal> element is needed this bean was installed with <literal><s:overrides></literal>, so annotations are not read
+ from the class definition.</para>
</callout>
-
+ <callout arearefs="datasource-type">
+ <para>The <literal><s:type></literal> restricts the type of bean that is availible for injection without using qualifiers. In this case
+ <literal>BillingDatasource</literal> will be injected.</para>
+ </callout>
+
</calloutlist>
</programlistingco>
</section>
-
+<!--
+vim:et:ts=3:sw=3:tw=120
+-->
</chapter>
14 years, 3 months
Seam SVN: r13171 - in modules/faces/trunk/impl/src: test/java/org/jboss/seam/faces/status and 1 other directory.
by seam-commits@lists.jboss.org
Author: lincolnthree
Date: 2010-06-15 18:31:49 -0400 (Tue, 15 Jun 2010)
New Revision: 13171
Modified:
modules/faces/trunk/impl/src/main/java/org/jboss/seam/faces/status/MessagesAdapter.java
modules/faces/trunk/impl/src/test/java/org/jboss/seam/faces/status/MessagesAdapterTest.java
Log:
Messages Adapter now takes no action if there are no messages to be saved.
Modified: modules/faces/trunk/impl/src/main/java/org/jboss/seam/faces/status/MessagesAdapter.java
===================================================================
--- modules/faces/trunk/impl/src/main/java/org/jboss/seam/faces/status/MessagesAdapter.java 2010-06-15 22:31:25 UTC (rev 13170)
+++ modules/faces/trunk/impl/src/main/java/org/jboss/seam/faces/status/MessagesAdapter.java 2010-06-15 22:31:49 UTC (rev 13171)
@@ -37,7 +37,8 @@
import org.jboss.seam.faces.event.qualifier.RenderResponse;
import org.jboss.seam.international.status.Level;
import org.jboss.seam.international.status.Message;
-import org.jboss.seam.international.status.Messages;
+import org.jboss.seam.international.status.MessagesImpl;
+import org.slf4j.Logger;
/**
* Convert Seam Messages into FacesMessages before RenderResponse phase.<br>
@@ -53,15 +54,22 @@
private static final String FLASH_MESSAGES_KEY = MessagesAdapter.class.getName() + ".FLASH_KEY";
@Inject
- Messages messages;
+ MessagesImpl messages;
@Inject
FlashContext context;
+ @Inject
+ Logger log;
+
void flushBeforeNavigate(@Observes final PreNavigateEvent event)
{
- context.put(FLASH_MESSAGES_KEY, messages.getAll());
- messages.clear();
+ if (!messages.isEmpty())
+ {
+ log.debug("Saving status Messages to Flash Scope");
+ context.put(FLASH_MESSAGES_KEY, messages.getAll());
+ messages.clear();
+ }
}
@SuppressWarnings("unchecked")
Modified: modules/faces/trunk/impl/src/test/java/org/jboss/seam/faces/status/MessagesAdapterTest.java
===================================================================
--- modules/faces/trunk/impl/src/test/java/org/jboss/seam/faces/status/MessagesAdapterTest.java 2010-06-15 22:31:25 UTC (rev 13170)
+++ modules/faces/trunk/impl/src/test/java/org/jboss/seam/faces/status/MessagesAdapterTest.java 2010-06-15 22:31:49 UTC (rev 13171)
@@ -36,7 +36,7 @@
import org.jboss.seam.faces.event.PhaseEventBridge;
import org.jboss.seam.international.status.Bundles;
import org.jboss.seam.international.status.MessageFactory;
-import org.jboss.seam.international.status.Messages;
+import org.jboss.seam.international.status.MessagesImpl;
import org.jboss.seam.international.status.builder.BundleTemplateMessageImpl;
import org.jboss.seam.international.status.builder.TemplateMessageImpl;
import org.jboss.shrinkwrap.api.ArchivePaths;
@@ -58,11 +58,11 @@
@Deployment
public static JavaArchive createTestArchive()
{
- return ShrinkWrap.create("test.jar", JavaArchive.class).addClasses(MessagesAdapter.class, Messages.class, MockFlashContext.class, MessageFactory.class, TemplateMessageImpl.class, BundleTemplateMessageImpl.class, Bundles.class, PhaseEventBridge.class, MockLogger.class).addManifestResource(new ByteArrayAsset(new byte[0]), ArchivePaths.create("beans.xml"));
+ return ShrinkWrap.create("test.jar", JavaArchive.class).addClasses(MessagesAdapter.class, MessagesImpl.class, MockFlashContext.class, MessageFactory.class, TemplateMessageImpl.class, BundleTemplateMessageImpl.class, Bundles.class, PhaseEventBridge.class, MockLogger.class).addManifestResource(new ByteArrayAsset(new byte[0]), ArchivePaths.create("beans.xml"));
}
@Inject
- Messages messages;
+ MessagesImpl messages;
String text = "Hey! This is a message";
14 years, 3 months
Seam SVN: r13170 - in modules/international/trunk: api/build and 7 other directories.
by seam-commits@lists.jboss.org
Author: lincolnthree
Date: 2010-06-15 18:31:25 -0400 (Tue, 15 Jun 2010)
New Revision: 13170
Added:
modules/international/trunk/api/build/
modules/international/trunk/api/build/classes/
modules/international/trunk/impl/build/
modules/international/trunk/impl/build/classes/
modules/international/trunk/impl/src/main/java/org/jboss/seam/international/status/MessagesImpl.java
Modified:
modules/international/trunk/api/src/main/java/org/jboss/seam/international/status/Messages.java
modules/international/trunk/api/src/main/java/org/jboss/seam/international/status/builder/BundleKey.java
modules/international/trunk/impl/src/main/java/org/jboss/seam/international/status/builder/BundleTemplateMessageImpl.java
modules/international/trunk/impl/src/test/java/org/jboss/seam/international/test/status/MessagesTest.java
Log:
Fixed messages API. Impl is now in the IMPL, Messages is converted to an interface
Modified: modules/international/trunk/api/src/main/java/org/jboss/seam/international/status/Messages.java
===================================================================
--- modules/international/trunk/api/src/main/java/org/jboss/seam/international/status/Messages.java 2010-06-15 22:30:05 UTC (rev 13169)
+++ modules/international/trunk/api/src/main/java/org/jboss/seam/international/status/Messages.java 2010-06-15 22:31:25 UTC (rev 13170)
@@ -23,12 +23,9 @@
package org.jboss.seam.international.status;
import java.io.Serializable;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.Set;
import javax.enterprise.context.RequestScoped;
-import javax.inject.Inject;
import org.jboss.seam.international.status.builder.BundleKey;
import org.jboss.seam.international.status.builder.BundleTemplateMessage;
@@ -45,23 +42,12 @@
*
*/
@RequestScoped
-public class Messages implements Serializable
+public interface Messages extends Serializable
{
- private static final long serialVersionUID = -2908193057765795662L;
-
- private final Set<Message> messages = Collections.synchronizedSet(new HashSet<Message>());
- private final Set<MessageBuilder> builders = Collections.synchronizedSet(new HashSet<MessageBuilder>());
-
- @Inject
- private MessageFactory factory;
-
/**
* Clear all pending messages.
*/
- public void clear()
- {
- messages.clear();
- }
+ public void clear();
/**
* Retrieve all pending {@link Messages} in their final state - as they will
@@ -70,26 +56,8 @@
* instances, adding the resulting {@link Message} objects to the message
* cache, and clearing the builders from the builder cache.
*/
- public Set<Message> getAll()
- {
- Set<Message> result = new HashSet<Message>();
+ public Set<Message> getAll();
- synchronized (builders)
- {
- for (MessageBuilder builder : builders)
- {
- messages.add(builder.build());
- }
- builders.clear();
- }
-
- synchronized (messages)
- {
- result.addAll(messages);
- }
- return result;
- }
-
/**
* Add a {@link Message} object to the pending message cache. Messages remain
* pending until cleared by and displayed in the View Layer, or until cleared
@@ -97,10 +65,7 @@
* <p>
* <b>Note:</b> Duplicate messages are ignored.
*/
- public void add(final Message message)
- {
- messages.add(message);
- }
+ public void add(final Message message);
/**
* Add a {@link MessageBuilder} object to the pending builder cache. A
@@ -108,170 +73,102 @@
* {@link MessageBuilder#build()} to be called called on each builder added
* in this way.
*/
- public void add(final MessageBuilder builder)
- {
- builders.add(builder);
- }
+ public void add(final MessageBuilder builder);
/**
- * Convenience add & pass-through for factory methods.
- */
- private <T extends MessageBuilder> T enqueueBuilder(final T builder)
- {
- add(builder);
- return builder;
- }
-
- /*
- * Bundle Factory Methods
- */
-
- /**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public BundleTemplateMessage info(final BundleKey message)
- {
- return enqueueBuilder(factory.info(message));
- }
+ public BundleTemplateMessage info(final BundleKey message);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public BundleTemplateMessage info(final BundleKey message, final Object... params)
- {
- return enqueueBuilder(factory.info(message, params));
- }
+ public BundleTemplateMessage info(final BundleKey message, final Object... params);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public BundleTemplateMessage warn(final BundleKey message)
- {
- return enqueueBuilder(factory.warn(message));
- }
+ public BundleTemplateMessage warn(final BundleKey message);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public BundleTemplateMessage warn(final BundleKey message, final Object... params)
- {
- return enqueueBuilder(factory.warn(message, params));
- }
+ public BundleTemplateMessage warn(final BundleKey message, final Object... params);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public BundleTemplateMessage error(final BundleKey message)
- {
- return enqueueBuilder(factory.error(message));
- }
+ public BundleTemplateMessage error(final BundleKey message);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public BundleTemplateMessage error(final BundleKey message, final Object... params)
- {
- return enqueueBuilder(factory.error(message, params));
- }
+ public BundleTemplateMessage error(final BundleKey message, final Object... params);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public BundleTemplateMessage fatal(final BundleKey message)
- {
- return enqueueBuilder(factory.fatal(message));
- }
+ public BundleTemplateMessage fatal(final BundleKey message);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public BundleTemplateMessage fatal(final BundleKey message, final Object... params)
- {
- return enqueueBuilder(factory.fatal(message, params));
- }
+ public BundleTemplateMessage fatal(final BundleKey message, final Object... params);
- /*
- * Template Factory Methods
- */
-
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public TemplateMessage info(final String message)
- {
- return enqueueBuilder(factory.info(message));
- }
+ public TemplateMessage info(final String message);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public TemplateMessage info(final String message, final Object... params)
- {
- return enqueueBuilder(factory.info(message, params));
- }
+ public TemplateMessage info(final String message, final Object... params);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public TemplateMessage warn(final String message)
- {
- return enqueueBuilder(factory.warn(message));
- }
+ public TemplateMessage warn(final String message);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public TemplateMessage warn(final String message, final Object... params)
- {
- return enqueueBuilder(factory.warn(message, params));
- }
+ public TemplateMessage warn(final String message, final Object... params);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public TemplateMessage error(final String message)
- {
- return enqueueBuilder(factory.error(message));
- }
+ public TemplateMessage error(final String message);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public TemplateMessage error(final String message, final Object... params)
- {
- return enqueueBuilder(factory.error(message, params));
- }
+ public TemplateMessage error(final String message, final Object... params);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public TemplateMessage fatal(final String message)
- {
- return enqueueBuilder(factory.fatal(message));
- }
+ public TemplateMessage fatal(final String message);
/**
* Create a {@link MessageBuilder} with the specified {@link Level}, add it
* to the internal queue, and return it.
*/
- public TemplateMessage fatal(final String message, final Object... params)
- {
- return enqueueBuilder(factory.fatal(message, params));
- }
+ public TemplateMessage fatal(final String message, final Object... params);
}
Modified: modules/international/trunk/api/src/main/java/org/jboss/seam/international/status/builder/BundleKey.java
===================================================================
--- modules/international/trunk/api/src/main/java/org/jboss/seam/international/status/builder/BundleKey.java 2010-06-15 22:30:05 UTC (rev 13169)
+++ modules/international/trunk/api/src/main/java/org/jboss/seam/international/status/builder/BundleKey.java 2010-06-15 22:31:25 UTC (rev 13170)
@@ -45,6 +45,12 @@
}
@Override
+ public String toString()
+ {
+ return "BundleKey [bundle=" + bundle + ", key=" + key + "]";
+ }
+
+ @Override
public int hashCode()
{
final int prime = 31;
Copied: modules/international/trunk/impl/src/main/java/org/jboss/seam/international/status/MessagesImpl.java (from rev 13166, modules/international/trunk/api/src/main/java/org/jboss/seam/international/status/Messages.java)
===================================================================
--- modules/international/trunk/impl/src/main/java/org/jboss/seam/international/status/MessagesImpl.java (rev 0)
+++ modules/international/trunk/impl/src/main/java/org/jboss/seam/international/status/MessagesImpl.java 2010-06-15 22:31:25 UTC (rev 13170)
@@ -0,0 +1,185 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., 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.
+ */
+
+package org.jboss.seam.international.status;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+
+import org.jboss.seam.international.status.builder.BundleKey;
+import org.jboss.seam.international.status.builder.BundleTemplateMessage;
+import org.jboss.seam.international.status.builder.TemplateMessage;
+
+/**
+ * An implementation of the {@link Messages} interface.
+ *
+ * @author <a href="mailto:lincolnbaxter@gmail.com>Lincoln Baxter, III</a>
+ *
+ */
+@RequestScoped
+public class MessagesImpl implements Messages
+{
+ private static final long serialVersionUID = -2908193057765795662L;
+
+ private final Set<Message> messages = Collections.synchronizedSet(new HashSet<Message>());
+ private final Set<MessageBuilder> builders = Collections.synchronizedSet(new HashSet<MessageBuilder>());
+
+ @Inject
+ private MessageFactory factory;
+
+ public void clear()
+ {
+ messages.clear();
+ }
+
+ public boolean isEmpty()
+ {
+ return messages.isEmpty() && builders.isEmpty();
+ }
+
+ public Set<Message> getAll()
+ {
+ Set<Message> result = new HashSet<Message>();
+
+ synchronized (builders)
+ {
+ for (MessageBuilder builder : builders)
+ {
+ messages.add(builder.build());
+ }
+ builders.clear();
+ }
+
+ synchronized (messages)
+ {
+ result.addAll(messages);
+ }
+ return result;
+ }
+
+ public void add(final Message message)
+ {
+ messages.add(message);
+ }
+
+ public void add(final MessageBuilder builder)
+ {
+ builders.add(builder);
+ }
+
+ private <T extends MessageBuilder> T enqueueBuilder(final T builder)
+ {
+ add(builder);
+ return builder;
+ }
+
+ /*
+ * Bundle Factory Methods
+ */
+ public BundleTemplateMessage info(final BundleKey message)
+ {
+ return enqueueBuilder(factory.info(message));
+ }
+
+ public BundleTemplateMessage info(final BundleKey message, final Object... params)
+ {
+ return enqueueBuilder(factory.info(message, params));
+ }
+
+ public BundleTemplateMessage warn(final BundleKey message)
+ {
+ return enqueueBuilder(factory.warn(message));
+ }
+
+ public BundleTemplateMessage warn(final BundleKey message, final Object... params)
+ {
+ return enqueueBuilder(factory.warn(message, params));
+ }
+
+ public BundleTemplateMessage error(final BundleKey message)
+ {
+ return enqueueBuilder(factory.error(message));
+ }
+
+ public BundleTemplateMessage error(final BundleKey message, final Object... params)
+ {
+ return enqueueBuilder(factory.error(message, params));
+ }
+
+ public BundleTemplateMessage fatal(final BundleKey message)
+ {
+ return enqueueBuilder(factory.fatal(message));
+ }
+
+ public BundleTemplateMessage fatal(final BundleKey message, final Object... params)
+ {
+ return enqueueBuilder(factory.fatal(message, params));
+ }
+
+ /*
+ * Template Factory Methods
+ */
+ public TemplateMessage info(final String message)
+ {
+ return enqueueBuilder(factory.info(message));
+ }
+
+ public TemplateMessage info(final String message, final Object... params)
+ {
+ return enqueueBuilder(factory.info(message, params));
+ }
+
+ public TemplateMessage warn(final String message)
+ {
+ return enqueueBuilder(factory.warn(message));
+ }
+
+ public TemplateMessage warn(final String message, final Object... params)
+ {
+ return enqueueBuilder(factory.warn(message, params));
+ }
+
+ public TemplateMessage error(final String message)
+ {
+ return enqueueBuilder(factory.error(message));
+ }
+
+ public TemplateMessage error(final String message, final Object... params)
+ {
+ return enqueueBuilder(factory.error(message, params));
+ }
+
+ public TemplateMessage fatal(final String message)
+ {
+ return enqueueBuilder(factory.fatal(message));
+ }
+
+ public TemplateMessage fatal(final String message, final Object... params)
+ {
+ return enqueueBuilder(factory.fatal(message, params));
+ }
+
+}
Modified: modules/international/trunk/impl/src/main/java/org/jboss/seam/international/status/builder/BundleTemplateMessageImpl.java
===================================================================
--- modules/international/trunk/impl/src/main/java/org/jboss/seam/international/status/builder/BundleTemplateMessageImpl.java 2010-06-15 22:30:05 UTC (rev 13169)
+++ modules/international/trunk/impl/src/main/java/org/jboss/seam/international/status/builder/BundleTemplateMessageImpl.java 2010-06-15 22:31:25 UTC (rev 13170)
@@ -26,6 +26,7 @@
import org.jboss.seam.international.status.Bundles;
import org.jboss.seam.international.status.Level;
import org.jboss.seam.international.status.Message;
+import org.slf4j.Logger;
/**
*
@@ -43,6 +44,9 @@
@Inject
Bundles bundles;
+ @Inject
+ Logger log;
+
public Message build()
{
String text;
@@ -52,6 +56,7 @@
}
catch (Exception e)
{
+ log.warn("Could not load bundle: " + textKey);
text = textDefault;
}
Modified: modules/international/trunk/impl/src/test/java/org/jboss/seam/international/test/status/MessagesTest.java
===================================================================
--- modules/international/trunk/impl/src/test/java/org/jboss/seam/international/test/status/MessagesTest.java 2010-06-15 22:30:05 UTC (rev 13169)
+++ modules/international/trunk/impl/src/test/java/org/jboss/seam/international/test/status/MessagesTest.java 2010-06-15 22:31:25 UTC (rev 13170)
@@ -31,7 +31,7 @@
import org.jboss.seam.international.status.Level;
import org.jboss.seam.international.status.MessageFactory;
import org.jboss.seam.international.status.MessageImpl;
-import org.jboss.seam.international.status.Messages;
+import org.jboss.seam.international.status.MessagesImpl;
import org.jboss.seam.international.status.MutableMessage;
import org.jboss.seam.international.status.builder.BundleKey;
import org.jboss.seam.international.status.builder.BundleTemplateMessageImpl;
@@ -56,11 +56,11 @@
@Deployment
public static JavaArchive createTestArchive()
{
- return ShrinkWrap.create("test.jar", JavaArchive.class).addClasses(Messages.class, MessageFactory.class, BundleTemplateMessageImpl.class, TemplateMessageImpl.class, Bundles.class).addManifestResource(new ByteArrayAsset(new byte[0]), ArchivePaths.create("beans.xml"));
+ return ShrinkWrap.create("test.jar", JavaArchive.class).addClasses(MessagesImpl.class, MessageFactory.class, BundleTemplateMessageImpl.class, TemplateMessageImpl.class, Bundles.class).addManifestResource(new ByteArrayAsset(new byte[0]), ArchivePaths.create("beans.xml"));
}
@Inject
- Messages messages;
+ MessagesImpl messages;
@Before
public void before()
14 years, 3 months
Seam SVN: r13169 - examples/trunk/booking-simplified/src/main/webapp/WEB-INF.
by seam-commits@lists.jboss.org
Author: lincolnthree
Date: 2010-06-15 18:30:05 -0400 (Tue, 15 Jun 2010)
New Revision: 13169
Modified:
examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml
examples/trunk/booking-simplified/src/main/webapp/WEB-INF/pretty-config.xml
Log:
Updated prettyfaces config and enabled conversation boundary interceptor
Modified: examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml 2010-06-15 21:55:11 UTC (rev 13168)
+++ examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml 2010-06-15 22:30:05 UTC (rev 13169)
@@ -7,4 +7,8 @@
<alternatives>
<class>org.jboss.seam.examples.booking.setup.ApplicationSetupBean</class>
</alternatives>
+
+ <interceptors>
+ <class>org.jboss.seam.faces.context.conversation.ConversationBoundaryInterceptor</class>
+ </interceptors>
</beans>
\ No newline at end of file
Modified: examples/trunk/booking-simplified/src/main/webapp/WEB-INF/pretty-config.xml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/WEB-INF/pretty-config.xml 2010-06-15 21:55:11 UTC (rev 13168)
+++ examples/trunk/booking-simplified/src/main/webapp/WEB-INF/pretty-config.xml 2010-06-15 22:30:05 UTC (rev 13169)
@@ -9,4 +9,34 @@
<view-id>/home.seam</view-id>
</url-mapping>
+ <url-mapping>
+ <pattern value="/search"></pattern>
+ <view-id>/search.seam</view-id>
+ </url-mapping>
+
+ <url-mapping>
+ <pattern value="/hotel/#{/\d+/ id}"></pattern>
+ <view-id>/hotel.seam</view-id>
+ </url-mapping>
+
+ <url-mapping>
+ <pattern value="/book"></pattern>
+ <view-id>/book.seam</view-id>
+ </url-mapping>
+
+ <url-mapping>
+ <pattern value="/confirm"></pattern>
+ <view-id>/confirm.seam</view-id>
+ </url-mapping>
+
+ <url-mapping>
+ <pattern value="/register"></pattern>
+ <view-id>/register.seam</view-id>
+ </url-mapping>
+
+ <url-mapping>
+ <pattern value="/settings"></pattern>
+ <view-id>/password.seam</view-id>
+ </url-mapping>
+
</pretty-config>
\ No newline at end of file
14 years, 3 months
Seam SVN: r13168 - in examples/trunk/booking-simplified: src/main/java/org/jboss/seam/examples/booking/booking and 3 other directories.
by seam-commits@lists.jboss.org
Author: lincolnthree
Date: 2010-06-15 17:55:11 -0400 (Tue, 15 Jun 2010)
New Revision: 13168
Added:
examples/trunk/booking-simplified/src/main/webapp/WEB-INF/pretty-config.xml
Modified:
examples/trunk/booking-simplified/pom.xml
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgent.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/inventory/HotelSearchBean.java
examples/trunk/booking-simplified/src/main/webapp/hotel.xhtml
examples/trunk/booking-simplified/src/main/webapp/search.xhtml
Log:
Changed hotel view to use s:viewAction
Added prettyfaces
Modified: examples/trunk/booking-simplified/pom.xml
===================================================================
--- examples/trunk/booking-simplified/pom.xml 2010-06-15 21:29:48 UTC (rev 13167)
+++ examples/trunk/booking-simplified/pom.xml 2010-06-15 21:55:11 UTC (rev 13168)
@@ -38,7 +38,7 @@
<jboss-as-client.version>6.0.0.20100216-M2</jboss-as-client.version>
<jboss-javaee6-spec.version>1.0.0.Beta4</jboss-javaee6-spec.version>
<jboss-server-manager.version>1.0.3.GA</jboss-server-manager.version>
- <seam-faces.version>3.0.0.Alpha3</seam-faces.version>
+ <seam-faces.version>3.0.0-SNAPSHOT</seam-faces.version>
</properties>
<repositories>
@@ -92,6 +92,12 @@
</dependency>
<dependency>
+ <groupId>com.ocpsoft</groupId>
+ <artifactId>prettyfaces-jsf2</artifactId>
+ <version>3.0.1</version>
+ </dependency>
+
+ <dependency>
<groupId>org.jboss.seam.xml</groupId>
<artifactId>seam-xml-config</artifactId>
<exclusions>
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgent.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgent.java 2010-06-15 21:29:48 UTC (rev 13167)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgent.java 2010-06-15 21:55:11 UTC (rev 13168)
@@ -24,6 +24,7 @@
package org.jboss.seam.examples.booking.booking;
import javax.ejb.Local;
+
import org.jboss.seam.examples.booking.model.Booking;
import org.jboss.seam.examples.booking.model.Hotel;
@@ -33,7 +34,7 @@
@Local
public interface BookingAgent
{
- void selectHotel(Hotel hotel);
+ void selectHotel(Long hotelId);
void bookHotel();
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java 2010-06-15 21:29:48 UTC (rev 13167)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java 2010-06-15 21:55:11 UTC (rev 13168)
@@ -60,8 +60,8 @@
@PersistenceContext(type = EXTENDED)
private EntityManager em;
-// @Inject
-// private Conversation conversation;
+ // @Inject
+ // private Conversation conversation;
@Inject
private MessageFactory mf;
@@ -87,13 +87,16 @@
private boolean bookingValid;
@Begin
- public void selectHotel(final Hotel hotel)
+ public void selectHotel(final Long id)
{
// NOTE get a fresh reference that's managed by the conversational
// persistence context
- hotelSelection = em.find(Hotel.class, hotel.getId());
- log.info(mf.info("Selected the {0} in {1}").textParams(hotelSelection.getName(), hotelSelection.getCity()).build().getText());
- //conversation.begin();
+ if (id != null)
+ {
+ hotelSelection = em.find(Hotel.class, id);
+ log.info(mf.info("Selected the {0} in {1}").textParams(hotelSelection.getName(), hotelSelection.getCity()).build().getText());
+ }
+ // conversation.begin();
}
public void bookHotel()
@@ -136,7 +139,7 @@
manager.fireEvent(new BookingEvent(booking), ConfirmedLiteral.INSTANCE);
log.info(mf.info("New booking at the {0} confirmed for {1}").textParams(booking.getHotel().getName(), booking.getUser().getName()).build().getText());
messages.info(new BundleKey("messages.properties", "booking.confirmed")).textDefault("Booking confirmed.");
- //conversation.end();
+ // conversation.end();
}
@End
@@ -144,7 +147,7 @@
{
booking = null;
hotelSelection = null;
- //conversation.end();
+ // conversation.end();
}
@Produces
@@ -160,7 +163,12 @@
@RequestScoped
public Hotel getHotelSelection()
{
- return booking != null ? booking.getHotel() : hotelSelection;
+ Hotel hotel = booking != null ? booking.getHotel() : hotelSelection;
+ if (hotel == null)
+ {
+ hotel = new Hotel();
+ }
+ return hotel;
}
public boolean isBookingValid()
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/inventory/HotelSearchBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/inventory/HotelSearchBean.java 2010-06-15 21:29:48 UTC (rev 13167)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/inventory/HotelSearchBean.java 2010-06-15 21:55:11 UTC (rev 13168)
@@ -27,10 +27,11 @@
import java.util.List;
import javax.ejb.Stateful;
+import javax.enterprise.context.Dependent;
import javax.enterprise.context.SessionScoped;
+import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
-import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
@@ -41,21 +42,23 @@
import org.jboss.seam.examples.booking.model.Hotel_;
import org.jboss.seam.international.status.MessageFactory;
import org.slf4j.Logger;
-//import org.jboss.seam.international.status.MessageFactory;
-//import org.slf4j.Logger;
@Named("hotelSearch")
@Stateful
@SessionScoped
public class HotelSearchBean implements HotelSearch
{
- @Inject private Logger log;
+ @Inject
+ private Logger log;
- @PersistenceContext private EntityManager em;
+ @PersistenceContext
+ private EntityManager em;
- @Inject private SearchCriteria criteria;
+ @Inject
+ private SearchCriteria criteria;
- @Inject private MessageFactory mf;
+ @Inject
+ private MessageFactory mf;
private boolean nextPageAvailable = false;
@@ -79,10 +82,11 @@
queryHotels(criteria);
}
- public
- @Produces
+ public @Produces
@Named
- //@RequestScoped // if enabled, variable doesn't get updated after the action is executed w/o a redirect
+ @Dependent
+ // @RequestScoped // if enabled, variable doesn't get updated after the
+ // action is executed w/o a redirect
List<Hotel> getHotels()
{
return hotels;
@@ -98,24 +102,15 @@
return criteria.getPage() > 0;
}
- private void queryHotels(SearchCriteria criteria)
+ private void queryHotels(final SearchCriteria criteria)
{
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Hotel> cquery = builder.createQuery(Hotel.class);
Root<Hotel> hotel = cquery.from(Hotel.class);
// QUESTION can like create the pattern for us?
- cquery.select(hotel)
- .where(builder.or(
- builder.like(builder.lower(hotel.get(Hotel_.name)), criteria.getSearchPattern()),
- builder.like(builder.lower(hotel.get(Hotel_.city)), criteria.getSearchPattern()),
- builder.like(builder.lower(hotel.get(Hotel_.zip)), criteria.getSearchPattern()),
- builder.like(builder.lower(hotel.get(Hotel_.address)), criteria.getSearchPattern())
- ));
+ cquery.select(hotel).where(builder.or(builder.like(builder.lower(hotel.get(Hotel_.name)), criteria.getSearchPattern()), builder.like(builder.lower(hotel.get(Hotel_.city)), criteria.getSearchPattern()), builder.like(builder.lower(hotel.get(Hotel_.zip)), criteria.getSearchPattern()), builder.like(builder.lower(hotel.get(Hotel_.address)), criteria.getSearchPattern())));
- List<Hotel> results = em.createQuery(cquery)
- .setMaxResults(criteria.getFetchSize())
- .setFirstResult(criteria.getFetchOffset())
- .getResultList();
+ List<Hotel> results = em.createQuery(cquery).setMaxResults(criteria.getFetchSize()).setFirstResult(criteria.getFetchOffset()).getResultList();
nextPageAvailable = results.size() > criteria.getPageSize();
if (nextPageAvailable)
@@ -127,7 +122,6 @@
{
hotels = results;
}
- log.info(mf.info("Found {0} hotel(s) matching search term ''{1}'' (limit {2})")
- .textParams(hotels.size(), criteria.getQuery(), criteria.getPageSize()).build().getText());
+ log.info(mf.info("Found {0} hotel(s) matching search term ''{1}'' (limit {2})").textParams(hotels.size(), criteria.getQuery(), criteria.getPageSize()).build().getText());
}
}
Added: examples/trunk/booking-simplified/src/main/webapp/WEB-INF/pretty-config.xml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/WEB-INF/pretty-config.xml (rev 0)
+++ examples/trunk/booking-simplified/src/main/webapp/WEB-INF/pretty-config.xml 2010-06-15 21:55:11 UTC (rev 13168)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pretty-config xmlns="http://ocpsoft.com/prettyfaces/2.0.4"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://ocpsoft.com/prettyfaces/2.0.4
+ http://ocpsoft.com/xml/ns/prettyfaces/ocpsoft-pretty-faces-2.0.4.xsd">
+
+ <url-mapping>
+ <pattern value="/"></pattern>
+ <view-id>/home.seam</view-id>
+ </url-mapping>
+
+</pretty-config>
\ No newline at end of file
Modified: examples/trunk/booking-simplified/src/main/webapp/hotel.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/hotel.xhtml 2010-06-15 21:29:48 UTC (rev 13167)
+++ examples/trunk/booking-simplified/src/main/webapp/hotel.xhtml 2010-06-15 21:55:11 UTC (rev 13168)
@@ -4,8 +4,14 @@
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.org/seam/faces"
template="/WEB-INF/layout/template.xhtml">
+ <f:metadata>
+ <f:viewParam name="id" value="#{_hotel}" />
+ <s:viewAction action="#{bookingAgent.selectHotel(_hotel)}" />
+ </f:metadata>
+
<ui:define name="content">
<div class="section">
Modified: examples/trunk/booking-simplified/src/main/webapp/search.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/search.xhtml 2010-06-15 21:29:48 UTC (rev 13167)
+++ examples/trunk/booking-simplified/src/main/webapp/search.xhtml 2010-06-15 21:55:11 UTC (rev 13168)
@@ -77,7 +77,10 @@
</h:column>
<h:column id="actCol">
<f:facet id="actFct" name="header">Action</f:facet>
- <h:commandLink id="view" value="View" action="#{bookingAgent.selectHotel(_hotel)}" style="white-space: nowrap;"/>
+ <h:link id="view" value="View" outcome="hotel" style="white-space: nowrap;">
+ <f:param name="id" value="#{_hotel.id}" />
+ </h:link>
+
<ui:remove><!--
<h:commandButton id="view" value="View" action="#{bookingAgent.selectHotel(_hotel)}"/>
--></ui:remove>
14 years, 3 months
Seam SVN: r13167 - in modules/faces/branches/exception_handling/impl/src: main/java/org/jboss/seam/faces and 3 other directories.
by seam-commits@lists.jboss.org
Author: lightguard
Date: 2010-06-15 17:29:48 -0400 (Tue, 15 Jun 2010)
New Revision: 13167
Added:
modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/
modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandler.java
modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandlerFactory.java
modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/ThrowExceptionRenderer.java
Removed:
modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandler.java
modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandlerFactory.java
Modified:
modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/ExceptionHandlerExecutor.java
modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/FacesStateImpl.java
modules/faces/branches/exception_handling/impl/src/main/resources/META-INF/faces-config.xml
modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/ExceptionHandlerTest.java
modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/UnsupportedOperationExceptionHandler.java
Log:
First working test
Moving things around a bit to seperate the core exception handling from the impl
Also a couple of TODOs to support unwrapping and walking the exception type chain.
Modified: modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/ExceptionHandlerExecutor.java
===================================================================
--- modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/ExceptionHandlerExecutor.java 2010-06-15 20:53:32 UTC (rev 13166)
+++ modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/ExceptionHandlerExecutor.java 2010-06-15 21:29:48 UTC (rev 13167)
@@ -21,14 +21,11 @@
*/
package org.jboss.seam.exceptionhandling;
-import org.jboss.seam.faces.util.BeanManagerUtils;
-
+import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
/**
* Finds and invokes all {@link ExceptionHandler} instants for a particular
@@ -50,18 +47,20 @@
final Throwable exception = event.getException();
final State state = event.getState();
final BeanManager beanManager = state.getBeanManager();
- final BeanManagerUtils managerUtils = BeanManagerUtils.getContextualInstance(beanManager, BeanManagerUtils.class);
ExceptionHandler bean;
- final List<ExceptionHandler> beans = managerUtils.getContextualInstances(ExceptionHandler.class);
+ final List<ExceptionHandler> beans = this.getContextualExceptionHandlerInstances(beanManager);
// Finding the correct exception handlers using reflection based on the method
- // to determine if it's the correct
+ // to determine if it's the correct
+
+ // TODO: Uwrap the exception
for (Iterator<ExceptionHandler> iter = beans.iterator(); iter.hasNext();)
{
bean = iter.next();
try
{
- bean.getClass().getMethod("handle", HandlerChain.class, FacesState.class, exception.getClass());
+ // TODO: search for type hierarchy as well.
+ bean.getClass().getMethod("handle", HandlerChain.class, state.getClass().getInterfaces()[0], exception.getClass());
}
catch (NoSuchMethodException e)
{
@@ -69,6 +68,7 @@
}
}
+ // TODO: if priorities are the same look for type hierarchy
Collections.sort(beans, new Comparator<ExceptionHandler>()
{
public int compare(ExceptionHandler lhs, ExceptionHandler rhs)
@@ -83,4 +83,19 @@
event.setExceptionHandled(true);
}
}
+
+ @SuppressWarnings("unchecked")
+ private <T> List<T> getContextualExceptionHandlerInstances(BeanManager manager)
+ {
+ List<T> result = new ArrayList<T>();
+ for (Bean<?> bean : manager.getBeans(ExceptionHandler.class))
+ {
+ CreationalContext<T> context = (CreationalContext<T>) manager.createCreationalContext(bean);
+ if (context != null)
+ {
+ result.add((T) manager.getReference(bean, ExceptionHandler.class, context));
+ }
+ }
+ return result;
+ }
}
Modified: modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/FacesStateImpl.java
===================================================================
--- modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/FacesStateImpl.java 2010-06-15 20:53:32 UTC (rev 13166)
+++ modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/FacesStateImpl.java 2010-06-15 21:29:48 UTC (rev 13167)
@@ -29,15 +29,19 @@
public class FacesStateImpl implements FacesState
{
- @Inject
private BeanManager beanManager;
- @Inject
private FacesContext facesContext;
- @Inject
private NavigationHandler navigationHandler;
+ public FacesStateImpl(BeanManager beanManager, FacesContext facesContext)
+ {
+ this.beanManager = beanManager;
+ this.facesContext = facesContext;
+ this.navigationHandler = facesContext.getApplication().getNavigationHandler();
+ }
+
/**
* @return the currently active Faces Context object
*/
@@ -54,7 +58,13 @@
*/
public void navigate(String viewId)
{
- this.navigationHandler.handleNavigation(this.facesContext, null, viewId);
+ String currentViewId = null;
+
+ if (this.facesContext.getViewRoot() != null)
+ {
+ currentViewId = this.facesContext.getViewRoot().getViewId();
+ }
+ this.navigationHandler.handleNavigation(this.facesContext, currentViewId, viewId);
}
/**
Deleted: modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandler.java
===================================================================
--- modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandler.java 2010-06-15 20:53:32 UTC (rev 13166)
+++ modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandler.java 2010-06-15 21:29:48 UTC (rev 13167)
@@ -1,106 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., 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.
- */
-
-package org.jboss.seam.exceptionhandling;
-
-import org.jboss.seam.faces.util.BeanManagerUtils;
-import org.jboss.weld.extensions.beanManager.BeanManagerAccessor;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.event.Event;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.util.TypeLiteral;
-import javax.faces.FacesException;
-import javax.faces.context.*;
-import javax.faces.context.ExceptionHandler;
-import javax.faces.event.ExceptionQueuedEvent;
-import javax.inject.Inject;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-public class SeamExceptionHandler extends ExceptionHandlerWrapper
-{
- private BeanManager beanManager;
-
- private BeanManagerUtils managerUtils;
-
- private ExceptionHandler wrapped;
-
-
- public SeamExceptionHandler() throws NamingException
- {
- this.beanManager = BeanManagerAccessor.getManager();
- this.managerUtils = new BeanManagerUtils();
- }
-
- public SeamExceptionHandler(ExceptionHandler wrappedHandler) throws NamingException
- {
- this();
- this.wrapped = wrappedHandler;
- }
-
- @Override
- public void handle() throws FacesException
- {
- Set<Bean<?>> beans;
- ExceptionQueuedEvent event;
- Throwable exception;
- HandlerChain chain;
- FacesState state = BeanManagerUtils.getContextualInstance(this.beanManager, FacesStateImpl.class);
- Bean<?> bean;
-
- for (Iterator<ExceptionQueuedEvent> i = this.getUnhandledExceptionQueuedEvents().iterator(); i.hasNext();)
- {
- event = i.next();
- exception = event.getContext().getException();
-
- final Throwable realException = (this.getRootCause(exception) != null) ? this.getRootCause(exception) : exception;
-
- ExceptionEvent exceptionEventObject = new ExceptionEvent(realException, this.managerUtils.getContextualInstance(FacesState.class));
-
- this.beanManager.fireEvent(exceptionEventObject);
-
- if (exceptionEventObject.isExceptionHandled())
- {
- i.remove();
- }
- }
-
- if (this.wrapped != null)
- {
- this.wrapped.handle();
- }
- }
-
- @Override
- public javax.faces.context.ExceptionHandler getWrapped()
- {
- return this.wrapped;
- }
-}
Deleted: modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandlerFactory.java
===================================================================
--- modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandlerFactory.java 2010-06-15 20:53:32 UTC (rev 13166)
+++ modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandlerFactory.java 2010-06-15 21:29:48 UTC (rev 13167)
@@ -1,51 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., 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.
- */
-
-package org.jboss.seam.exceptionhandling;
-
-import javax.faces.context.ExceptionHandler;
-import javax.faces.context.ExceptionHandlerFactory;
-import javax.naming.NamingException;
-
-public class SeamExceptionHandlerFactory extends ExceptionHandlerFactory
-{
- private ExceptionHandlerFactory parent;
-
- public SeamExceptionHandlerFactory(ExceptionHandlerFactory parent)
- {
- this.parent = parent;
- }
-
- @Override
- public javax.faces.context.ExceptionHandler getExceptionHandler()
- {
- ExceptionHandler result = this.parent.getExceptionHandler();
- try
- {
- return new SeamExceptionHandler(result);
- }
- catch (NamingException e)
- {
- return result;
- }
- }
-}
Copied: modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandler.java (from rev 13120, modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandler.java)
===================================================================
--- modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandler.java (rev 0)
+++ modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandler.java 2010-06-15 21:29:48 UTC (rev 13167)
@@ -0,0 +1,112 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., 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.
+ */
+
+package org.jboss.seam.faces.exceptionhandling;
+
+import org.jboss.seam.exceptionhandling.ExceptionEvent;
+import org.jboss.seam.exceptionhandling.FacesState;
+import org.jboss.seam.exceptionhandling.FacesStateImpl;
+import org.jboss.seam.exceptionhandling.HandlerChain;
+import org.jboss.seam.faces.util.BeanManagerUtils;
+import org.jboss.weld.extensions.beanManager.BeanManagerAccessor;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Event;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.TypeLiteral;
+import javax.faces.FacesException;
+import javax.faces.context.*;
+import javax.faces.context.ExceptionHandler;
+import javax.faces.event.ExceptionQueuedEvent;
+import javax.inject.Inject;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+public class SeamExceptionHandler extends ExceptionHandlerWrapper
+{
+ @Inject
+ private BeanManager beanManager;
+
+ private ExceptionHandler wrapped;
+
+
+ public SeamExceptionHandler()
+ {
+ }
+
+ public SeamExceptionHandler(ExceptionHandler wrappedHandler)
+ {
+ this.wrapped = wrappedHandler;
+ }
+
+ @Override
+ public void handle() throws FacesException
+ {
+ Set<Bean<?>> beans;
+ ExceptionQueuedEvent event;
+ Throwable exception;
+ HandlerChain chain;
+ Bean<?> bean;
+
+ if (this.beanManager == null)
+ {
+ this.beanManager = BeanManagerAccessor.getManager();
+ }
+
+ FacesState state = new FacesStateImpl(beanManager, FacesContext.getCurrentInstance());
+
+ for (Iterator<ExceptionQueuedEvent> i = this.getUnhandledExceptionQueuedEvents().iterator(); i.hasNext();)
+ {
+ event = i.next();
+ exception = event.getContext().getException();
+
+ final Throwable realException = (this.getRootCause(exception) != null) ? this.getRootCause(exception) : exception;
+
+ ExceptionEvent exceptionEventObject = new ExceptionEvent(realException, state);
+
+ this.beanManager.fireEvent(exceptionEventObject);
+
+ if (exceptionEventObject.isExceptionHandled())
+ {
+ i.remove();
+ }
+ }
+
+ if (this.wrapped != null)
+ {
+ this.wrapped.handle();
+ }
+ }
+
+ @Override
+ public javax.faces.context.ExceptionHandler getWrapped()
+ {
+ return this.wrapped;
+ }
+}
Property changes on: modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandler.java
___________________________________________________________________
Name: svn:mime-type
+ text/x-java-source
Name: svn:keywords
+ Author Date Id Revision URL
Name: svn:eol-style
+ native
Copied: modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandlerFactory.java (from rev 13077, modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/exceptionhandling/SeamExceptionHandlerFactory.java)
===================================================================
--- modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandlerFactory.java (rev 0)
+++ modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandlerFactory.java 2010-06-15 21:29:48 UTC (rev 13167)
@@ -0,0 +1,44 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., 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.
+ */
+
+package org.jboss.seam.faces.exceptionhandling;
+
+import javax.faces.context.ExceptionHandler;
+import javax.faces.context.ExceptionHandlerFactory;
+
+public class SeamExceptionHandlerFactory extends ExceptionHandlerFactory
+{
+ private ExceptionHandlerFactory parent;
+
+ public SeamExceptionHandlerFactory(ExceptionHandlerFactory parent)
+ {
+ this.parent = parent;
+ }
+
+ @Override
+ public javax.faces.context.ExceptionHandler getExceptionHandler()
+ {
+ ExceptionHandler result = this.parent.getExceptionHandler();
+ return new SeamExceptionHandler(result);
+
+ }
+}
Property changes on: modules/faces/branches/exception_handling/impl/src/main/java/org/jboss/seam/faces/exceptionhandling/SeamExceptionHandlerFactory.java
___________________________________________________________________
Name: svn:mime-type
+ text/x-java-source
Name: svn:keywords
+ Author Date Id Revision URL
Name: svn:eol-style
+ native
Modified: modules/faces/branches/exception_handling/impl/src/main/resources/META-INF/faces-config.xml
===================================================================
--- modules/faces/branches/exception_handling/impl/src/main/resources/META-INF/faces-config.xml 2010-06-15 20:53:32 UTC (rev 13166)
+++ modules/faces/branches/exception_handling/impl/src/main/resources/META-INF/faces-config.xml 2010-06-15 21:29:48 UTC (rev 13167)
@@ -19,7 +19,7 @@
<factory>
<external-context-factory>org.jboss.seam.faces.environment.SeamExternalContextFactory</external-context-factory>
- <exception-handler-factory>org.jboss.seam.exceptionhandling.SeamExceptionHandlerFactory</exception-handler-factory>
+ <exception-handler-factory>org.jboss.seam.faces.exceptionhandling.SeamExceptionHandlerFactory</exception-handler-factory>
</factory>
<application>
Modified: modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/ExceptionHandlerTest.java
===================================================================
--- modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/ExceptionHandlerTest.java 2010-06-15 20:53:32 UTC (rev 13166)
+++ modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/ExceptionHandlerTest.java 2010-06-15 21:29:48 UTC (rev 13167)
@@ -26,44 +26,75 @@
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.seam.faces.environment.FacesContextProducer;
import org.jboss.seam.faces.environment.MockFacesContext;
+import org.jboss.seam.faces.exceptionhandling.SeamExceptionHandler;
+import org.jboss.seam.faces.exceptionhandling.SeamExceptionHandlerFactory;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.impl.base.asset.ByteArrayAsset;
+import org.jboss.test.faces.mock.MockFacesEnvironment;
+import org.jboss.test.faces.mock.application.MockApplication;
+import org.jboss.test.faces.mock.application.MockNavigationHandler;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import static org.junit.Assert.*;
import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.faces.application.NavigationHandler;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.ExceptionHandlerFactory;
import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
import javax.inject.Inject;
+import java.io.IOException;
+
+import static org.easymock.EasyMock.expect;
+import static org.junit.Assert.assertTrue;
+
@RunWith(Arquillian.class)
public class ExceptionHandlerTest
{
+ @Inject
+ private SeamExceptionHandler seamHandler;
+
+ @Inject
+ private UnsupportedOperationExceptionHandler handler;
+
+ @Inject
+ private BeanManager beanManager;
+
+ private MockFacesEnvironment environment;
+
@Deployment
public static Archive<?> createTestArchive()
{
return ShrinkWrap.create("test.jar", JavaArchive.class)
- .addClass(FacesContextProducer.class)
- .addClass(UnsupportedOperationExceptionHandler.class)
+ .addClasses(UnsupportedOperationExceptionHandler.class, SeamExceptionHandler.class,
+ ExceptionHandlerExecutor.class)
.addManifestResource(new ByteArrayAsset(new byte[0]), ArchivePaths.create("beans.xml"));
}
- @Inject
- private Instance<FacesContext> facesContextInstance;
+ @Before
+ public void setup()
+ {
+ this.environment = MockFacesEnvironment.createEnvironment().withApplication();
- @Inject
- private UnsupportedOperationExceptionHandler handler;
+ expect(this.environment.getApplication().getNavigationHandler())
+ .andStubReturn(this.environment.createMock(NavigationHandler.class));
+ this.environment.replay();
+ }
+
@Test
- public void testHandlerIsCalled()
+ public void testHandlerIsCalled() throws IOException
{
- new MockFacesContext().set();
-
- this.facesContextInstance.get().getApplication();
-
+ ExceptionEvent event = new ExceptionEvent(new UnsupportedOperationException(), new FacesStateImpl(this.beanManager, this.environment.getFacesContext()));
+ this.beanManager.fireEvent(event);
assertTrue(this.handler.isHandleCalled());
+ assertTrue(event.isExceptionHandled());
}
}
Added: modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/ThrowExceptionRenderer.java
===================================================================
--- modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/ThrowExceptionRenderer.java (rev 0)
+++ modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/ThrowExceptionRenderer.java 2010-06-15 21:29:48 UTC (rev 13167)
@@ -0,0 +1,52 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., 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.
+ */
+
+package org.jboss.seam.exceptionhandling;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.render.Renderer;
+import java.io.IOException;
+
+public class ThrowExceptionRenderer extends Renderer
+{
+ /**
+ * <p>Render the beginning specified {@link javax.faces.component.UIComponent} to the
+ * output stream or writer associated with the response we are creating.
+ * If the conversion attempted in a previous call to
+ * <code>getConvertedValue()</code> for this component failed, the state
+ * information saved during execution
+ * of <code>decode()</code> should be used to reproduce the incorrect
+ * input.</p>
+ *
+ * @param context {@link javax.faces.context.FacesContext} for the request we are processing
+ * @param component {@link javax.faces.component.UIComponent} to be rendered
+ * @throws java.io.IOException if an input/output error occurs while rendering
+ * @throws NullPointerException if <code>context</code>
+ * or <code>component</code> is null
+ */
+ @Override
+ public void encodeBegin(FacesContext context, UIComponent component) throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+}
Property changes on: modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/ThrowExceptionRenderer.java
___________________________________________________________________
Name: svn:mime-type
+ text/x-java-source
Name: svn:keywords
+ Author Date Id Revision URL
Name: svn:eol-style
+ native
Modified: modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/UnsupportedOperationExceptionHandler.java
===================================================================
--- modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/UnsupportedOperationExceptionHandler.java 2010-06-15 20:53:32 UTC (rev 13166)
+++ modules/faces/branches/exception_handling/impl/src/test/java/org/jboss/seam/exceptionhandling/UnsupportedOperationExceptionHandler.java 2010-06-15 21:29:48 UTC (rev 13167)
@@ -22,6 +22,9 @@
package org.jboss.seam.exceptionhandling;
+import javax.enterprise.context.RequestScoped;
+
+@RequestScoped
public class UnsupportedOperationExceptionHandler implements ExceptionHandler<UnsupportedOperationException, FacesState>
{
private boolean handleCalled;
14 years, 3 months
Seam SVN: r13166 - in examples/trunk/booking-simplified/src: main/java/org/jboss/seam/examples/booking/model and 7 other directories.
by seam-commits@lists.jboss.org
Author: lincolnthree
Date: 2010-06-15 16:53:32 -0400 (Tue, 15 Jun 2010)
New Revision: 13166
Modified:
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducerBean.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/User.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockIdentity.java
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/setup/ApplicationSetupBean.java
examples/trunk/booking-simplified/src/main/resources/META-INF/persistence.xml
examples/trunk/booking-simplified/src/main/resources/messages.properties
examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml
examples/trunk/booking-simplified/src/main/webapp/search.xhtml
examples/trunk/booking-simplified/src/test/java/org/jboss/seam/examples/booking/booking/BookingAgentTest.java
Log:
Removed search button - updated identity to display messages on events.
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducerBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducerBean.java 2010-06-15 20:48:34 UTC (rev 13165)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/account/AccountProducerBean.java 2010-06-15 20:53:32 UTC (rev 13166)
@@ -9,6 +9,7 @@
import javax.persistence.PersistenceContext;
import org.jboss.seam.examples.booking.model.User;
+import org.jboss.seam.examples.booking.security.MockCredentials;
import org.slf4j.Logger;
/**
@@ -23,13 +24,20 @@
@PersistenceContext
private EntityManager em;
+ @Inject
+ MockCredentials credentials;
+
@Produces
@Registered
@Named("currentUser")
@SessionScoped
public User getCurrentAccount()
{
- log.info("Producing canned User");
- return em.find(User.class, "dan");
+ User result = em.find(User.class, credentials.getUsername());
+ if (result == null)
+ {
+ result = new User();
+ }
+ return result;
}
}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/User.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/User.java 2010-06-15 20:48:34 UTC (rev 13165)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/model/User.java 2010-06-15 20:53:32 UTC (rev 13166)
@@ -25,23 +25,26 @@
import java.io.Serializable;
+import javax.enterprise.inject.Typed;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
-
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/**
- * <p><strong>User</strong> is the model/entity class that represents a customer
- * who may book a hotel.</p>
- *
+ * <p>
+ * <strong>User</strong> is the model/entity class that represents a customer
+ * who may book a hotel.
+ * </p>
+ *
* @author Gavin King
* @author Dan Allen
*/
@Entity
@Table(name = "customer")
+@Typed()
public class User implements Serializable
{
private String username;
@@ -52,13 +55,13 @@
{
}
- public User(String name, String username)
+ public User(final String name, final String username)
{
this.name = name;
this.username = username;
}
- public User(String name, String username, String password)
+ public User(final String name, final String username, final String password)
{
this(name, username);
this.password = password;
@@ -71,7 +74,7 @@
return name;
}
- public void setName(String name)
+ public void setName(final String name)
{
this.name = name;
}
@@ -83,7 +86,7 @@
return password;
}
- public void setPassword(String password)
+ public void setPassword(final String password)
{
this.password = password;
}
@@ -97,7 +100,7 @@
return username;
}
- public void setUsername(String username)
+ public void setUsername(final String username)
{
this.username = username;
}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockIdentity.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockIdentity.java 2010-06-15 20:48:34 UTC (rev 13165)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/security/MockIdentity.java 2010-06-15 20:53:32 UTC (rev 13166)
@@ -29,6 +29,9 @@
import javax.inject.Named;
import javax.servlet.http.HttpSession;
+import org.jboss.seam.international.status.Messages;
+import org.jboss.seam.international.status.builder.BundleKey;
+
/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
@@ -42,6 +45,12 @@
@Inject
FacesContext context;
+ @Inject
+ Messages messages;
+
+ @Inject
+ MockCredentials credentials;
+
public boolean isLoggedIn()
{
return loggedIn;
@@ -54,12 +63,20 @@
public void login()
{
- loggedIn = true;
+ if ((credentials.getUsername() != null) && !"".equals(credentials.getUsername().trim()))
+ {
+ loggedIn = true;
+ messages.info(new BundleKey("messages.properties", "identity.loggedIn"));
+ }
+ else
+ {
+ messages.info(new BundleKey("messages.properties", "identity.loginFailed"));
+ }
}
public void logout()
{
- loggedIn = true;
+ loggedIn = false;
HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
session.invalidate();
}
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/setup/ApplicationSetupBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/setup/ApplicationSetupBean.java 2010-06-15 20:48:34 UTC (rev 13165)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/setup/ApplicationSetupBean.java 2010-06-15 20:53:32 UTC (rev 13166)
@@ -5,6 +5,7 @@
import javax.ejb.Stateless;
import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Alternative;
import javax.faces.event.PostConstructApplicationEvent;
import javax.inject.Inject;
import javax.persistence.EntityManager;
@@ -20,6 +21,7 @@
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@Stateless
+@Alternative
public class ApplicationSetupBean implements SetupBean
{
@PersistenceContext
Modified: examples/trunk/booking-simplified/src/main/resources/META-INF/persistence.xml
===================================================================
--- examples/trunk/booking-simplified/src/main/resources/META-INF/persistence.xml 2010-06-15 20:48:34 UTC (rev 13165)
+++ examples/trunk/booking-simplified/src/main/resources/META-INF/persistence.xml 2010-06-15 20:53:32 UTC (rev 13166)
@@ -5,9 +5,9 @@
version="1.0">
<persistence-unit name="booking">
<!-- <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>-->
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/__default</jta-data-source>
<!--
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/DefaultDS</jta-data-source>
<jta-data-source>jdbc/__arquillian</jta-data-source>
-->
Modified: examples/trunk/booking-simplified/src/main/resources/messages.properties
===================================================================
--- examples/trunk/booking-simplified/src/main/resources/messages.properties 2010-06-15 20:48:34 UTC (rev 13165)
+++ examples/trunk/booking-simplified/src/main/resources/messages.properties 2010-06-15 20:53:32 UTC (rev 13166)
@@ -9,3 +9,6 @@
account.usernameTaken=The username '{0}' is already taken. Please choose another username.
registration.registered=You have been successfully registered as the user {0}!
registration.invalid=Invalid registration. Please correct the errors and try again.
+identity.loggedOut=You have successfully logged out.
+identity.loggedIn=You've logged in as {0}.
+identity.loginFailed=Invalid username or password.
Modified: examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml 2010-06-15 20:48:34 UTC (rev 13165)
+++ examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml 2010-06-15 20:53:32 UTC (rev 13166)
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
-<beans 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/beans_1_0.xsd">
- <interceptors>
- <class>org.jboss.seam.faces.context.conversation.ConversationBoundaryInterceptor</class>
- </interceptors>
+<beans 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/beans_1_0.xsd">
+
+ <alternatives>
+ <class>org.jboss.seam.examples.booking.setup.ApplicationSetupBean</class>
+ </alternatives>
</beans>
\ No newline at end of file
Modified: examples/trunk/booking-simplified/src/main/webapp/search.xhtml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/search.xhtml 2010-06-15 20:48:34 UTC (rev 13165)
+++ examples/trunk/booking-simplified/src/main/webapp/search.xhtml 2010-06-15 20:53:32 UTC (rev 13166)
@@ -39,10 +39,6 @@
<f:ajax event="keyup" listener="#{hotelSearch.find}" render=":searchResults" onevent="controlSpinner"/>
</h:inputText>
#{' '}
- <h:commandButton id="findHotels" value="Find Hotels" action="#{hotelSearch.find}">
- <f:ajax execute="query" render=":searchResults" onevent="controlSpinner"/>
- </h:commandButton>
- #{' '}
<span id="activity" style="display: none;"><h:graphicImage id="spinner" value="/img/spinner.gif"/></span>
<br/>
<h:outputLabel id="lblPageSize" for="pageSize" value="Maximum results:"/>
Modified: examples/trunk/booking-simplified/src/test/java/org/jboss/seam/examples/booking/booking/BookingAgentTest.java
===================================================================
--- examples/trunk/booking-simplified/src/test/java/org/jboss/seam/examples/booking/booking/BookingAgentTest.java 2010-06-15 20:48:34 UTC (rev 13165)
+++ examples/trunk/booking-simplified/src/test/java/org/jboss/seam/examples/booking/booking/BookingAgentTest.java 2010-06-15 20:53:32 UTC (rev 13166)
@@ -25,9 +25,6 @@
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.impl.base.asset.ByteArrayAsset;
-import org.jboss.weld.Container;
-import org.jboss.weld.context.ContextLifecycle;
-import org.jboss.weld.context.ConversationContext;
import org.jboss.weld.context.api.ContextualInstance;
import org.jboss.weld.context.api.helpers.AbstractMapBackedBeanStore;
import org.junit.Assert;
@@ -38,31 +35,26 @@
public class BookingAgentTest
{
@Deployment
- public static Archive<?> createTestArchive() {
- WebArchive war = ShrinkWrap.create("test.war", WebArchive.class)
- .addPackage(Hotel.class.getPackage())
- .addClasses(BookingAgent.class, BookingAgentBean.class, Confirmed.class,
- Registered.class, BookingEvent.class, BookingFormControls.class, NoOpLogger.class)
- .addLibraries(
- MavenArtifactResolver.resolve("joda-time:joda-time:1.6"),
- MavenArtifactResolver.resolve("org.jboss.seam.international:seam-international-api:3.0.0.Alpha1"),
- MavenArtifactResolver.resolve("org.jboss.seam.international:seam-international:3.0.0.Alpha1")
- )
- .addWebResource("META-INF/persistence.xml", "classes/META-INF/persistence.xml")
- .addWebResource(new ByteArrayAsset(new byte[0]), "beans.xml");
+ public static Archive<?> createTestArchive()
+ {
+ WebArchive war = ShrinkWrap.create("test.war", WebArchive.class).addPackage(Hotel.class.getPackage()).addClasses(BookingAgent.class, BookingAgentBean.class, Confirmed.class, Registered.class, BookingEvent.class, BookingFormControls.class, NoOpLogger.class).addLibraries(MavenArtifactResolver.resolve("joda-time:joda-time:1.6"), MavenArtifactResolver.resolve("org.jboss.seam.international:seam-international-api:3.0.0.Alpha1"), MavenArtifactResolver.resolve("org.jboss.seam.international:seam-international:3.0.0.Alpha1")).addWebResource("META-INF/persistence.xml", "classes/META-INF/persistence.xml").addWebResource(new ByteArrayAsset(new byte[0]), "beans.xml");
return war;
}
- @Inject UserTransaction utx;
- @PersistenceContext EntityManager em;
- @Inject BookingAgent bookingAgent;
- @Inject Instance<Booking> bookingInstance;
+ @Inject
+ UserTransaction utx;
+ @PersistenceContext
+ EntityManager em;
+ @Inject
+ BookingAgent bookingAgent;
+ @Inject
+ Instance<Booking> bookingInstance;
public void prepareSeedData() throws Exception
{
utx.begin();
em.joinTransaction();
- em.createQuery("delete from Booking").executeUpdate();
+ em.createQuery("delete from Booking").executeUpdate();
em.createQuery("delete from Hotel").executeUpdate();
em.persist(new Hotel("Doubletree Atlanta-Buckhead", "3342 Peachtree Road NE", "Atlanta", "GA", "30326", "USA"));
em.createQuery("delete from User").executeUpdate();
@@ -74,9 +66,10 @@
public void testBookHotel() throws Exception
{
prepareSeedData();
- ConversationContext cc = Container.instance().services().get(ContextLifecycle.class).getConversationContext();
- cc.setBeanStore(new HashMapBeanStore());
- cc.setActive(true);
+ // ConversationContext cc =
+ // Container.instance().services().get(ContextLifecycle.class).getConversationContext();
+ // cc.setBeanStore(new HashMapBeanStore());
+ // cc.setActive(true);
bookingAgent.selectHotel(em.find(Hotel.class, 1l));
bookingAgent.bookHotel();
@@ -92,7 +85,9 @@
Assert.assertEquals(1, em.createQuery("select b from Booking b").getResultList().size());
}
- @Produces @Registered User getRegisteredUser()
+ @Produces
+ @Registered
+ User getRegisteredUser()
{
return em.find(User.class, "ike");
}
@@ -100,13 +95,15 @@
public static class HashMapBeanStore extends AbstractMapBackedBeanStore implements Serializable
{
protected Map<String, ContextualInstance<? extends Object>> delegate;
+
public HashMapBeanStore()
{
delegate = new HashMap<String, ContextualInstance<? extends Object>>();
}
@Override
- protected Map<String, ContextualInstance<? extends Object>> delegate() {
+ protected Map<String, ContextualInstance<? extends Object>> delegate()
+ {
return delegate;
}
}
14 years, 3 months
Seam SVN: r13165 - in examples/trunk/booking-simplified/src/main: webapp/WEB-INF and 1 other directory.
by seam-commits@lists.jboss.org
Author: dan.j.allen
Date: 2010-06-15 16:48:34 -0400 (Tue, 15 Jun 2010)
New Revision: 13165
Modified:
examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java
examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml
Log:
use @Begin and @End
Modified: examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java
===================================================================
--- examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java 2010-06-15 20:28:04 UTC (rev 13164)
+++ examples/trunk/booking-simplified/src/main/java/org/jboss/seam/examples/booking/booking/BookingAgentBean.java 2010-06-15 20:48:34 UTC (rev 13165)
@@ -28,7 +28,6 @@
import java.util.Calendar;
import javax.ejb.Stateful;
-import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
@@ -43,6 +42,8 @@
import org.jboss.seam.examples.booking.model.Booking;
import org.jboss.seam.examples.booking.model.Hotel;
import org.jboss.seam.examples.booking.model.User;
+import org.jboss.seam.faces.context.conversation.Begin;
+import org.jboss.seam.faces.context.conversation.End;
import org.jboss.seam.international.status.MessageFactory;
import org.jboss.seam.international.status.Messages;
import org.jboss.seam.international.status.builder.BundleKey;
@@ -59,8 +60,8 @@
@PersistenceContext(type = EXTENDED)
private EntityManager em;
- @Inject
- private Conversation conversation;
+// @Inject
+// private Conversation conversation;
@Inject
private MessageFactory mf;
@@ -85,14 +86,14 @@
private boolean bookingValid;
- //@Begin
+ @Begin
public void selectHotel(final Hotel hotel)
{
// NOTE get a fresh reference that's managed by the conversational
// persistence context
hotelSelection = em.find(Hotel.class, hotel.getId());
log.info(mf.info("Selected the {0} in {1}").textParams(hotelSelection.getName(), hotelSelection.getCity()).build().getText());
- conversation.begin();
+ //conversation.begin();
}
public void bookHotel()
@@ -127,6 +128,7 @@
}
}
+ @End
public void confirm()
{
em.persist(booking);
@@ -134,15 +136,15 @@
manager.fireEvent(new BookingEvent(booking), ConfirmedLiteral.INSTANCE);
log.info(mf.info("New booking at the {0} confirmed for {1}").textParams(booking.getHotel().getName(), booking.getUser().getName()).build().getText());
messages.info(new BundleKey("messages.properties", "booking.confirmed")).textDefault("Booking confirmed.");
- conversation.end();
+ //conversation.end();
}
- //@End
+ @End
public void cancel()
{
booking = null;
hotelSelection = null;
- conversation.end();
+ //conversation.end();
}
@Produces
Modified: examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml
===================================================================
--- examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml 2010-06-15 20:28:04 UTC (rev 13164)
+++ examples/trunk/booking-simplified/src/main/webapp/WEB-INF/beans.xml 2010-06-15 20:48:34 UTC (rev 13165)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans 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/beans_1_0.xsd">
+ <interceptors>
+ <class>org.jboss.seam.faces.context.conversation.ConversationBoundaryInterceptor</class>
+ </interceptors>
+</beans>
\ No newline at end of file
14 years, 3 months