All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.plugins.emailext.Util Maven / Gradle / Ivy

The newest version!
package hudson.plugins.emailext;

/**
 * Utility class for internal use.
 *
 * @author jjamison
 *
 */
public class Util {

	// Prevent instantiation.
	private Util() {}
	
	/**
	 * Replaces all the printf-style escape sequences in a string
	 * with the appropriate characters.
	 * 
	 * @param escapedString the string containing escapes
	 * @return the string with all the escape sequences replaced
	 */
	public static String unescapeString(String escapedString) {
		StringBuffer sb = new StringBuffer();
		for (int i = 1; i < escapedString.length() - 1; ++i) {
			char c = escapedString.charAt(i);
			if (c == '\\') {
				++i;
				sb.append(unescapeChar(escapedString.charAt(i)));
			} else {
				sb.append(c);
			}
		}
		return sb.toString();
	}

	private static char unescapeChar(char escapedChar) {
		switch (escapedChar) {
		case 'b':
			return '\b';
		case 't':
			return '\t';
		case 'n':
			return '\n';
		case 'f':
			return '\f';
		case 'r':
			return '\r';
		default:
			return escapedChar;
		}
	}
	
	/**
	 * An interface for use with Util.printf to specialize behavior.
	 * Implementing printSpec allows % escape sequences to be handled
	 * in an individual way.
	 */
	public static interface PrintfSpec {
		
		/**
		 * Specializes the behavior of printf for % escape characters.
		 * Given a character, appends the replacement of that escape character
		 * to the given buffer, if the escape character can be handled.
		 * Otherwise, does nothing. 
		 * 
		 * @param buf the buffer to append the result to
		 * @param formatChar the escape character being replaced
		 * @return true if the character was handled
		 */
		boolean printSpec(StringBuffer buf, char formatChar);
	
	}
	
	/**
	 * Formats a string and puts the result into a StringBuffer.
	 * Allows for standard Java backslash escapes and a customized behavior
	 * for % escapes in the form of a PrintfSpec.
	 * 
	 * @param buf the buffer to append the result to
	 * @param formatString the string to format
	 * @param printfSpec the specialization for printf
	 */
	public static void printf(StringBuffer buf, String formatString, PrintfSpec printfSpec) {
		for (int i = 0; i < formatString.length(); ++i) {
			char c = formatString.charAt(i);
			if ((c == '%') && (i + 1 < formatString.length())) {
				++i;
				char code = formatString.charAt(i);
				if (code == '%') {
					buf.append('%');
				} else {
					boolean handled = printfSpec.printSpec(buf, code);
					if (!handled) {
						buf.append('%');
						buf.append(code);
					}
				}
			} else if ((c == '\\') && (i + 1 < formatString.length())) {
				++i;
				buf.append(Util.unescapeChar(formatString.charAt(i)));
			} else {
				buf.append(c);
			}
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy