1 16 package org.springframework.webflow.engine.builder; 17 18 import org.springframework.binding.convert.ConversionContext; 19 import org.springframework.binding.convert.ConversionException; 20 import org.springframework.binding.convert.support.AbstractConverter; 21 import org.springframework.binding.expression.Expression; 22 import org.springframework.util.StringUtils; 23 import org.springframework.webflow.engine.TransitionCriteria; 24 import org.springframework.webflow.engine.WildcardTransitionCriteria; 25 import org.springframework.webflow.engine.support.BooleanExpressionTransitionCriteria; 26 import org.springframework.webflow.engine.support.EventIdTransitionCriteria; 27 28 53 public class TextToTransitionCriteria extends AbstractConverter { 54 55 59 private static final String BEAN_PREFIX = "bean:"; 60 61 64 private FlowServiceLocator flowServiceLocator; 65 66 71 public TextToTransitionCriteria(FlowServiceLocator flowServiceLocator) { 72 this.flowServiceLocator = flowServiceLocator; 73 } 74 75 public Class [] getSourceClasses() { 76 return new Class [] { String .class }; 77 } 78 79 public Class [] getTargetClasses() { 80 return new Class [] { TransitionCriteria.class }; 81 } 82 83 protected Object doConvert(Object source, Class targetClass, ConversionContext context) throws Exception { 84 String encodedCriteria = (String )source; 85 if (!StringUtils.hasText(encodedCriteria) 86 || WildcardTransitionCriteria.WILDCARD_EVENT_ID.equals(encodedCriteria)) { 87 return WildcardTransitionCriteria.INSTANCE; 88 } 89 else if (flowServiceLocator.getExpressionParser().isDelimitedExpression(encodedCriteria)) { 90 Expression expression = flowServiceLocator.getExpressionParser().parseExpression(encodedCriteria); 91 return createBooleanExpressionTransitionCriteria(expression); 92 } 93 else if (encodedCriteria.startsWith(BEAN_PREFIX)) { 94 return flowServiceLocator.getTransitionCriteria(encodedCriteria.substring(BEAN_PREFIX.length())); 95 } 96 else { 97 return createEventIdTransitionCriteria(encodedCriteria); 98 } 99 } 100 101 108 protected TransitionCriteria createEventIdTransitionCriteria(String eventId) throws ConversionException { 109 return new EventIdTransitionCriteria(eventId); 110 } 111 112 119 protected TransitionCriteria createBooleanExpressionTransitionCriteria(Expression expression) 120 throws ConversionException { 121 return new BooleanExpressionTransitionCriteria(expression); 122 } 123 } | Popular Tags |