FileDocCategorySizeDatePackage
Transform.javaAPI DocApache log4j 1.2.153867Sat Aug 25 00:09:40 BST 2007org.apache.log4j.helpers

Transform

public class Transform extends Object
Utility class for transforming strings.
author
Ceki Gülcü
author
Michael A. McAngus

Fields Summary
private static final String
CDATA_START
private static final String
CDATA_END
private static final String
CDATA_PSEUDO_END
private static final String
CDATA_EMBEDED_END
private static final int
CDATA_END_LEN
Constructors Summary
Methods Summary
public static voidappendEscapingCDATA(java.lang.StringBuffer buf, java.lang.String str)
Ensures that embeded CDEnd strings (]]>) are handled properly within message, NDC and throwable tag text.

param
buf StringBuffer holding the XML data to this point. The initial CDStart () of the CDATA section are the responsibility of the calling method.
param
str The String that is inserted into an existing CDATA Section within buf.

      if (str != null) {
          int end = str.indexOf(CDATA_END);
          if (end < 0) {
              buf.append(str);
          } else {
              int start = 0;
              while (end > -1) {
                  buf.append(str.substring(start, end));
                  buf.append(CDATA_EMBEDED_END);
                  start = end + CDATA_END_LEN;
                  if (start < str.length()) {
                      end = str.indexOf(CDATA_END, start);
                  } else {
                      return;
                  }
              }
              buf.append(str.substring(start));
          }
      }
  
public static java.lang.StringescapeTags(java.lang.String input)
This method takes a string which may contain HTML tags (ie, <b>, <table>, etc) and replaces any '<', '>' , '&' or '"' characters with respective predefined entity references.

param
input The text to be converted.
return
The input string with the special characters replaced.


                                                 
        
    //Check if the string is null, zero length or devoid of special characters
    // if so, return what was sent in.

    if(input == null
       || input.length() == 0
       || (input.indexOf('"") == -1 &&
           input.indexOf('&") == -1 &&
           input.indexOf('<") == -1 &&
           input.indexOf('>") == -1)) {
      return input;
    }

    //Use a StringBuffer in lieu of String concatenation -- it is
    //much more efficient this way.

    StringBuffer buf = new StringBuffer(input.length() + 6);
    char ch = ' ";

    int len = input.length();
    for(int i=0; i < len; i++) {
      ch = input.charAt(i);
      if (ch > '>") {
          buf.append(ch);
      } else if(ch == '<") {
	      buf.append("<");
      } else if(ch == '>") {
	      buf.append(">");
      } else if(ch == '&") {
	      buf.append("&");
      } else if(ch == '"") {
	      buf.append(""");
      } else {
	      buf.append(ch);
      }
    }
    return buf.toString();