[webbeans-commits] Webbeans SVN: r2425 - in extensions/trunk: wicket and 7 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Wed Apr 15 22:14:26 EDT 2009


Author: cpopetz
Date: 2009-04-15 22:14:25 -0400 (Wed, 15 Apr 2009)
New Revision: 2425

Added:
   extensions/trunk/wicket/
   extensions/trunk/wicket/pom.xml
   extensions/trunk/wicket/src/
   extensions/trunk/wicket/src/main/
   extensions/trunk/wicket/src/main/java/
   extensions/trunk/wicket/src/main/java/org/
   extensions/trunk/wicket/src/main/java/org/jboss/
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansApplication.java
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansComponentInstantiationListener.java
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansMetaData.java
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansRequestCycle.java
   extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansWebRequestCycleProcessor.java
Log:
Initial commit of wicket integration.


Added: extensions/trunk/wicket/pom.xml
===================================================================
--- extensions/trunk/wicket/pom.xml	                        (rev 0)
+++ extensions/trunk/wicket/pom.xml	2009-04-16 02:14:25 UTC (rev 2425)
@@ -0,0 +1,56 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+   <parent>
+      <artifactId>webbeans-parent</artifactId>
+      <groupId>org.jboss.webbeans</groupId>
+      <version>1.0.0-SNAPSHOT</version>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+   <groupId>org.jboss.webbeans</groupId>
+   <artifactId>webbeans-wicket</artifactId>
+   <version>1.0.0-SNAPSHOT</version>
+   <name>Web Beans Wicket Integration</name>
+   <dependencies>
+
+      <dependency>
+         <groupId>org.testng</groupId>
+         <artifactId>testng</artifactId>
+         <scope>test</scope>
+         <classifier>jdk15</classifier>
+         <exclusions>
+         	<exclusion>
+         		<artifactId>junit</artifactId>
+         		<groupId>junit</groupId>
+         	</exclusion>
+         </exclusions>
+      </dependency>
+      <dependency>
+      	<groupId>org.jboss.webbeans</groupId>
+      	<artifactId>jsr299-api</artifactId>
+      </dependency>
+      <dependency>
+      	<groupId>org.jboss.webbeans</groupId>
+      	<artifactId>webbeans-core</artifactId>
+      	<scope>provided</scope>
+      </dependency>
+	<dependency>
+		<groupId>org.apache.wicket</groupId>
+		<artifactId>wicket</artifactId>
+		<version>${wicket.version}</version>
+	</dependency>
+   <dependency>
+		<groupId>javax.servlet</groupId>
+		<artifactId>servlet-api</artifactId>
+		<scope>provided</scope>
+   </dependency>
+      
+   </dependencies>
+
+   <build>
+      <defaultGoal>install</defaultGoal>
+   </build>
+
+	<properties>
+		<wicket.version>1.3-SNAPSHOT</wicket.version>
+	</properties>
+
+</project>

Added: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansApplication.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansApplication.java	                        (rev 0)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansApplication.java	2009-04-16 02:14:25 UTC (rev 2425)
@@ -0,0 +1,54 @@
+package org.jboss.webbeans.wicket;
+
+
+import org.apache.wicket.Request;
+import org.apache.wicket.RequestCycle;
+import org.apache.wicket.Response;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.http.WebRequest;
+import org.apache.wicket.protocol.http.WebResponse;
+import org.apache.wicket.request.IRequestCycleProcessor;
+
+/**
+ * A convenience subclass of wicket's WebApplication which adds the hooks necessary to use JSR-299 injections
+ * in wicket components, as well as manage JSR-299 conversation scopes with Wicket page metadata.  If you have 
+ * your own WebApplication subclass, and can't subclass this class, you just need to do the three things that this
+ * class does, i.e. register the WebBeansComponentInstantiationListener, and override the two methods below to return
+ * the RequestCycle and IRequestCycleProcessor subclasses specific to WebBeans, or your subclasses of those classes.
+ * @author cpopetz
+ *
+ * @see WebApplication
+ * @see WebBeansWebRequestCycleProcessor
+ * @see WebBeansRequestCycle
+ */
+public abstract class WebBeansApplication extends WebApplication
+{
+   /**
+    * Use the constructor to add our component instantiation listener
+    * @see WebBeansComponentInstantiationListener
+    */
+   public WebBeansApplication()
+   {
+      addComponentInstantiationListener(new WebBeansComponentInstantiationListener());
+   }
+
+   /**
+    * Override to return our WebBeans-specific request cycle processor
+    * @see WebBeansWebRequestCycleProcessor
+    */
+   @Override
+   protected IRequestCycleProcessor newRequestCycleProcessor()
+   {
+      return new WebBeansWebRequestCycleProcessor();
+   }
+
+   /**
+    * Override to return our WebBeans-specific request cycle
+    * @see WebBeansRequestCycle
+    */
+   @Override
+   public RequestCycle newRequestCycle(final Request request, final Response response)
+   {
+      return new WebBeansRequestCycle(this, (WebRequest) request, (WebResponse) response);
+   }
+}


