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;