Polish methods to register async interceptors

This commit is contained in:
Rossen Stoyanchev 2012-10-30 22:29:01 -04:00
parent d701464517
commit 1acd5cff8f
4 changed files with 45 additions and 38 deletions

View File

@ -181,13 +181,22 @@ public final class WebAsyncManager {
* @param interceptor the interceptor to register
*/
public void registerCallableInterceptor(Object key, CallableProcessingInterceptor interceptor) {
Assert.notNull(interceptor, "interceptor is required");
Assert.notNull(key, "Key is required");
Assert.notNull(interceptor, "CallableProcessingInterceptor is required");
this.callableInterceptors.put(key, interceptor);
}
public void registerAllCallableInterceptors(Map<Object, CallableProcessingInterceptor> interceptors) {
Assert.notNull(interceptors);
this.callableInterceptors.putAll(interceptors);
/**
* Register a {@link CallableProcessingInterceptor} without a key.
* The key is derived from the class name and hashcode.
* @param interceptor the interceptor to register
*/
public void registerCallableInterceptor(CallableProcessingInterceptor... interceptors) {
Assert.notNull(interceptors, "A CallableProcessingInterceptor is required");
for (CallableProcessingInterceptor interceptor : interceptors) {
String key = interceptor.getClass().getName() + ":" + interceptor.hashCode();
this.callableInterceptors.put(key, interceptor);
}
}
/**
@ -196,13 +205,23 @@ public final class WebAsyncManager {
* @param interceptor the interceptor to register
*/
public void registerDeferredResultInterceptor(Object key, DeferredResultProcessingInterceptor interceptor) {
Assert.notNull(interceptor, "interceptor is required");
Assert.notNull(key, "Key is required");
Assert.notNull(interceptor, "DeferredResultProcessingInterceptor is required");
this.deferredResultInterceptors.put(key, interceptor);
}
public void registerAllDeferredResultInterceptors(Map<Object, DeferredResultProcessingInterceptor> interceptors) {
Assert.notNull(interceptors);
this.deferredResultInterceptors.putAll(interceptors);
/**
* Register a {@link DeferredResultProcessingInterceptor} without a key.
* The key is derived from the class name and hashcode.
* @param key the key
* @param interceptors the interceptor to register
*/
public void registerDeferredResultInterceptor(DeferredResultProcessingInterceptor... interceptors) {
Assert.notNull(interceptors, "A DeferredResultProcessingInterceptor is required");
for (DeferredResultProcessingInterceptor interceptor : interceptors) {
String key = interceptors.getClass().getName() + ":" + interceptors.hashCode();
this.deferredResultInterceptors.put(key, interceptor);
}
}
/**

View File

@ -138,11 +138,9 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
private Long asyncRequestTimeout;
private final Map<Object, CallableProcessingInterceptor> callableInterceptors =
new LinkedHashMap<Object, CallableProcessingInterceptor>();
private CallableProcessingInterceptor[] callableInterceptors = new CallableProcessingInterceptor[] {};
private final Map<Object, DeferredResultProcessingInterceptor> deferredResultInterceptors =
new LinkedHashMap<Object, DeferredResultProcessingInterceptor>();
private DeferredResultProcessingInterceptor[] deferredResultInterceptors = new DeferredResultProcessingInterceptor[] {};
private boolean ignoreDefaultModelOnRedirect = false;
@ -378,10 +376,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
*/
public void setCallableInterceptors(List<CallableProcessingInterceptor> interceptors) {
Assert.notNull(interceptors);
for (int index = 0 ; index < interceptors.size(); index++) {
CallableProcessingInterceptor interceptor = interceptors.get(index);
this.callableInterceptors.put(getInterceptorKey(interceptor, index), interceptor);
}
this.callableInterceptors = interceptors.toArray(new CallableProcessingInterceptor[interceptors.size()]);
}
/**
@ -390,14 +385,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
*/
public void setDeferredResultInterceptors(List<DeferredResultProcessingInterceptor> interceptors) {
Assert.notNull(interceptors);
for (int index = 0 ; index < interceptors.size(); index++) {
DeferredResultProcessingInterceptor interceptor = interceptors.get(index);
this.deferredResultInterceptors.put(getInterceptorKey(interceptor, index), interceptor);
}
}
private String getInterceptorKey(Object interceptor, int index) {
return this.hashCode() + ":" + interceptor.getClass().getName() + "#" + index;
this.deferredResultInterceptors = interceptors.toArray(new DeferredResultProcessingInterceptor[interceptors.size()]);
}
/**
@ -740,8 +728,8 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter i
final WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
asyncManager.setTaskExecutor(this.taskExecutor);
asyncManager.setAsyncWebRequest(asyncWebRequest);
asyncManager.registerAllCallableInterceptors(this.callableInterceptors);
asyncManager.registerAllDeferredResultInterceptors(this.deferredResultInterceptors);
asyncManager.registerCallableInterceptor(this.callableInterceptors);
asyncManager.registerDeferredResultInterceptor(this.deferredResultInterceptors);
if (asyncManager.hasConcurrentResult()) {
Object result = asyncManager.getConcurrentResult();

View File

@ -484,13 +484,13 @@ public class MvcNamespaceTests {
assertEquals(ConcurrentTaskExecutor.class, fieldAccessor.getPropertyValue("taskExecutor").getClass());
assertEquals(2500L, fieldAccessor.getPropertyValue("asyncRequestTimeout"));
Map<Object, CallableProcessingInterceptor> callableInterceptors =
(Map<Object, CallableProcessingInterceptor>) fieldAccessor.getPropertyValue("callableInterceptors");
assertEquals(1, callableInterceptors.size());
CallableProcessingInterceptor[] callableInterceptors =
(CallableProcessingInterceptor[]) fieldAccessor.getPropertyValue("callableInterceptors");
assertEquals(1, callableInterceptors.length);
Map<Object, DeferredResultProcessingInterceptor> deferredResultInterceptors =
(Map<Object, DeferredResultProcessingInterceptor>) fieldAccessor.getPropertyValue("deferredResultInterceptors");
assertEquals(1, deferredResultInterceptors.size());
DeferredResultProcessingInterceptor[] deferredResultInterceptors =
(DeferredResultProcessingInterceptor[]) fieldAccessor.getPropertyValue("deferredResultInterceptors");
assertEquals(1, deferredResultInterceptors.length);
}

View File

@ -149,13 +149,13 @@ public class WebMvcConfigurationSupportExtensionTests {
assertEquals(ConcurrentTaskExecutor.class, fieldAccessor.getPropertyValue("taskExecutor").getClass());
assertEquals(2500L, fieldAccessor.getPropertyValue("asyncRequestTimeout"));
Map<Object, CallableProcessingInterceptor> callableInterceptors =
(Map<Object, CallableProcessingInterceptor>) fieldAccessor.getPropertyValue("callableInterceptors");
assertEquals(1, callableInterceptors.size());
CallableProcessingInterceptor[] callableInterceptors =
(CallableProcessingInterceptor[]) fieldAccessor.getPropertyValue("callableInterceptors");
assertEquals(1, callableInterceptors.length);
Map<Object, DeferredResultProcessingInterceptor> deferredResultInterceptors =
(Map<Object, DeferredResultProcessingInterceptor>) fieldAccessor.getPropertyValue("deferredResultInterceptors");
assertEquals(1, deferredResultInterceptors.size());
DeferredResultProcessingInterceptor[] deferredResultInterceptors =
(DeferredResultProcessingInterceptor[]) fieldAccessor.getPropertyValue("deferredResultInterceptors");
assertEquals(1, deferredResultInterceptors.length);
assertEquals(false, fieldAccessor.getPropertyValue("ignoreDefaultModelOnRedirect"));
}