View Javadoc

1   /*
2    * $Header: /home/cvs/jakarta-commons/validator/src/share/org/apache/commons/validator/util/ValidatorUtils.java,v 1.7.2.1 2004/06/22 02:24:38 husted Exp $
3    * $Revision: 1.7.2.1 $
4    * $Date: 2004/06/22 02:24:38 $
5    *
6    * ====================================================================
7    * Copyright 2001-2004 The Apache Software Foundation
8    *
9    * Licensed under the Apache License, Version 2.0 (the "License");
10   * you may not use this file except in compliance with the License.
11   * You may obtain a copy of the License at
12   *
13   *     http://www.apache.org/licenses/LICENSE-2.0
14   *
15   * Unless required by applicable law or agreed to in writing, software
16   * distributed under the License is distributed on an "AS IS" BASIS,
17   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18   * See the License for the specific language governing permissions and
19   * limitations under the License.
20   */
21  
22  package org.apache.commons.validator.util;
23  
24  import java.lang.reflect.InvocationTargetException;
25  import java.util.Collection;
26  import java.util.Iterator;
27  
28  import org.apache.commons.beanutils.PropertyUtils;
29  import org.apache.commons.collections.FastHashMap; // DEPRECATED
30  import org.apache.commons.logging.Log;
31  import org.apache.commons.logging.LogFactory;
32  import org.apache.commons.validator.Arg;
33  import org.apache.commons.validator.Msg;
34  import org.apache.commons.validator.Var;
35  
36  /***
37   * Basic utility methods.
38   *
39   * The use of FastHashMap is deprecated and will be replaced in a future
40   * release.
41   */
42  public class ValidatorUtils {
43  
44      /***
45       * Logger.
46       */
47      private static Log log = LogFactory.getLog(ValidatorUtils.class);
48  
49      /***
50       * <p>Replace part of a <code>String</code> with another value.</p>
51       *
52       * @param value <code>String</code> to perform the replacement on.
53       * @param key The name of the constant.
54       * @param replaceValue The value of the constant.
55       */
56      public static String replace(
57              String value,
58              String key,
59              String replaceValue) {
60  
61          if (value == null || key == null || replaceValue == null) {
62              return value;
63          }
64  
65          int pos = value.indexOf(key);
66  
67          if (pos < 0) {
68              return value;
69          }
70  
71          int length = value.length();
72          int start = pos;
73          int end = pos + key.length();
74  
75          if (length == key.length()) {
76              value = replaceValue;
77  
78          } else if (end == length) {
79              value = value.substring(0, start) + replaceValue;
80  
81          } else {
82              value =
83                      value.substring(0, start)
84                      + replaceValue
85                      + replace(value.substring(end), key, replaceValue);
86          }
87  
88          return value;
89      }
90  
91      /***
92       * Convenience method for getting a value from a bean property as a
93       * <code>String</code>.  If the property is a <code>String[]</code> or
94       * <code>Collection</code> and it is empty, an empty <code>String</code>
95       * "" is returned.  Otherwise, property.toString() is returned.  This method
96       * may return <code>null</code> if there was an error retrieving the
97       * property.
98       * @param bean
99       * @param property
100      */
101     public static String getValueAsString(Object bean, String property) {
102         Object value = null;
103 
104         try {
105             value = PropertyUtils.getProperty(bean, property);
106 
107         } catch(IllegalAccessException e) {
108             log.error(e.getMessage(), e);
109         } catch(InvocationTargetException e) {
110             log.error(e.getMessage(), e);
111         } catch(NoSuchMethodException e) {
112             log.error(e.getMessage(), e);
113         }
114 
115         if (value == null) {
116             return null;
117         }
118 
119         if (value instanceof String[]) {
120             return ((String[]) value).length > 0 ? value.toString() : "";
121 
122         } else if (value instanceof Collection) {
123             return ((Collection) value).isEmpty() ? "" : value.toString();
124 
125         } else {
126             return value.toString();
127         }
128 
129     }
130 
131     /***
132      * Makes a deep copy of a <code>FastHashMap</code> if the values
133      * are <code>Msg</code>, <code>Arg</code>,
134      * or <code>Var</code>.  Otherwise it is a shallow copy.
135      *
136      * @param map <code>FastHashMap</code> to copy.
137      * @return FastHashMap A copy of the <code>FastHashMap</code> that was
138      * passed in.
139      */
140     public static FastHashMap copyFastHashMap(FastHashMap map) {
141         FastHashMap results = new FastHashMap();
142 
143         Iterator i = map.keySet().iterator();
144         while (i.hasNext()) {
145             String key = (String) i.next();
146             Object value = map.get(key);
147 
148             if (value instanceof Msg) {
149                 results.put(key, ((Msg) value).clone());
150             } else if (value instanceof Arg) {
151                 results.put(key, ((Arg) value).clone());
152             } else if (value instanceof Var) {
153                 results.put(key, ((Var) value).clone());
154             } else {
155                 results.put(key, value);
156             }
157         }
158 
159         results.setFast(true);
160 
161         return results;
162     }
163 
164 }