Show WookiLinkFilter.java syntax highlighted
package fr.loria.ecoo.wooki.web.wiki;
import org.radeox.filter.CacheFilter;
import org.radeox.filter.context.FilterContext;
import org.radeox.filter.regex.MatchResult;
import org.radeox.filter.regex.RegexTokenFilter;
import fr.loria.ecoo.wooki.web.Wooki;
/**
* WookiLinkFilter finds [pageName|label] patterns
*/
public class WookiLinkFilter extends RegexTokenFilter implements CacheFilter {
private String serverUrl;
public WookiLinkFilter() throws Exception {
super("\\[[^\\[\\]]*\\]", false);
serverUrl = Wooki.getInstance().getWootSite().getId();
}
public void handleMatch(StringBuffer sb, MatchResult result, FilterContext ctx) {
String content = result.group(0).substring(1, result.group(0).length() - 1);
String link;
String label;
if (content.indexOf("|") == -1) {
link = content;
label = null;
} else {
link = content.substring(0, content.indexOf("|"));
label = content.substring(content.indexOf("|") + 1);
}
String httpLinkPattern = "([^\"'=]|^)((http|ftp)s?://(%[\\p{Digit}A-Fa-f][\\p{Digit}A-Fa-f]|[-_.!~*';/?:@#&=+$,\\p{Alnum}])+)";
try {
if (link.matches(httpLinkPattern)) {
sb.append("<a class=\"externalLink\" href=\"" + link + "\">" + ((label == null) ? link : label) + "</a>");
return;
}
sb.append("<a class=\"wookiLink\" href=\"" + serverUrl + "/ViewPage?page=" + link + "\">" + ((label == null) ? link : label) + "</a>");
return;
} catch (Exception e) {
sb.append("<span class=\"error\">invalid link : " + link + "(" + e.getMessage() + ")</span>");
}
}
}
See more files for this project here