All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.webflow.action.ResultObjectBasedEventFactory Maven / Gradle / Ivy

There is a newer version: 3.0.0
Show newest version
/*
 * Copyright 2004-2012 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.webflow.action;

import org.springframework.util.StringUtils;
import org.springframework.webflow.execution.Event;
import org.springframework.webflow.execution.RequestContext;

/**
 * Result object-to-event adapter interface that tries to do a sensible conversion of the result object into a web flow
 * event. It uses the following conversion table:
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
Result object typeEvent idRemarks
null{@link org.springframework.webflow.action.EventFactorySupport#getNullEventId()} 
{@link java.lang.Boolean} or boolean{@link org.springframework.webflow.action.EventFactorySupport#getYesEventId()}/ * {@link org.springframework.webflow.action.EventFactorySupport#getNoEventId()} 
{@link org.springframework.core.enums.LabeledEnum}{@link org.springframework.core.enums.LabeledEnum#getLabel()}The result object will included in the event as an attribute named "result".
{@link java.lang.Enum}{@link java.lang.Enum#name()}The result object will included in the event as an attribute named "result".
{@link java.lang.String}The string. 
{@link org.springframework.webflow.execution.Event}The resulting event object. 
* * @author Keith Donald * @author Erwin Vervaet */ public class ResultObjectBasedEventFactory extends EventFactorySupport implements ResultEventFactory { public Event createResultEvent(Object source, Object resultObject, RequestContext context) { if (resultObject == null) { // this handles the case where the declared result return type is mapped // by this class but the value is null return event(source, getNullEventId()); } else if (isBoolean(resultObject.getClass())) { return event(source, ((Boolean) resultObject)); } else if (isEnum(resultObject.getClass())) { String eventId = EnumUtils.getEnumName(resultObject); return event(source, eventId, getResultAttributeName(), resultObject); } else if (isString(resultObject.getClass())) { String resultString = (String) resultObject; if (StringUtils.hasText(resultString)) { return event(source, resultString); } else { // treat an empty string as the null event return event(source, getNullEventId()); } } else if (isEvent(resultObject.getClass())) { return (Event) resultObject; } else { throw new IllegalArgumentException("Cannot deal with result object '" + resultObject + "' of type '" + resultObject.getClass() + "'"); } } /** * Check whether or not given type is mapped to a corresponding event using special mapping rules. */ public boolean isMappedValueType(Class type) { return isBoolean(type) || isEnum(type) || isString(type) || isEvent(type); } // internal helpers to determine the 'type' of a class private boolean isBoolean(Class type) { return Boolean.class.equals(type) || boolean.class.equals(type); } private boolean isEnum(Class type) { return EnumUtils.isEnum(type); } private boolean isString(Class type) { return String.class.equals(type); } private boolean isEvent(Class type) { return Event.class.isAssignableFrom(type); } /** * Simple helper class with Java 5 specific code factored out to keep the containing class JDK 1.3 compatible. */ private static class EnumUtils { public static String getEnumName(Object enumValue) { return ((java.lang.Enum) enumValue).name(); } public static boolean isEnum(Class type) { return java.lang.Enum.class.isAssignableFrom(type); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy