1 16 package org.springframework.binding.method; 17 18 import org.springframework.binding.convert.ConversionContext; 19 import org.springframework.binding.convert.ConversionException; 20 import org.springframework.binding.convert.ConversionService; 21 import org.springframework.binding.convert.support.ConversionServiceAwareConverter; 22 import org.springframework.util.StringUtils; 23 24 44 public class TextToMethodSignature extends ConversionServiceAwareConverter { 45 46 49 public TextToMethodSignature() { 50 } 51 52 55 public TextToMethodSignature(ConversionService conversionService) { 56 super(conversionService); 57 } 58 59 public Class [] getSourceClasses() { 60 return new Class [] { String .class }; 61 } 62 63 public Class [] getTargetClasses() { 64 return new Class [] { MethodSignature.class }; 65 } 66 67 protected Object doConvert(Object source, Class targetClass, ConversionContext context) throws Exception { 68 String encodedMethodKey = (String )source; 69 encodedMethodKey = encodedMethodKey.trim(); 70 int openParan = encodedMethodKey.indexOf('('); 71 if (openParan == -1) { 72 return new MethodSignature(encodedMethodKey); 73 } 74 else { 75 String methodName = encodedMethodKey.substring(0, openParan); 76 int closeParan = encodedMethodKey.lastIndexOf(')'); 77 if (closeParan == -1) { 78 throw new ConversionException(encodedMethodKey, MethodSignature.class, null, 79 "Syntax error: No close parenthesis specified for method parameter list"); 80 } 81 String delimParamList = encodedMethodKey.substring(openParan + 1, closeParan); 82 String [] paramArray = StringUtils.commaDelimitedListToStringArray(delimParamList); 83 Parameters params = new Parameters(paramArray.length); 84 for (int i = 0; i < paramArray.length; i++) { 85 String param = paramArray[i].trim(); 86 String [] typeAndName = StringUtils.split(param, " "); 87 if (typeAndName != null && typeAndName.length == 2) { 88 Class type = (Class )converterFor(String .class, Class .class).execute(typeAndName[0]); 89 params.add(new Parameter(type, parseExpression(typeAndName[1].trim()))); 90 } 91 else { 92 params.add(new Parameter(null, parseExpression(param))); 93 } 94 } 95 return new MethodSignature(methodName, params); 96 } 97 } 98 } | Popular Tags |