Property changes on: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansApplication.java
___________________________________________________________________
Name: svn:executable
   + *

Added: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansComponentInstantiationListener.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansComponentInstantiationListener.java	                        (rev 0)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansComponentInstantiationListener.java	2009-04-16 02:14:25 UTC (rev 2425)
@@ -0,0 +1,20 @@
+package org.jboss.webbeans.wicket;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.application.IComponentInstantiationListener;
+import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.manager.api.WebBeansManager;
+
+/**
+ * This listener uses the WebBeansManager to handle injections for all wicket components.
+ * @author cpopetz
+ * @see WebBeansManager
+ *
+ */
+public class WebBeansComponentInstantiationListener implements IComponentInstantiationListener
+{
+   public void onInstantiation(Component component)
+   {
+      ((WebBeansManager) CurrentManager.rootManager()).injectNonContextualInstance(component);
+   }
+}
\ No newline at end of file


Property changes on: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansComponentInstantiationListener.java
___________________________________________________________________
Name: svn:executable
   + *

Added: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansMetaData.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansMetaData.java	                        (rev 0)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansMetaData.java	2009-04-16 02:14:25 UTC (rev 2425)
@@ -0,0 +1,21 @@
+package org.jboss.webbeans.wicket;
+
+import org.apache.wicket.MetaDataKey;
+
+/**
+ * Public storage for the metadata key used by the WebBeans integration to store 
+ * conversation ids in wicket page metadata.
+ * @author cpopetz
+ *
+ */
+public class WebBeansMetaData
+{
+
+   /**
+    * This is the key we will use to to store the conversation metadata in the
+    * wicket page.
+    */
+   public static final MetaDataKey CID = new MetaDataKey(String.class) {
+      private static final long serialVersionUID = -8788010688731927318L; 
+   }; 
+}


Property changes on: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansMetaData.java
___________________________________________________________________
Name: svn:executable
   + *

Added: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansRequestCycle.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansRequestCycle.java	                        (rev 0)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansRequestCycle.java	2009-04-16 02:14:25 UTC (rev 2425)
@@ -0,0 +1,108 @@
+package org.jboss.webbeans.wicket;
+
+import javax.context.Conversation;
+import javax.inject.manager.Manager;
+
+import org.apache.wicket.IRequestTarget;
+import org.apache.wicket.Page;
+import org.apache.wicket.Response;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.http.WebRequest;
+import org.apache.wicket.protocol.http.WebRequestCycle;
+import org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
+import org.apache.wicket.request.target.component.IPageRequestTarget;
+import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.context.ConversationContext;
+import org.jboss.webbeans.conversation.ConversationManager;
+import org.jboss.webbeans.servlet.ConversationBeanStore;
+
+/**
+ * WebBeansRequestCycle is a subclass of the standard wicket WebRequestCycle which:
+ * <ul>
+ * <li>restores long-running conversations specified in wicket page metadata when a page target is first used.  
+ * <li>propagates long running conversations to new page targets by specifying the above metadata
+ * <li>propagates long running conversations across redirects through the use of a request parameter if the
+ * redirect is handled with a BookmarkablePageRequest
+ * <li> Sets up the conversational context
+ * </ul>
+ * @see WebBeansWebRequestCycleProcessor Which handles propogation of conversation data for newly-started
+ * long running conversations, by storing their ids in the page metadata
+ * @author cpopetz
+ *
+ */
+public class WebBeansRequestCycle extends WebRequestCycle
+{
+   public WebBeansRequestCycle(WebApplication application, WebRequest request, Response response)
+   {
+      super(application, request, response);
+   }
+
+   /**
+    * Override to set up the conversation context and to choose the conversation if a conversation id
+    * is present in target metadata.
+    */
+   @Override
+   protected void onRequestTargetSet(IRequestTarget target)
+   {
+      super.onRequestTargetSet(target);
+      
+      Page page = null;
+      if (target instanceof IPageRequestTarget)
+      {
+         page = ((IPageRequestTarget) target).getPage();
+      }
+      
+      //Two possible specifications of cid: page metadata or request url; the latter is used
+      //to propagate the conversation to mounted (bookmarkable) paths after a redirect
+      
+      String specifiedCid = null;
+      if (page != null) 
+      {
+         specifiedCid = (String) page.getMetaData(WebBeansMetaData.CID);
+      }
+      else 
+      {
+         specifiedCid = request.getParameter("cid");
+      }
+      
+      Manager manager = CurrentManager.rootManager();
+      Conversation conversation = manager.getInstanceByType(Conversation.class);
+      
+      //restore a conversation if it exists
+      if (specifiedCid != null)
+      {
+         // Restore this conversation
+         manager.getInstanceByType(ConversationManager.class).beginOrRestoreConversation(specifiedCid);
+      }
+      
+      //handle propagation of existing long running converstaions to new targets
+      if (conversation.isLongRunning()) 
+      {
+         //Note that we can't propagate conversations with other redirect targets like 
+         //RequestRedirectTarget through this mechanism, because it does not provide an 
+         //interface to modify its target URL.  If propagation with those targets is to be supported, 
+         //it needs a custom Response subclass.
+         if (isRedirect() && target instanceof BookmarkablePageRequestTarget)
+         {
+            BookmarkablePageRequestTarget bookmark = (BookmarkablePageRequestTarget) target;
+            //if a cid has already been specified, don't override it
+            if (!bookmark.getPageParameters().containsKey("cid"))
+               bookmark.getPageParameters().add("cid", conversation.getId());
+         }
+         
+         //If we have a target page, propagate the conversation to the page's metadata
+         if (page != null)
+         {
+            page.setMetaData(WebBeansMetaData.CID, conversation.getId());
+         }
+      }
+      
+      //Now set up the conversational context if it isn't already
+      if (!ConversationContext.INSTANCE.isActive())
+      {
+         ConversationContext.INSTANCE.setBeanStore(
+               new ConversationBeanStore(((WebRequest)request).getHttpServletRequest().getSession(), conversation.getId()));
+         ConversationContext.INSTANCE.setActive(true);
+      }
+   }
+}
\ No newline at end of file


Property changes on: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansRequestCycle.java
___________________________________________________________________
Name: svn:executable
   + *

Added: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansWebRequestCycleProcessor.java
===================================================================
--- extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansWebRequestCycleProcessor.java	                        (rev 0)
+++ extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansWebRequestCycleProcessor.java	2009-04-16 02:14:25 UTC (rev 2425)
@@ -0,0 +1,44 @@
+package org.jboss.webbeans.wicket;
+
+import javax.context.Conversation;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.RequestCycle;
+import org.apache.wicket.protocol.http.WebRequestCycleProcessor;
+import org.jboss.webbeans.CurrentManager;
+import org.jboss.webbeans.context.ConversationContext;
+import org.jboss.webbeans.conversation.ConversationManager;
+
+/**
+ * WebBeansWebRequestCycleProcessor is a subclass of the standard wicket WebRequestCycleProcessor which saves the conversation id 
+ * of any long-running cornversation in wicket page metadata.  It also cleans up the conversation context.
+ * 
+ * @author cpopetz
+ *
+ */
+
+public class WebBeansWebRequestCycleProcessor extends WebRequestCycleProcessor
+{
+   /**
+    * If a long running conversation has been started, store its id into page metadata
+    */
+   @Override
+   public void respond(RequestCycle requestCycle)
+   {
+      super.respond(requestCycle);
+      Conversation conversation = CurrentManager.rootManager().getInstanceByType(Conversation.class);
+      if (conversation.isLongRunning())
+      {
+         Page page = RequestCycle.get().getResponsePage();
+         if (page != null)
+         {
+            page.setMetaData(WebBeansMetaData.CID, conversation.getId());
+         }
+      }
+      
+      //cleanup and deactivate the conversation context
+      
+      CurrentManager.rootManager().getInstanceByType(ConversationManager.class).cleanupConversation();
+      ConversationContext.INSTANCE.setActive(false);
+   }
+}
\ No newline at end of file


Property changes on: extensions/trunk/wicket/src/main/java/org/jboss/webbeans/wicket/WebBeansWebRequestCycleProcessor.java
___________________________________________________________________
Name: svn:executable
   + *




More information about the weld-commits mailing list