1 10 package org.mmbase.util.transformers; 11 12 import java.util.*; 13 import java.util.regex.Pattern ; 14 import java.net.URL ; 15 16 import org.mmbase.util.Entry; 17 18 import org.mmbase.util.functions.*; 19 import org.mmbase.util.logging.*; 20 21 35 36 public class GoogleHighlighterFactory implements ParameterizedTransformerFactory { 37 private static final Logger log = Logging.getLoggerInstance(GoogleHighlighterFactory.class); 38 39 private static final Parameter[] PARAM = new Parameter[] { 40 new Parameter("format", String .class, "<span class=\"google\">$1</span>"), 41 new Parameter("host", String .class, "google"), 42 Parameter.REQUEST, 43 }; 44 45 public Transformer createTransformer(final Parameters parameters) { 46 parameters.checkRequiredParameters(); 47 if (log.isDebugEnabled()) { 48 log.debug("Creating transformer, with " + parameters); 49 } 50 URL referrer; 51 String referer = ((javax.servlet.http.HttpServletRequest ) parameters.get(Parameter.REQUEST)).getHeader("Referer"); 52 if (referer == null) return CopyCharTransformer.INSTANCE; 53 54 try { 55 referrer = new URL (referer); 56 } catch (java.net.MalformedURLException mfue) { 57 log.warn(mfue.getMessage() + " for '" + referer + "'", mfue); 58 return CopyCharTransformer.INSTANCE; 59 } 60 log.debug("Using referrer " + referrer); 61 if (referrer.getHost().indexOf((String ) parameters.get("host")) == -1) { log.debug("Wrong host, returning COPY"); 64 return CopyCharTransformer.INSTANCE; 65 } 66 String queryString = referrer.getQuery(); 67 if (queryString == null) { 68 log.debug("No query, returning COPY"); 70 return CopyCharTransformer.INSTANCE; 71 } 72 String [] query = queryString.split("&"); 73 74 String s = null; 75 for (int i = 0; i < query.length; i++) { 76 String q = query[i]; 77 if (q.startsWith("q=")) { 78 try { 79 s = java.net.URLDecoder.decode(q.substring(2), "UTF-8"); 80 } catch (java.io.UnsupportedEncodingException uee) { s = q.substring(2); 82 } 83 break; 84 } 85 } 86 if (s == null) { 87 log.debug("No search, returning COPY"); 89 return CopyCharTransformer.INSTANCE; 90 } 91 final String search = s; 92 log.debug("Using search " + search); 93 94 RegexpReplacer trans = new RegexpReplacer() { 95 private Collection patterns = new ArrayList(); 96 { 97 Pattern p = Pattern.compile("(" + search.replace('+', '|') + ")"); 98 patterns.add(new Entry(p, parameters.get("format"))); 99 } 100 public Collection getPatterns() { 101 return patterns; 102 } 103 }; 104 if (log.isDebugEnabled()) { 105 log.debug("Using google transformer " + trans); 106 } 107 return trans; 108 109 } 110 public Parameters createParameters() { 111 return new Parameters(PARAM); 112 } 113 114 } 115 | Popular Tags |