Coverage Report - org.kuali.rice.kns.util.MessageUtils
 
Classes in this File Line Coverage Branch Coverage Complexity
MessageUtils
0%
0/25
0%
0/16
2.6
 
 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.rice.kns.util;
 17  
 
 18  
 import java.util.HashSet;
 19  
 import java.util.Map;
 20  
 import java.util.Set;
 21  
 
 22  0
 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  
     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  
     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  
     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  
     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  
     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  0
         }
 104  0
         return result;
 105  
     }
 106  
 
 107  
 }