Author: simoneg
Date: Tue Dec 15 17:43:14 2009
New Revision: 890902

URL: http://svn.apache.org/viewvc?rev=890902&view=rev
Log:
Support for simple internal redirect

Added:
    
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/InternalRedirectException.java
Modified:
    
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
    
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebHandler.java

Modified: 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java?rev=890902&r1=890901&r2=890902&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
 Tue Dec 15 17:43:14 2009
@@ -98,11 +98,21 @@
                
                // try to resolve the path
                try {
-                       Producer producer = findProducer(pathInfo);
-                       if (producer == null && originalPathInfo != null) {
-                               // Fall back, in case of resources
-                               producer = findProducer(originalPathInfo);
-                               extension = "HTML";
+                       Producer producer = null;
+                       try {
+                               producer = findProducer(pathInfo);
+                               if (producer == null && originalPathInfo != 
null) {
+                                       // Fall back, in case of resources
+                                       producer = 
findProducer(originalPathInfo);
+                                       extension = "HTML";
+                               }
+                       } catch (Throwable e) {
+                               Throwable act = findInnerException(e);
+                               if (act instanceof InternalRedirectException) {
+                                       producer = 
((InternalRedirectException)act).getProducer();
+                               } else {
+                                       throw e;
+                               }
                        }
                        if (producer != null) {
                                if (method == null) {
@@ -144,11 +154,16 @@
                return ret;
        }
 
+       private Throwable findInnerException(Throwable t) {
+               Throwable act = t;
+               while (act.getCause() != null) act = act.getCause();
+               return act;
+       }
+       
        protected void handleException(Throwable t, HttpServletResponse resp) {
                try {
                        // Find the exception hidden inside redirects
-                       Throwable act = t;
-                       while (act.getCause() != null) act = act.getCause();
+                       Throwable act = findInnerException(t);
                        if (act instanceof HttpCodeException) {
                                ((HttpCodeException)act).apply(resp);
                                return;

Added: 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/InternalRedirectException.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/InternalRedirectException.java?rev=890902&view=auto
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/InternalRedirectException.java
 (added)
+++ 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/InternalRedirectException.java
 Tue Dec 15 17:43:14 2009
@@ -0,0 +1,15 @@
+package org.apache.magma.website;
+
+public class InternalRedirectException extends Error {
+
+       private HtmlProducer producer;
+       
+       public InternalRedirectException(HtmlProducer producer) {
+               this.producer = producer;
+       }
+       
+       public HtmlProducer getProducer() {
+               return this.producer;
+       }
+       
+}

Modified: 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebHandler.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebHandler.java?rev=890902&r1=890901&r2=890902&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebHandler.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebHandler.java
 Tue Dec 15 17:43:14 2009
@@ -274,12 +274,8 @@
                return rightMethod;
        }
        
-       public HtmlProducer redirect(HtmlProducer to) {
-               return to;
-       }
-       
-       public WebHandler redirect(WebHandler to) {
-               return to;
+       public void redirect(HtmlProducer to) {
+               throw new InternalRedirectException(to);
        }
        
        public void redirect(String url) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to