1 31 package org.blojsom.plugin.xpath; 32 33 import org.apache.commons.jxpath.JXPathContext; 34 import org.apache.commons.logging.Log; 35 import org.apache.commons.logging.LogFactory; 36 import org.blojsom.blog.Entry; 37 import org.blojsom.blog.Blog; 38 import org.blojsom.plugin.PluginException; 39 import org.blojsom.plugin.search.SimpleSearchPlugin; 40 41 import javax.servlet.http.HttpServletRequest ; 42 import javax.servlet.http.HttpServletResponse ; 43 import java.util.ArrayList ; 44 import java.util.Iterator ; 45 import java.util.List ; 46 import java.util.Map ; 47 48 56 public class XPathSearchPlugin extends SimpleSearchPlugin { 57 58 private Log _logger = LogFactory.getLog(XPathSearchPlugin.class); 59 60 71 public Entry[] process(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Blog blog, Map context, Entry[] entries) throws PluginException { 72 Entry[] results; 73 74 String query = httpServletRequest.getParameter(QUERY_PARAM); 75 76 if (query != null) { 77 query = query.trim(); 78 if (query.startsWith("/")) { 79 if (_logger.isDebugEnabled()) { 80 _logger.debug("Attempting xpath query with: " + query); 81 } 82 83 EntryWrapper entryWrapper = new EntryWrapper(entries); 84 List foundEntries = new ArrayList (); 85 JXPathContext xpathcontext = JXPathContext.newContext(entryWrapper); 86 try { 87 Iterator entryIterator = xpathcontext.iterate(query); 88 while (entryIterator.hasNext()) { 89 Object object = entryIterator.next(); 90 Entry entry = (Entry) object; 91 foundEntries.add(entry); 92 } 93 } catch (Exception e) { 94 if (_logger.isErrorEnabled()) { 95 _logger.error(e); 96 } 97 } 98 99 if (foundEntries.size() == 0) { 100 results = new Entry[0]; 101 } else { 102 results = new Entry[foundEntries.size()]; 103 for (int x = 0; x < foundEntries.size(); x++) { 104 results[x] = (Entry) foundEntries.get(x); 105 } 106 } 107 } else { 108 results = super.process(httpServletRequest, httpServletResponse, blog, context, entries); 109 } 110 } else { 111 results = entries; 112 } 113 114 return results; 115 } 116 } 117 | Popular Tags |