Author: kaosko
Date: Mon Feb  6 22:46:12 2012
New Revision: 1241235

URL: http://svn.apache.org/viewvc?rev=1241235&view=rev
Log:
Incomplete - issueTAP5-1833: Merge functionality of Tynamo.org's
tapestry-exceptionpage module with the built-in ExceptionHandler 
- allow contributing assistant classes

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandlerTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java?rev=1241235&r1=1241234&r2=1241235&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandler.java
 Mon Feb  6 22:46:12 2012
@@ -18,6 +18,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.net.URLEncoder;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -29,6 +30,7 @@ import org.apache.tapestry5.ExceptionHan
 import org.apache.tapestry5.Link;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.internal.structure.Page;
+import org.apache.tapestry5.ioc.ServiceResources;
 import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.internal.OperationException;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
@@ -71,7 +73,7 @@ public class DefaultRequestExceptionHand
     @Symbol(SymbolConstants.EXCEPTION_REPORT_PAGE)
     String pageName,
 
-    Request request, Response response, ComponentClassResolver 
componentClassResolver, LinkSource linkSource, Map<Class, Object> configuration)
+    Request request, Response response, ComponentClassResolver 
componentClassResolver, LinkSource linkSource, ServiceResources 
serviceResources, Map<Class, Object> configuration)
     {
         this.pageCache = pageCache;
         this.renderer = renderer;
@@ -82,10 +84,23 @@ public class DefaultRequestExceptionHand
         this.componentClassResolver = componentClassResolver;
         this.linkSource = linkSource;
         
+        Map<Class<ExceptionHandlerAssistant>, ExceptionHandlerAssistant> 
handlerAssistants = new HashMap<Class<ExceptionHandlerAssistant>, 
ExceptionHandlerAssistant>();
+        
         for (Entry<Class, Object> entry : configuration.entrySet()) {
             if (!Throwable.class.isAssignableFrom(entry.getKey()))
                 throw new IllegalArgumentException(Throwable.class.getName() + 
" is the only allowable key type but " + entry.getKey().getName()
                         + " was contributed");
+            
+            if (ExceptionHandlerAssistant.class.isAssignableFrom((Class) 
entry.getValue())) {
+                @SuppressWarnings("unchecked")
+                Class<ExceptionHandlerAssistant> handlerType = 
(Class<ExceptionHandlerAssistant>) entry.getValue();
+                ExceptionHandlerAssistant assistant = 
handlerAssistants.get(handlerType); 
+                if (assistant == null) {
+                    assistant = (ExceptionHandlerAssistant) 
serviceResources.autobuild(handlerType);
+                    handlerAssistants.put(handlerType, assistant);
+                }
+                entry.setValue(assistant);
+            }
         }
         this.configuration = configuration;
     }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandlerTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandlerTest.java?rev=1241235&r1=1241234&r2=1241235&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandlerTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/DefaultRequestExceptionHandlerTest.java
 Mon Feb  6 22:46:12 2012
@@ -10,6 +10,7 @@ import org.apache.tapestry5.ContextAware
 import org.apache.tapestry5.ExceptionHandlerAssistant;
 import org.apache.tapestry5.Link;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import org.apache.tapestry5.ioc.ServiceResources;
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.Response;
@@ -28,7 +29,8 @@ public class DefaultRequestExceptionHand
     Response response = mockResponse();
     ComponentClassResolver componentClassResolver = 
mockComponentClassResolver();
     LinkSource linkSource = mockLinkSource();
-       private DefaultRequestExceptionHandler exceptionHandler = new 
DefaultRequestExceptionHandler(pageCache, renderer, logger, "exceptionpage", 
request, response, componentClassResolver, linkSource, mockConfiguration);
+    ServiceResources serviceResources = mockServiceResources();
+       private DefaultRequestExceptionHandler exceptionHandler = new 
DefaultRequestExceptionHandler(pageCache, renderer, logger, "exceptionpage", 
request, response, componentClassResolver, linkSource, serviceResources, 
mockConfiguration);
 
        private static class MyContextAwareException extends Throwable 
implements ContextAwareException {
                private Object[] context;


Reply via email to