View Javadoc

1   /*
2    * $Id: StrutsTypeConverter.java 651946 2008-04-27 13:41:38Z apetrelli $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "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  
22  package org.apache.struts2.util;
23  
24  import java.util.Map;
25  
26  import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
27  
28  /***
29   * <!-- START SNIPPET: javadoc -->
30   *
31   * Base class for type converters used in Struts. This class provides two abstract methods that are used to convert
32   * both to and from strings -- the critical functionality that is core to Struts's type coversion system.
33   *
34   * <p/> Type converters do not have to use this class. It is merely a helper base class, although it is recommended that
35   * you use this class as it provides the common type conversion contract required for all web-based type conversion.
36   *
37   * <p/> There's a hook (fall back method) called <code>performFallbackConversion</code> of which
38   * could be used to perform some fallback conversion if <code>convertValue</code> method of this
39   * failed. By default it just ask its super class (Ognl's DefaultTypeConverter) to do the conversion.
40   *
41   * <p/> To allow the framework to recognize that a conversion error has occurred, throw an XWorkException or
42   * preferable a TypeConversionException.
43   *
44   * <!-- END SNIPPET: javadoc -->
45   *
46   */
47  public abstract class StrutsTypeConverter extends DefaultTypeConverter {
48      public Object convertValue(Map context, Object o, Class toClass) {
49          if (toClass.equals(String.class)) {
50              return convertToString(context, o);
51          } else if (o instanceof String[]) {
52              return convertFromString(context, (String[]) o, toClass);
53          } else if (o instanceof String) {
54              return convertFromString(context, 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, Class toClass) {
71          return super.convertValue(context, o, toClass);
72      }
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, String[] values, Class toClass);
84  
85      /***
86       * Converts the specified object to a String.
87       *
88       * @param context the action context
89       * @param o       the object to be converted
90       * @return the converted String
91       */
92      public abstract String convertToString(Map context, Object o);
93  }