public Object decorate(Object columnValue,
PageContext pageContext,
MediaTypeEnum media) {
//$NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-1$
if (columnValue == null)
{
return null;
}
String work = columnValue.toString();
int urlBegin;
StringBuffer buffer = new StringBuffer();
// First check for email addresses.
while ((urlBegin = work.indexOf('@")) != -1)
{
int start = 0;
int end = work.length() - 1;
// scan backwards...
for (int j = urlBegin; j >= 0; j--)
{
if (Character.isWhitespace(work.charAt(j)))
{
start = j + 1;
break;
}
}
// scan forwards...
for (int j = urlBegin; j < = end; j++)
{
if (Character.isWhitespace(work.charAt(j)))
{
end = j - 1;
break;
}
}
String email = work.substring(start, end + 1);
buffer.append(work.substring(0, start)).append("< a href=\"mailto:") //$NON-NLS-1$
.append(email + "\" >") //$NON-NLS-1$
.append(email).append("< /a >"); //$NON-NLS-1$
if (end == work.length())
{
work = TagConstants.EMPTY_STRING;
}
else
{
work = work.substring(end + 1);
}
}
work = buffer.toString() + work;
buffer = new StringBuffer();
// Now check for urls...
while ((urlBegin = work.indexOf(URL_DELIM)) != -1)
{
// scan backwards...
int fullUrlBegin = urlBegin;
StringBuffer prefixBuffer = new StringBuffer(10);
for (int j = fullUrlBegin - 1; j >= 0; j--)
{
if (Character.isWhitespace(work.charAt(j)))
{
fullUrlBegin = j + 1;
break;
}
fullUrlBegin = j;
prefixBuffer.append(work.charAt(j));
}
if (!ArrayUtils.contains(URLS_PREFIXES, StringUtils.reverse(prefixBuffer.toString())))
{
buffer.append(work.substring(0, urlBegin + 3));
work = work.substring(urlBegin + 3);
continue;
}
int urlEnd = work.length();
// scan forwards...
for (int j = urlBegin; j < urlEnd; j++)
{
if (Character.isWhitespace(work.charAt(j)))
{
urlEnd = j;
break;
}
}
String url = work.substring(fullUrlBegin, urlEnd);
buffer.append(work.substring(0, fullUrlBegin)).append("< a href=\"")//$NON-NLS-1$
.append(url).append("\" >")//$NON-NLS-1$
.append(url).append("< /a >"); //$NON-NLS-1$
if (urlEnd >= work.length())
{
work = TagConstants.EMPTY_STRING;
}
else
{
work = work.substring(urlEnd);
}
}
buffer.append(work);
return buffer.toString();
}
|