01: /*
02: * $Id: StrutsTypeConverter.java 471756 2006-11-06 15:01:43Z husted $
03: *
04: * Licensed to the Apache Software Foundation (ASF) under one
05: * or more contributor license agreements. See the NOTICE file
06: * distributed with this work for additional information
07: * regarding copyright ownership. The ASF licenses this file
08: * to you under the Apache License, Version 2.0 (the
09: * "License"); you may not use this file except in compliance
10: * with the License. You may obtain a copy of the License at
11: *
12: * http://www.apache.org/licenses/LICENSE-2.0
13: *
14: * Unless required by applicable law or agreed to in writing,
15: * software distributed under the License is distributed on an
16: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17: * KIND, either express or implied. See the License for the
18: * specific language governing permissions and limitations
19: * under the License.
20: */
21: package org.apache.struts2.util;
22:
23: import java.util.Map;
24:
25: import ognl.DefaultTypeConverter;
26:
27: /**
28: * <!-- START SNIPPET: javadoc -->
29: *
30: * Base class for type converters used in Struts. This class provides two abstract methods that are used to convert
31: * both to and from strings -- the critical functionality that is core to Struts's type coversion system.
32: *
33: * <p/> Type converters do not have to use this class. It is merely a helper base class, although it is recommended that
34: * you use this class as it provides the common type conversion contract required for all web-based type conversion.
35: *
36: * <p/> There's a hook (fall back method) called <code>performFallbackConversion</code> of which
37: * could be used to perform some fallback conversion if <code>convertValue</code> method of this
38: * failed. By default it just ask its super class (Ognl's DefaultTypeConverter) to do the conversion.
39: *
40: * <p/> To allow the framework to recognize that a conversion error has occurred, throw an XWorkException or
41: * preferable a TypeConversionException.
42: *
43: * <!-- END SNIPPET: javadoc -->
44: *
45: */
46: public abstract class StrutsTypeConverter extends DefaultTypeConverter {
47: public Object convertValue(Map context, Object o, Class toClass) {
48: if (toClass.equals(String.class)) {
49: return convertToString(context, o);
50: } else if (o instanceof String[]) {
51: return convertFromString(context, (String[]) o, toClass);
52: } else if (o instanceof String) {
53: return convertFromString(context,
54: new String[] { (String) o }, toClass);
55: } else {
56: return performFallbackConversion(context, o, toClass);
57: }
58: }
59:
60: /**
61: * Hook to perform a fallback conversion if every default options failed. By default
62: * this will ask Ognl's DefaultTypeConverter (of which this class extends) to
63: * perform the conversion.
64: *
65: * @param context
66: * @param o
67: * @param toClass
68: * @return The fallback conversion
69: */
70: protected Object performFallbackConversion(Map context, Object o,
71: Class toClass) {
72: return super .convertValue(context, o, toClass);
73: }
74:
75: /**
76: * Converts one or more String values to the specified class.
77: *
78: * @param context the action context
79: * @param values the String values to be converted, such as those submitted from an HTML form
80: * @param toClass the class to convert to
81: * @return the converted object
82: */
83: public abstract Object convertFromString(Map context,
84: String[] values, Class toClass);
85:
86: /**
87: * Converts the specified object to a String.
88: *
89: * @param context the action context
90: * @param o the object to be converted
91: * @return the converted String
92: */
93: public abstract String convertToString(Map context, Object o);
94: }
|