/*
* *************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
* *************************************************************************************
*/
package com.espertech.esper.event.util;
/**
* Renderer for a String-value into XML strings.
*/
public class OutputValueRendererXMLString implements OutputValueRenderer
{
public OutputValueRendererXMLString() {
}
public void render(Object object, StringBuilder buf)
{
if (object == null)
{
buf.append("null");
return;
}
xmlEncode(object.toString(), buf, true);
}
/**
* XML-Encode the passed string.
* @param s string to encode
* @param sb string buffer to populate
* @param isEncodeSpecialChar true for encoding of special characters below ' ', false for leaving special chars
*/
public static void xmlEncode(String s, StringBuilder sb, boolean isEncodeSpecialChar)
{
if (s == null || s.length() == 0)
{
return;
}
char c;
int i;
int len = s.length();
String t;
for (i = 0; i < len; i += 1)
{
c = s.charAt(i);
// replace literal values with entities
if (c == '&')
{
sb.append("&");
}
else if (c == '<')
{
sb.append("<");
}
else if (c == '>')
{
sb.append(">");
}
else if (c == '\'')
{
sb.append("'");
}
else if (c == '\"')
{
sb.append(""");
}
else
{
if ((c < ' ') && (isEncodeSpecialChar))
{
t = "000" + Integer.toHexString(c);
sb.append("\\u");
sb.append(t.substring(t.length() - 4));
}
else
{
sb.append(c);
}
}
}
}
}