View Javadoc

1   /*
2    * Copyright 2004-2009 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.springmodules.validation.bean.converter;
18  
19  import org.springframework.util.ClassUtils;
20  
21  /**
22   * Converts simple error codes to an error code that expresses the class and perhaps
23   * the property that are associated with the error code.
24   *
25   * @author Uri Boness
26   */
27  public class ModelAwareErrorCodeConverter implements ErrorCodeConverter {
28  
29      final static String ERROR_CODE_SEPERATOR_PREFIX = "[";
30  
31      final static String ERROR_CODE_SEPERATOR_SUFFIX = "]";
32  
33      final static String PROPERTY_SEPERATOR = ".";
34  
35      private boolean useFullyQualifiedClassName;
36  
37      /**
38       * Constructs a new ModelAwareErrorCodeConverter that uses class simple names. For example, the validation error code
39       * <code>error_code</code> for class <code>org.springmodules.validation.sample.Person</code> will be converted
40       * to <code>Person[error_code]</code>.
41       */
42      public ModelAwareErrorCodeConverter() {
43          this(false);
44      }
45  
46      /**
47       * Constructs a new ModelAwareErrorCodeConverter. The given argument idicateds whether a fully qualified name should
48       * be used for the converted error codes. For example, if the validation error code <code>error_code</code> for
49       * class <code>org.springmodules.validation.sample.Person</code> will be converted with fully qualified name set
50       * to <code>true</code>, the converted error code will be
51       * <code>org.springmodules.validation.sample.Person[error_code]</code>.
52       */
53      public ModelAwareErrorCodeConverter(boolean useFullyQualifiedClassName) {
54          this.useFullyQualifiedClassName = useFullyQualifiedClassName;
55      }
56  
57      /**
58       * Converts the given error code to the following format:<br/> <code>short_class_name[errorCode]</code></br>
59       * where <code>short_class_name</code> is the name of the given class with its package stripped, and
60       * <code>error_code</code> is the given error code.
61       *
62       * @param errorCode The given error code (the one to convert)
63       * @param clazz The given class
64       * @return The converted error code.
65       */
66      public String convertGlobalErrorCode(String errorCode, Class clazz) {
67          String className = (useFullyQualifiedClassName) ? clazz.getName() : ClassUtils.getShortName(clazz);
68          return new StringBuffer(className)
69              .append(ERROR_CODE_SEPERATOR_PREFIX)
70              .append(errorCode)
71              .append(ERROR_CODE_SEPERATOR_SUFFIX)
72              .toString();
73      }
74  
75      /**
76       * Converts the given error code to the following format:<br/>
77       * <code>short_class_name.property_name[errorCode]</code></br>
78       * where <code>short_class_name</code> is the name of the given class with its package stripped,
79       * <code>property_name</code> is the given property name, and <code>error_code</code> is the given
80       * error code.
81       *
82       * @param errorCode The given error code (the one to convert)
83       * @param clazz The given class
84       * @param propertyName The property name
85       * @return The converted error code.
86       */
87      public String convertPropertyErrorCode(String errorCode, Class clazz, String propertyName) {
88          String className = (useFullyQualifiedClassName) ? clazz.getName() : ClassUtils.getShortName(clazz);
89          return new StringBuffer(className)
90              .append(PROPERTY_SEPERATOR)
91              .append(propertyName)
92              .append(ERROR_CODE_SEPERATOR_PREFIX)
93              .append(errorCode)
94              .append(ERROR_CODE_SEPERATOR_SUFFIX)
95              .toString();
96      }
97  
98      //=============================================== Setter/Getter ====================================================
99  
100     /**
101      * Determines whether the converted error codes will use the fully qualified class names of the validated class. If
102      * not, the simple class name will be used instead.
103      *
104      * @param useFullyQualifiedClassName
105      */
106     public void setUseFullyQualifiedClassName(boolean useFullyQualifiedClassName) {
107         this.useFullyQualifiedClassName = useFullyQualifiedClassName;
108     }
109 
110 }