1 16 package org.springframework.webflow.action; 17 18 import org.springframework.core.JdkVersion; 19 import org.springframework.core.enums.LabeledEnum; 20 import org.springframework.webflow.execution.Event; 21 import org.springframework.webflow.execution.RequestContext; 22 import org.springframework.webflow.execution.support.EventFactorySupport; 23 24 72 public class ResultObjectBasedEventFactory extends EventFactorySupport implements ResultEventFactory { 73 74 public Event createResultEvent(Object source, Object resultObject, RequestContext context) { 75 if (resultObject == null) { 76 return event(source, getNullEventId()); 79 } 80 else if (isBoolean(resultObject.getClass())) { 81 return event(source, ((Boolean )resultObject).booleanValue()); 82 } 83 else if (isLabeledEnum(resultObject.getClass())) { 84 String resultId = ((LabeledEnum)resultObject).getLabel(); 85 return event(source, resultId, getResultAttributeName(), resultObject); 86 } 87 else if (isJdk5Enum(resultObject.getClass())) { 88 return event(source, resultObject.toString(), getResultAttributeName(), resultObject); 90 } 91 else if (isString(resultObject.getClass())) { 92 return event(source, (String )resultObject); 93 } 94 else if (isEvent(resultObject.getClass())) { 95 return (Event)resultObject; 96 } 97 else { 98 throw new IllegalArgumentException ("Cannot deal with result object '" + resultObject + 99 "' of type '" + resultObject.getClass() + "'"); 100 } 101 } 102 103 107 public boolean isMappedValueType(Class type) { 108 return isBoolean(type) || isLabeledEnum(type) || isJdk5Enum(type) || isString(type) || isEvent(type); 109 } 110 111 113 private boolean isBoolean(Class type) { 114 return Boolean .class.equals(type) || boolean.class.equals(type); 115 } 116 117 private boolean isLabeledEnum(Class type) { 118 return LabeledEnum.class.isAssignableFrom(type); 119 } 120 121 private boolean isJdk5Enum(Class type) { 122 if (JdkVersion.getMajorJavaVersion() >= JdkVersion.JAVA_15) { 123 return type.isEnum(); 124 } 125 else { 126 return false; 127 } 128 } 129 130 private boolean isString(Class type) { 131 return String .class.equals(type); 132 } 133 134 private boolean isEvent(Class type) { 135 return Event.class.isAssignableFrom(type); 136 } 137 } | Popular Tags |