Browse Source

Polishing

pull/700/merge
Juergen Hoeller 11 years ago
parent
commit
2675ce7c9f
  1. 3
      spring-context-support/src/main/java/org/springframework/ui/freemarker/FreeMarkerTemplateUtils.java
  2. 4
      spring-context-support/src/main/java/org/springframework/ui/freemarker/SpringTemplateLoader.java
  3. 28
      spring-messaging/src/main/java/org/springframework/messaging/simp/user/DefaultUserDestinationResolver.java
  4. 26
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/AbstractHandlerMethodAdapter.java

3
spring-context-support/src/main/java/org/springframework/ui/freemarker/FreeMarkerTemplateUtils.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2012 the original author or authors. * Copyright 2002-2014 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -45,6 +45,7 @@ public abstract class FreeMarkerTemplateUtils {
*/ */
public static String processTemplateIntoString(Template template, Object model) public static String processTemplateIntoString(Template template, Object model)
throws IOException, TemplateException { throws IOException, TemplateException {
StringWriter result = new StringWriter(); StringWriter result = new StringWriter();
template.process(model, result); template.process(model, result);
return result.toString(); return result.toString();

4
spring-context-support/src/main/java/org/springframework/ui/freemarker/SpringTemplateLoader.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2012 the original author or authors. * Copyright 2002-2014 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -63,6 +63,7 @@ public class SpringTemplateLoader implements TemplateLoader {
} }
} }
@Override @Override
public Object findTemplateSource(String name) throws IOException { public Object findTemplateSource(String name) throws IOException {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
@ -86,7 +87,6 @@ public class SpringTemplateLoader implements TemplateLoader {
} }
} }
@Override @Override
public long getLastModified(Object templateSource) { public long getLastModified(Object templateSource) {
Resource resource = (Resource) templateSource; Resource resource = (Resource) templateSource;

28
spring-messaging/src/main/java/org/springframework/messaging/simp/user/DefaultUserDestinationResolver.java

@ -36,19 +36,20 @@ import org.springframework.util.StringUtils;
* on the {@link org.springframework.messaging.simp.user.UserSessionRegistry} * on the {@link org.springframework.messaging.simp.user.UserSessionRegistry}
* provided to the constructor to find the sessionIds associated with a user * provided to the constructor to find the sessionIds associated with a user
* and then uses the sessionId to make the target destination unique. * and then uses the sessionId to make the target destination unique.
* <p> *
* When a user attempts to subscribe to "/user/queue/position-updates", the * <p>When a user attempts to subscribe to "/user/queue/position-updates", the
* "/user" prefix is removed and a unique suffix added, resulting in something * "/user" prefix is removed and a unique suffix added, resulting in something
* like "/queue/position-updates-useri9oqdfzo" where the suffix is based on the * like "/queue/position-updates-useri9oqdfzo" where the suffix is based on the
* user's session and ensures it does not collide with any other users attempting * user's session and ensures it does not collide with any other users attempting
* to subscribe to "/user/queue/position-updates". * to subscribe to "/user/queue/position-updates".
* <p> *
* When a message is sent to a user with a destination such as * <p>When a message is sent to a user with a destination such as
* "/user/{username}/queue/position-updates", the "/user/{username}" prefix is * "/user/{username}/queue/position-updates", the "/user/{username}" prefix is
* removed and the suffix added, resulting in something like * removed and the suffix added, resulting in something like
* "/queue/position-updates-useri9oqdfzo". * "/queue/position-updates-useri9oqdfzo".
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @author Brian Clozel
* @since 4.0 * @since 4.0
*/ */
public class DefaultUserDestinationResolver implements UserDestinationResolver { public class DefaultUserDestinationResolver implements UserDestinationResolver {
@ -71,6 +72,7 @@ public class DefaultUserDestinationResolver implements UserDestinationResolver {
this.userSessionRegistry = userSessionRegistry; this.userSessionRegistry = userSessionRegistry;
} }
/** /**
* The prefix used to identify user destinations. Any destinations that do not * The prefix used to identify user destinations. Any destinations that do not
* start with the given prefix are not be resolved. * start with the given prefix are not be resolved.
@ -108,9 +110,10 @@ public class DefaultUserDestinationResolver implements UserDestinationResolver {
} }
Set<String> resolved = new HashSet<String>(); Set<String> resolved = new HashSet<String>();
for (String sessionId : info.getSessionIds()) { for (String sessionId : info.getSessionIds()) {
String d = getTargetDestination(destination, info.getDestinationWithoutPrefix(), sessionId, info.getUser()); String targetDestination = getTargetDestination(
if (d != null) { destination, info.getDestinationWithoutPrefix(), sessionId, info.getUser());
resolved.add(d); if (targetDestination != null) {
resolved.add(targetDestination);
} }
} }
return new UserDestinationResult(destination, resolved, info.getSubscribeDestination(), info.getUser()); return new UserDestinationResult(destination, resolved, info.getSubscribeDestination(), info.getUser());
@ -150,8 +153,7 @@ public class DefaultUserDestinationResolver implements UserDestinationResolver {
subscribeDestination = this.destinationPrefix.substring(0, startIndex-1) + destinationWithoutPrefix; subscribeDestination = this.destinationPrefix.substring(0, startIndex-1) + destinationWithoutPrefix;
user = destination.substring(startIndex, endIndex); user = destination.substring(startIndex, endIndex);
user = StringUtils.replace(user, "%2F", "/"); user = StringUtils.replace(user, "%2F", "/");
if (user.equals(sessionId)) {
if(user.equals(sessionId)) {
user = null; user = null;
sessionIds = Collections.singleton(sessionId); sessionIds = Collections.singleton(sessionId);
} }
@ -176,13 +178,11 @@ public class DefaultUserDestinationResolver implements UserDestinationResolver {
* This methods determines the translated destination to use based on the source * This methods determines the translated destination to use based on the source
* destination, the source destination with the user prefix removed, a session * destination, the source destination with the user prefix removed, a session
* id, and the user for the session (if known). * id, and the user for the session (if known).
*
* @param sourceDestination the source destination of the input message * @param sourceDestination the source destination of the input message
* @param sourceDestinationWithoutPrefix the source destination without the user prefix * @param sourceDestinationWithoutPrefix the source destination without the user prefix
* @param sessionId the id of the session for the target message * @param sessionId the id of the session for the target message
* @param user the user associated with the session, or {@code null} * @param user the user associated with the session, or {@code null}
* * @return a target destination, or {@code null} if none
* @return a target destination, or {@code null}
*/ */
protected String getTargetDestination(String sourceDestination, protected String getTargetDestination(String sourceDestination,
String sourceDestinationWithoutPrefix, String sessionId, String user) { String sourceDestinationWithoutPrefix, String sessionId, String user) {
@ -195,6 +195,7 @@ public class DefaultUserDestinationResolver implements UserDestinationResolver {
return "DefaultUserDestinationResolver[prefix=" + this.destinationPrefix + "]"; return "DefaultUserDestinationResolver[prefix=" + this.destinationPrefix + "]";
} }
private static class DestinationInfo { private static class DestinationInfo {
private final String destinationWithoutPrefix; private final String destinationWithoutPrefix;
@ -205,8 +206,7 @@ public class DefaultUserDestinationResolver implements UserDestinationResolver {
private final Set<String> sessionIds; private final Set<String> sessionIds;
public DestinationInfo(String destinationWithoutPrefix, String subscribeDestination, String user,
private DestinationInfo(String destinationWithoutPrefix, String subscribeDestination, String user,
Set<String> sessionIds) { Set<String> sessionIds) {
this.user = user; this.user = user;

26
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/AbstractHandlerMethodAdapter.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2012 the original author or authors. * Copyright 2002-2014 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -36,11 +36,13 @@ public abstract class AbstractHandlerMethodAdapter extends WebContentGenerator i
private int order = Ordered.LOWEST_PRECEDENCE; private int order = Ordered.LOWEST_PRECEDENCE;
public AbstractHandlerMethodAdapter() { public AbstractHandlerMethodAdapter() {
// no restriction of HTTP methods by default // no restriction of HTTP methods by default
super(false); super(false);
} }
/** /**
* Specify the order value for this HandlerAdapter bean. * Specify the order value for this HandlerAdapter bean.
* <p>Default value is {@code Integer.MAX_VALUE}, meaning that it's non-ordered. * <p>Default value is {@code Integer.MAX_VALUE}, meaning that it's non-ordered.
@ -55,51 +57,49 @@ public abstract class AbstractHandlerMethodAdapter extends WebContentGenerator i
return this.order; return this.order;
} }
/** /**
* {@inheritDoc} <p>This implementation expects the handler to be an {@link HandlerMethod}. * This implementation expects the handler to be an {@link HandlerMethod}.
*
* @param handler the handler instance to check * @param handler the handler instance to check
* @return whether or not this adapter can adapt the given handler * @return whether or not this adapter can adapt the given handler
*/ */
@Override @Override
public final boolean supports(Object handler) { public final boolean supports(Object handler) {
return handler instanceof HandlerMethod && supportsInternal((HandlerMethod) handler); return (handler instanceof HandlerMethod && supportsInternal((HandlerMethod) handler));
} }
/** /**
* Given a handler method, return whether or not this adapter can support it. * Given a handler method, return whether or not this adapter can support it.
*
* @param handlerMethod the handler method to check * @param handlerMethod the handler method to check
* @return whether or not this adapter can adapt the given method * @return whether or not this adapter can adapt the given method
*/ */
protected abstract boolean supportsInternal(HandlerMethod handlerMethod); protected abstract boolean supportsInternal(HandlerMethod handlerMethod);
/** /**
* {@inheritDoc} <p>This implementation expects the handler to be an {@link HandlerMethod}. * This implementation expects the handler to be an {@link HandlerMethod}.
*/ */
@Override @Override
public final ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) public final ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception { throws Exception {
return handleInternal(request, response, (HandlerMethod) handler); return handleInternal(request, response, (HandlerMethod) handler);
} }
/** /**
* Use the given handler method to handle the request. * Use the given handler method to handle the request.
*
* @param request current HTTP request * @param request current HTTP request
* @param response current HTTP response * @param response current HTTP response
* @param handlerMethod handler method to use. This object must have previously been passed to the * @param handlerMethod handler method to use. This object must have previously been passed to the
* {@link #supportsInternal(HandlerMethod)} this interface, which must have returned {@code true}. * {@link #supportsInternal(HandlerMethod)} this interface, which must have returned {@code true}.
* @return ModelAndView object with the name of the view and the required model data, or {@code null} if * @return ModelAndView object with the name of the view and the required model data,
* the request has been handled directly * or {@code null} if the request has been handled directly
* @throws Exception in case of errors * @throws Exception in case of errors
*/ */
protected abstract ModelAndView handleInternal(HttpServletRequest request, protected abstract ModelAndView handleInternal(HttpServletRequest request,
HttpServletResponse response, HttpServletResponse response, HandlerMethod handlerMethod) throws Exception;
HandlerMethod handlerMethod) throws Exception;
/** /**
* {@inheritDoc} <p>This implementation expects the handler to be an {@link HandlerMethod}. * This implementation expects the handler to be an {@link HandlerMethod}.
*/ */
@Override @Override
public final long getLastModified(HttpServletRequest request, Object handler) { public final long getLastModified(HttpServletRequest request, Object handler) {
@ -108,10 +108,10 @@ public abstract class AbstractHandlerMethodAdapter extends WebContentGenerator i
/** /**
* Same contract as for {@link javax.servlet.http.HttpServlet#getLastModified(HttpServletRequest)}. * Same contract as for {@link javax.servlet.http.HttpServlet#getLastModified(HttpServletRequest)}.
*
* @param request current HTTP request * @param request current HTTP request
* @param handlerMethod handler method to use * @param handlerMethod handler method to use
* @return the lastModified value for the given handler * @return the lastModified value for the given handler
*/ */
protected abstract long getLastModifiedInternal(HttpServletRequest request, HandlerMethod handlerMethod); protected abstract long getLastModifiedInternal(HttpServletRequest request, HandlerMethod handlerMethod);
} }

Loading…
Cancel
Save