1 //========================================================================
2 //$Id: RewriteRegexRule.java 966 2008-04-17 13:53:44Z gregw $
3 //Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
4 //------------------------------------------------------------------------
5 //Licensed under the Apache License, Version 2.0 (the "License");
6 //you may not use this file except in compliance with the License.
7 //You may obtain a copy of the License at
8 //http://www.apache.org/licenses/LICENSE-2.0
9 //Unless required by applicable law or agreed to in writing, software
10 //distributed under the License is distributed on an "AS IS" BASIS,
11 //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 //See the License for the specific language governing permissions and
13 //limitations under the License.
14 //========================================================================
15 package org.mortbay.jetty.handler.rewrite;
16
17 import java.io.IOException;
18 import java.util.regex.Matcher;
19
20 import javax.servlet.http.HttpServletRequest;
21 import javax.servlet.http.HttpServletResponse;
22
23 /**
24 * Rewrite the URI by matching with a regular expression.
25 * The replacement string may use $n" to replace the nth capture group.
26 */
27 public class RewriteRegexRule extends RegexRule
28 {
29 private String _replacement;
30
31 /* ------------------------------------------------------------ */
32 public RewriteRegexRule()
33 {
34 _handling = false;
35 _terminating = false;
36 }
37
38 /* ------------------------------------------------------------ */
39 /**
40 * Whenever a match is found, it replaces with this value.
41 *
42 * @param replacement the replacement string.
43 */
44 public void setReplacement(String replacement)
45 {
46 _replacement = replacement;
47 }
48
49
50 /* ------------------------------------------------------------ */
51 /* (non-Javadoc)
52 * @see org.mortbay.jetty.handler.rules.RegexRule#apply(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.util.regex.Matcher)
53 */
54 public String apply(String target, HttpServletRequest request, HttpServletResponse response, Matcher matcher) throws IOException
55 {
56 target=_replacement;
57 for (int g=1;g<=matcher.groupCount();g++)
58 {
59 String group = matcher.group(g);
60 target=target.replaceAll("\\$"+g,group);
61 }
62
63 return target;
64 }
65
66 /* ------------------------------------------------------------ */
67 /**
68 * Returns the replacement string.
69 */
70 public String toString()
71 {
72 return super.toString()+"["+_replacement+"]";
73 }
74 }