Clover Coverage Report - KS Common 1.3.0-SNAPSHOT (Aggregated)
Coverage timestamp: Thu Apr 28 2011 06:00:36 EDT
../../../../../img/srcFileCovDistChart0.png 0% of files have more coverage
23   107   11   4.6
10   46   0.48   5
5     2.2  
1    
 
  MessageUtils       Line # 22 23 0% 11 38 0% 0.0
 
No Tests
 
1    /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10    * software distributed under the License is distributed on an "AS IS"
11    * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12    * or implied. See the License for the specific language governing
13    * permissions and limitations under the License.
14    */
15   
16    package org.kuali.student.common.util;
17   
18    import java.util.HashSet;
19    import java.util.Map;
20    import java.util.Set;
21   
 
22    public class MessageUtils {
23    /**
24    * Interpolates a message based on values contained in the data map, assuming message is formatted using a ${key} syntax.
25    *
26    * @param message
27    * the message to be interpolated
28    * @param data
29    * Map<String, String> containing the data to be used for interpolation
30    * @return the interpolated message
31    */
 
32  0 toggle public static String interpolate(String message, String... data) {
33  0 if (message != null) {
34  0 for (int i = 0; i < data.length; i++) {
35  0 message = message.replaceAll("\\$\\{" + i + "\\}", "" + escape(data[i]));
36    }
37    }
38  0 return message;
39    }
40   
41    /**
42    * Interpolates a message based on parameter index, assuming message is formatted using a ${0}..${n} syntax
43    *
44    * @param message
45    * the message to be interpolated
46    * @param data
47    * varargs to be used for interpolation
48    * @return the interpolated message
49    */
 
50  0 toggle public static String interpolate(String message, Map<String, Object> data) {
51  0 if (message != null && data != null) {
52  0 Set<String> fields = findFields(message);
53  0 for (String s : fields) {
54  0 if(data.get(s) != null){
55  0 message = message.replaceAll("\\$\\{" + s + "\\}", "" + escape(data.get(s).toString()));
56    }
57    }
58    }
59  0 return message;
60    }
61   
62    /**
63    * Interpolates a message which requires only a single property replacement.
64    *
65    * @param message
66    * @param parameter
67    * @param value
68    * @return the interpolated message
69    */
 
70  0 toggle public static String interpolate(String message, String parameter, Object value){
71  0 message = message.replaceAll("\\$\\{" + parameter + "\\}", "" + escape(value.toString()));
72  0 return message;
73    }
74   
75    /**
76    * Adds an escape to all characters requiring an escape.
77    *
78    * @param input
79    * @return the input string with characters escaped.
80    */
 
81  0 toggle private static String escape(String input) {
82  0 char[] toEscape = {'\\', '$', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}'};
83  0 for (char c : toEscape) {
84  0 input = input.replaceAll("\\" + c, "\\\\\\" + c);
85    }
86  0 return input;
87    }
88   
89    /**
90    * Returns a Set<String> of all interpolation targets (fields) within a String.
91    *
92    * @param input
93    * the String from which to extract the interpolation targets
94    * @return Set<String> containing the field names of the interpolation targets
95    */
 
96  0 toggle public static Set<String> findFields(String input) {
97  0 Set<String> result = new HashSet<String>();
98  0 int begin = input.indexOf("${");
99  0 while (begin != -1) {
100  0 int end = input.indexOf("}", begin);
101  0 result.add(input.substring(begin + 2, end));
102  0 begin = input.indexOf("${", end);
103    }
104  0 return result;
105    }
106   
107    }