- Revision
- 91
- Author
- mauro
- Date
- 2007-05-27 15:47:56 -0500 (Sun, 27 May 2007)
Log Message
Refactored AbstractMethodDefinitionFinder to have getArguments(method, request) as the abstract method implementated by concrete subclasses.
Modified Paths
Diff
Modified: trunk/core/src/main/java/org/codehaus/waffle/action/AbstractMethodDefinitionFinder.java (90 => 91)
--- trunk/core/src/main/java/org/codehaus/waffle/action/AbstractMethodDefinitionFinder.java 2007-05-26 18:45:10 UTC (rev 90) +++ trunk/core/src/main/java/org/codehaus/waffle/action/AbstractMethodDefinitionFinder.java 2007-05-27 20:47:56 UTC (rev 91) @@ -75,7 +75,7 @@ throw new NoMatchingMethodException(methodName, controller.getClass()); } - List<MethodDefinition> methodDefinitions = findMethodDefinition(request, response, methods); + List<MethodDefinition> methodDefinitions = findMethodDefinitions(request, response, methods); if (methodDefinitions.size() > 1) { throw new AmbiguousMethodSignatureException("Method: '" + methodName + "' for controller: '" + controller.getClass() + "'"); @@ -86,9 +86,24 @@ return methodDefinitions.get(0); } - protected abstract List<MethodDefinition> findMethodDefinition(HttpServletRequest request, - HttpServletResponse response, - List<Method> methods); + protected List<MethodDefinition> findMethodDefinitions(HttpServletRequest request, HttpServletResponse response, List<Method> methods) { + List<MethodDefinition> methodDefinitions = new ArrayList<MethodDefinition>(); + + for (Method method : methods) { + if (Modifier.isPublic(method.getModifiers())) { + List<Object> arguments = getArguments(method, request); + MethodDefinition methodDefinition = validateMethod(request, response, method, arguments); + + if (methodDefinition != null) { + methodDefinitions.add(methodDefinition); + } + } + } + + return methodDefinitions; + } + + protected abstract List<Object> getArguments(Method method, HttpServletRequest request); protected List<Object> resolveArguments(HttpServletRequest request, Iterator<String> arguments) { List<Object> resolvedArguments = new ArrayList<Object>(10); @@ -136,6 +151,16 @@ return null; } + + /** + * Wraps value in curly brackets to fit with default handling + * @param value the argument value + * @return A formatted argument + */ + protected String formatArgument(String value) { + return "{"+value+"}"; + } + private boolean hasEquivalentParameterTypes(MethodDefinition methodDefinition) { Class[] methodParameterTypes = methodDefinition.getMethod().getParameterTypes(); List<Object> methodArguments = methodDefinition.getMethodArguments(); @@ -242,17 +267,18 @@ private MethodDefinition buildMethodDefinitionForDefaultActionMethod(Method method, HttpServletRequest request) { MethodDefinition methodDefinition = new MethodDefinition(method); DefaultActionMethod defaultActionMethod = method.getAnnotation(DefaultActionMethod.class); - List<String> parms = new ArrayList<String>(defaultActionMethod.parameters().length); + List<String> arguments = new ArrayList<String>(defaultActionMethod.parameters().length); for (String value : defaultActionMethod.parameters()) { - parms.add("{" + value + "}"); + arguments.add(formatArgument(value)); } // resolve argument and add to the methodDefinition - for (Object argument : resolveArguments(request, parms.iterator())) { + for (Object argument : resolveArguments(request, arguments.iterator())) { methodDefinition.addMethodArgument(argument); } return methodDefinition; } + }
Modified: trunk/core/src/main/java/org/codehaus/waffle/action/AnnotatedMethodDefinitionFinder.java (90 => 91)
--- trunk/core/src/main/java/org/codehaus/waffle/action/AnnotatedMethodDefinitionFinder.java 2007-05-26 18:45:10 UTC (rev 90) +++ trunk/core/src/main/java/org/codehaus/waffle/action/AnnotatedMethodDefinitionFinder.java 2007-05-27 20:47:56 UTC (rev 91) @@ -10,18 +10,18 @@ *****************************************************************************/ package org.codehaus.waffle.action; -import org.codehaus.waffle.action.annotation.ActionMethod; -import ognl.TypeConverter; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; + +import ognl.TypeConverter; + +import org.codehaus.waffle.action.annotation.ActionMethod; + /** * Annotation-based method definition finder. This is the default MethodDefinitionFinder used by Waffle. * <p/> @@ -44,32 +44,13 @@ super(servletContext, argumentResolver, typeConverter, methodNameResolver); } - protected List<MethodDefinition> findMethodDefinition(HttpServletRequest request, - HttpServletResponse response, - List<Method> methods) { - List<MethodDefinition> methodDefinitions = new ArrayList<MethodDefinition>(); - - for (Method method : methods) { - if (Modifier.isPublic(method.getModifiers())) { - List<Object> arguments = getArguments(method, request); - MethodDefinition methodDefinition = validateMethod(request, response, method, arguments); - - if (methodDefinition != null) { - methodDefinitions.add(methodDefinition); - } - } - } - - return methodDefinitions; - } - - private List<Object> getArguments(Method method, HttpServletRequest request) { + protected List<Object> getArguments(Method method, HttpServletRequest request) { if (method.isAnnotationPresent(ActionMethod.class)) { ActionMethod actionMethod = method.getAnnotation(ActionMethod.class); List<String> arguments = new ArrayList<String>(actionMethod.parameters().length); for (String value : actionMethod.parameters()) { - arguments.add("{" + value + "}"); // wrap in curly brackets to fit with default handling + arguments.add(formatArgument(value)); } return resolveArguments(request, arguments.iterator());
Modified: trunk/core/src/main/java/org/codehaus/waffle/action/ParanamerMethodDefinitionFinder.java (90 => 91)
--- trunk/core/src/main/java/org/codehaus/waffle/action/ParanamerMethodDefinitionFinder.java 2007-05-26 18:45:10 UTC (rev 90) +++ trunk/core/src/main/java/org/codehaus/waffle/action/ParanamerMethodDefinitionFinder.java 2007-05-27 20:47:56 UTC (rev 91) @@ -11,7 +11,6 @@ package org.codehaus.waffle.action; import java.lang.reflect.Method; -import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; @@ -47,27 +46,7 @@ super(servletContext, argumentResolver, typeConverter, methodNameResolver); } - protected List<MethodDefinition> findMethodDefinition(HttpServletRequest request, - HttpServletResponse response, - List<Method> methods) { - List<MethodDefinition> methodDefinitions = new ArrayList<MethodDefinition>(); - - for (Method method : methods) { - if (Modifier.isPublic(method.getModifiers())) { - List<Object> arguments = getArguments(method, request); - - MethodDefinition methodDefinition = validateMethod(request, response, method, arguments); - - if (methodDefinition != null) { - methodDefinitions.add(methodDefinition); - } - } - } - - return methodDefinitions; - } - - private List<Object> getArguments(Method method, HttpServletRequest request) { + protected List<Object> getArguments(Method method, HttpServletRequest request) { Class<?>[] parameterTypes = method.getParameterTypes(); String[] parameterNames = null; @@ -105,15 +84,11 @@ || ServletContext.class.isAssignableFrom(parameterType)) { // do nothing } else { - arguments.add("{" + parameterNames[i] + "}"); + arguments.add(formatArgument(parameterNames[i])); } } return resolveArguments(request, arguments.iterator()); } - private String[] findParameterNames(Method method) { - return paranamer.lookupParameterNames(method); - } - }
To unsubscribe from this list please visit:
