1 23 24 package org.continuent.sequoia.controller.backend.rewriting; 25 26 33 public class ReplaceAllRewritingRule extends AbstractRewritingRule 34 { 35 36 39 public String rewrite(String sqlQuery) 40 { 41 int start; 43 if (isCaseSensitive) 44 start = sqlQuery.indexOf(queryPattern); 45 else 46 start = sqlQuery.toLowerCase().indexOf(queryPattern.toLowerCase()); 47 if (start == -1) 48 { hasMatched = false; 50 return sqlQuery; 51 } 52 hasMatched = true; 54 55 return replace(sqlQuery, queryPattern, rewrite); 56 } 57 58 67 public ReplaceAllRewritingRule(String queryPattern, String rewrite, 68 boolean caseSensitive, boolean stopOnMatch) 69 { 70 super(queryPattern, rewrite, caseSensitive, stopOnMatch); 71 } 72 73 private static String replace(String s, String oldText, String newText) 74 { 75 final int oldLength = oldText.length(); 76 final int newLength = newText.length(); 77 78 if (oldLength == 0) 79 throw new IllegalArgumentException ("cannot replace the empty string"); 80 81 if (oldText.equals(newText)) 82 return s; 83 84 int i = 0; 85 int x = 0; 86 87 StringBuffer sb = new StringBuffer (s); 88 89 while ((i = sb.indexOf(oldText, x)) > -1) 90 { 91 sb.delete(i, i + oldLength); 92 sb.insert(i, newText); 93 x = i + newLength; 94 } 95 96 return sb.toString(); 97 } 98 } | Popular Tags |