This render knows to perform a few format operations on String objects: upper: Convert to upper case. lower: Convert to lower case. cap: Convert first character to upper case. url-encode: xml-encode:</l
| 43 | |
| 44 | |
| 45 | public class StringRenderer implements AttributeRenderer { |
| 46 | // trim(s) and strlen(s) built-in funcs; these are format options |
| 47 | @Override |
| 48 | public String toString(Object o, String formatString, Locale locale) { |
| 49 | String s = (String)o; |
| 50 | if ( formatString==null ) return s; |
| 51 | if ( formatString.equals("upper") ) return s.toUpperCase(locale); |
| 52 | if ( formatString.equals("lower") ) return s.toLowerCase(locale); |
| 53 | if ( formatString.equals("cap") ) { |
| 54 | return (s.length()>0) ? Character.toUpperCase(s.charAt(0)) +s.substring(1) : s; |
| 55 | } |
| 56 | if ( formatString.equals("url-encode") ) { |
| 57 | try { |
| 58 | return URLEncoder.encode(s, "UTF-8"); |
| 59 | } |
| 60 | catch (UnsupportedEncodingException ex) { |
| 61 | // UTF-8 is standard, should always be available |
| 62 | } |
| 63 | } |
| 64 | if ( formatString.equals("xml-encode") ) { |
| 65 | return escapeHTML(s); |
| 66 | } |
| 67 | return String.format(locale, formatString, s); |
| 68 | } |
| 69 | |
| 70 | public static String escapeHTML(String s) { |
| 71 | if ( s==null ) { |
| 72 | return null; |
| 73 | } |
| 74 | |
| 75 | StringBuilder buf = new StringBuilder(s.length()); |
| 76 | int len = s.length(); |
| 77 | for (int i = 0; i< len; i++) { |
| 78 | char c = s.charAt(i); |
| 79 | switch ( c ) { |
| 80 | case '&' : |
| 81 | buf.append("&"); |
| 82 | break; |
| 83 | case '<' : |
| 84 | buf.append("<"); |
| 85 | break; |
| 86 | case '>' : |
| 87 | buf.append(">"); |
| 88 | break; |
| 89 | case '\r' : case '\n' : case '\t' : |
| 90 | buf.append(c); |
| 91 | break; |
| 92 | default: |
| 93 | boolean control = c<' '; // 32 |
| 94 | boolean aboveASCII = c>126; |
| 95 | if ( control || aboveASCII ) { |
| 96 | buf.append("&#"); |
| 97 | buf.append((int)c); |
| 98 | buf.append(";"); |
| 99 | } |
| 100 | else buf.append(c); |
| 101 | } |
| 102 | } |
nothing calls this directly
no outgoing calls
no test coverage detected