1 package org.portletbridge.portlet;
2
3 import java.util.regex.Matcher;
4 import java.util.regex.Pattern;
5
6 public class RegexContentRewriter implements ContentRewriter {
7
8 private Pattern urlPattern;
9
10 public RegexContentRewriter(String pattern) {
11 urlPattern = Pattern
12 .compile(pattern);
13 }
14
15 public String rewrite(String baseUrl, String content, LinkRewriter linkRewriter) {
16 Matcher matcher = urlPattern.matcher(content);
17 StringBuffer sb = new StringBuffer();
18 while(matcher.find()) {
19 int group = extractGroup(matcher);
20 if(group > 0) {
21 String before = content.substring(matcher.start(), matcher.start(group));
22 String url = matcher.group(group);
23 String after = content.substring(matcher.end(group), matcher.end());
24 matcher.appendReplacement(sb, before + linkRewriter.link(baseUrl, url) + after);
25 }
26 }
27 matcher.appendTail(sb);
28 return sb.toString();
29 }
30
31 private int extractGroup(Matcher matcher) {
32 int matchingGroup = -1;
33 for(int i = 1; i <= matcher.groupCount(); i++) {
34 if(matcher.start(i) > -1) {
35 matchingGroup = i;
36 break;
37 }
38 }
39 return matchingGroup;
40 }
41
42 }