source: nutchez-0.1/tomcat/work/Catalina/localhost/_/org/apache/jsp/search_jsp.java @ 66

Last change on this file since 66 was 66, checked in by waue, 15 years ago

NutchEz - an easy way to nutch

File size: 44.6 KB
Line 
1package org.apache.jsp;
2
3import javax.servlet.*;
4import javax.servlet.http.*;
5import javax.servlet.jsp.*;
6import java.io.*;
7import java.util.*;
8import java.net.*;
9import javax.servlet.http.*;
10import javax.servlet.*;
11import org.apache.nutch.html.Entities;
12import org.apache.nutch.metadata.Nutch;
13import org.apache.nutch.searcher.*;
14import org.apache.nutch.plugin.*;
15import org.apache.nutch.clustering.*;
16import org.apache.hadoop.conf.*;
17import org.apache.nutch.util.NutchConfiguration;
18
19public final class search_jsp extends org.apache.jasper.runtime.HttpJspBase
20    implements org.apache.jasper.runtime.JspSourceDependent {
21
22
23  /**
24   * Number of hits to retrieve and cluster if clustering extension is available
25   * and clustering is on. By default, 100. Configurable via nutch-conf.xml.
26   */
27  private int HITS_TO_CLUSTER;
28
29  /**
30   * Maximum hits per page to be displayed.
31   */
32  private int MAX_HITS_PER_PAGE;
33
34  /**
35   * An instance of the clustering extension, if available.
36   */
37  private OnlineClusterer clusterer;
38 
39  /**
40   * Nutch configuration for this servlet.
41   */
42  private Configuration nutchConf;
43
44  /**
45   * Initialize search bean.
46   */
47  public void jspInit() {
48    super.jspInit();
49   
50    final ServletContext application = getServletContext(); 
51    nutchConf = NutchConfiguration.get(application);
52    HITS_TO_CLUSTER = nutchConf.getInt("extension.clustering.hits-to-cluster", 100);
53    MAX_HITS_PER_PAGE = nutchConf.getInt("searcher.max.hits.per.page", -1);
54
55    try {
56      clusterer = new OnlineClustererFactory(nutchConf).getOnlineClusterer();
57    } catch (PluginRuntimeException e) {
58      super.log("Could not initialize online clusterer: " + e.toString());
59    }
60  }
61
62  private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
63
64  private static java.util.List _jspx_dependants;
65
66  static {
67    _jspx_dependants = new java.util.ArrayList(3);
68    _jspx_dependants.add("/WEB-INF/taglibs-i18n.tld");
69    _jspx_dependants.add("/more.jsp");
70    _jspx_dependants.add("/cluster.jsp");
71  }
72
73  private org.apache.jasper.runtime.TagHandlerPool _005fjspx_005ftagPool_005fi18n_005fbundle_0026_005fbaseName_005fnobody;
74  private org.apache.jasper.runtime.TagHandlerPool _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody;
75  private org.apache.jasper.runtime.TagHandlerPool _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey;
76  private org.apache.jasper.runtime.TagHandlerPool _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody;
77
78  private javax.el.ExpressionFactory _el_expressionfactory;
79  private org.apache.AnnotationProcessor _jsp_annotationprocessor;
80
81  public Object getDependants() {
82    return _jspx_dependants;
83  }
84
85  public void _jspInit() {
86    _005fjspx_005ftagPool_005fi18n_005fbundle_0026_005fbaseName_005fnobody = org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig());
87    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody = org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig());
88    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey = org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig());
89    _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody = org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig());
90    _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
91    _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
92  }
93
94  public void _jspDestroy() {
95    _005fjspx_005ftagPool_005fi18n_005fbundle_0026_005fbaseName_005fnobody.release();
96    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.release();
97    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey.release();
98    _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.release();
99  }
100
101  public void _jspService(HttpServletRequest request, HttpServletResponse response)
102        throws java.io.IOException, ServletException {
103
104    PageContext pageContext = null;
105    ServletContext application = null;
106    ServletConfig config = null;
107    JspWriter out = null;
108    Object page = this;
109    JspWriter _jspx_out = null;
110    PageContext _jspx_page_context = null;
111
112
113    try {
114      response.setContentType("text/html; charset=UTF-8");
115      pageContext = _jspxFactory.getPageContext(this, request, response,
116            null, false, 8192, true);
117      _jspx_page_context = pageContext;
118      application = pageContext.getServletContext();
119      config = pageContext.getServletConfig();
120      out = pageContext.getOut();
121      _jspx_out = out;
122
123      out.write('\n');
124      out.write('\n');
125      out.write('\n');
126      out.write('\n');
127      out.write('\n');
128
129  // The Nutch bean instance is initialized through a ServletContextListener
130  // that is setup in the web.xml file
131  NutchBean bean = NutchBean.get(application, nutchConf);
132  // set the character encoding to use when interpreting request values
133  request.setCharacterEncoding("UTF-8");
134
135  bean.LOG.info("query request from " + request.getRemoteAddr());
136
137  // get query from request
138  String queryString = request.getParameter("query");
139  if (queryString == null)
140    queryString = "";
141  String htmlQueryString = Entities.encode(queryString);
142 
143  // a flag to make the code cleaner a bit.
144  boolean clusteringAvailable = (clusterer != null);
145
146  String clustering = "";
147  if (clusteringAvailable && "yes".equals(request.getParameter("clustering")))
148    clustering = "yes";
149
150  int start = 0;          // first hit to display
151  String startString = request.getParameter("start");
152  if (startString != null)
153    start = Integer.parseInt(startString);
154
155  int hitsPerPage = 10;          // number of hits to display
156  String hitsString = request.getParameter("hitsPerPage");
157  if (hitsString != null)
158    hitsPerPage = Integer.parseInt(hitsString);
159  if(MAX_HITS_PER_PAGE > 0 && hitsPerPage > MAX_HITS_PER_PAGE)
160    hitsPerPage = MAX_HITS_PER_PAGE;
161
162  int hitsPerSite = 2;                            // max hits per site
163  String hitsPerSiteString = request.getParameter("hitsPerSite");
164  if (hitsPerSiteString != null)
165    hitsPerSite = Integer.parseInt(hitsPerSiteString);
166
167  String sort = request.getParameter("sort");
168  boolean reverse =
169    sort!=null && "true".equals(request.getParameter("reverse"));
170
171  String params = "&hitsPerPage="+hitsPerPage
172     +(sort==null ? "" : "&sort="+sort+(reverse?"&reverse=true":""));
173
174  int hitsToCluster = HITS_TO_CLUSTER;            // number of hits to cluster
175
176  // get the lang from request
177  String queryLang = request.getParameter("lang");
178  if (queryLang == null) { queryLang = ""; }
179  Query query = Query.parse(queryString, queryLang, nutchConf);
180  bean.LOG.info("query: " + queryString);
181  bean.LOG.info("lang: " + queryLang);
182
183  String language =
184    ResourceBundle.getBundle("org.nutch.jsp.search", request.getLocale())
185    .getLocale().getLanguage();
186  String requestURI = HttpUtils.getRequestURL(request).toString();
187  String base = requestURI.substring(0, requestURI.lastIndexOf('/'));
188  String rss = "../opensearch?query="+htmlQueryString
189    +"&hitsPerSite="+hitsPerSite+"&lang="+queryLang+params;
190
191      out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
192
193  // To prevent the character encoding declared with 'contentType' page
194  // directive from being overriden by JSTL (apache i18n), we freeze it
195  // by flushing the output buffer.
196  // see http://java.sun.com/developer/technicalArticles/Intl/MultilingualJSP/
197  out.flush();
198
199      out.write('\n');
200      out.write('\n');
201      if (_jspx_meth_i18n_005fbundle_005f0(_jspx_page_context))
202        return;
203      out.write("\n");
204      out.write("<html lang=\"");
205      out.print( language );
206      out.write("\">\n");
207      out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n");
208      out.write("<head>\n");
209      out.write("<title>Nutch: ");
210      if (_jspx_meth_i18n_005fmessage_005f0(_jspx_page_context))
211        return;
212      out.write("</title>\n");
213      out.write("<link rel=\"icon\" href=\"img/favicon.ico\" type=\"image/x-icon\"/>\n");
214      out.write("<link rel=\"shortcut icon\" href=\"img/favicon.ico\" type=\"image/x-icon\"/>\n");
215      out.write("<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"");
216      out.print(rss);
217      out.write("\"/>\n");
218      org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "include/style.html", out, false);
219      out.write("\n");
220      out.write("<base href=\"");
221      out.print( base  + "/" + language );
222      out.write("/\">\n");
223      out.write("<script type=\"text/javascript\">\n");
224      out.write("<!--\n");
225      out.write("function queryfocus() { document.search.query.focus(); }\n");
226      out.write("// -->\n");
227      out.write("</script>\n");
228      out.write("</head>\n");
229      out.write("\n");
230      out.write("<body onLoad=\"queryfocus();\">\n");
231      out.write("\n");
232      org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response,  language + "/include/header.html", out, false);
233      out.write("\n");
234      out.write("\n");
235      out.write(" <form name=\"search\" action=\"../search.jsp\" method=\"get\">\n");
236      out.write(" <input name=\"query\" size=44 value=\"");
237      out.print(htmlQueryString);
238      out.write("\">\n");
239      out.write(" <input type=\"hidden\" name=\"hitsPerPage\" value=\"");
240      out.print(hitsPerPage);
241      out.write("\">\n");
242      out.write(" <input type=\"hidden\" name=\"lang\" value=\"");
243      out.print(language);
244      out.write("\">\n");
245      out.write(" <input type=\"submit\" value=\"");
246      if (_jspx_meth_i18n_005fmessage_005f1(_jspx_page_context))
247        return;
248      out.write("\">\n");
249      out.write(" ");
250 if (clusteringAvailable) { 
251      out.write("\n");
252      out.write("   <input id=\"clustbox\" type=\"checkbox\" name=\"clustering\" value=\"yes\" ");
253 if (clustering.equals("yes")) { 
254      out.write("CHECKED");
255 } 
256      out.write(">\n");
257      out.write("    <label for=\"clustbox\">");
258      if (_jspx_meth_i18n_005fmessage_005f2(_jspx_page_context))
259        return;
260      out.write("</label>\n");
261      out.write(" ");
262 } 
263      out.write("\n");
264      out.write(" <a href=\"help.html\">help</a>\n");
265      out.write(" </form>\n");
266      out.write("\n");
267      out.write('\n');
268      out.write('\n');
269
270   // how many hits to retrieve? if clustering is on and available,
271   // take "hitsToCluster", otherwise just get hitsPerPage
272   int hitsToRetrieve = (clusteringAvailable && clustering.equals("yes") ? hitsToCluster : hitsPerPage);
273
274   if (clusteringAvailable && clustering.equals("yes")) {
275     bean.LOG.info("Clustering is on, hits to retrieve: " + hitsToRetrieve);
276   }
277
278   // perform query
279    // NOTE by Dawid Weiss:
280    // The 'clustering' window actually moves with the start
281    // position.... this is good, bad?... ugly?....
282   Hits hits;
283   try{
284     hits = bean.search(query, start + hitsToRetrieve, hitsPerSite, "site",
285                        sort, reverse);
286   } catch (IOException e){
287     hits = new Hits(0,new Hit[0]); 
288   }
289   int end = (int)Math.min(hits.getLength(), start + hitsPerPage);
290   int length = end-start;
291   int realEnd = (int)Math.min(hits.getLength(), start + hitsToRetrieve);
292
293   Hit[] show = hits.getHits(start, realEnd-start);
294   HitDetails[] details = bean.getDetails(show);
295   Summary[] summaries = bean.getSummary(details, query);
296   bean.LOG.info("total hits: " + hits.getTotal());
297
298      out.write('\n');
299      out.write('\n');
300      //  i18n:message
301      org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f3 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey.get(org.apache.taglibs.i18n.MessageTag.class);
302      _jspx_th_i18n_005fmessage_005f3.setPageContext(_jspx_page_context);
303      _jspx_th_i18n_005fmessage_005f3.setParent(null);
304      // /search.jsp(222,0) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
305      _jspx_th_i18n_005fmessage_005f3.setKey("hits");
306      int _jspx_eval_i18n_005fmessage_005f3 = _jspx_th_i18n_005fmessage_005f3.doStartTag();
307      if (_jspx_eval_i18n_005fmessage_005f3 != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {
308        if (_jspx_eval_i18n_005fmessage_005f3 != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) {
309          out = _jspx_page_context.pushBody();
310          _jspx_th_i18n_005fmessage_005f3.setBodyContent((javax.servlet.jsp.tagext.BodyContent) out);
311          _jspx_th_i18n_005fmessage_005f3.doInitBody();
312        }
313        do {
314          out.write('\n');
315          out.write(' ');
316          out.write(' ');
317          //  i18n:messageArg
318          org.apache.taglibs.i18n.MessageArgumentTag _jspx_th_i18n_005fmessageArg_005f0 = (org.apache.taglibs.i18n.MessageArgumentTag) _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.get(org.apache.taglibs.i18n.MessageArgumentTag.class);
319          _jspx_th_i18n_005fmessageArg_005f0.setPageContext(_jspx_page_context);
320          _jspx_th_i18n_005fmessageArg_005f0.setParent((javax.servlet.jsp.tagext.Tag) _jspx_th_i18n_005fmessage_005f3);
321          // /search.jsp(223,2) name = value type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
322          _jspx_th_i18n_005fmessageArg_005f0.setValue(new Long((end==0)?0:(start+1)));
323          int _jspx_eval_i18n_005fmessageArg_005f0 = _jspx_th_i18n_005fmessageArg_005f0.doStartTag();
324          if (_jspx_th_i18n_005fmessageArg_005f0.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
325            _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.reuse(_jspx_th_i18n_005fmessageArg_005f0);
326            return;
327          }
328          _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.reuse(_jspx_th_i18n_005fmessageArg_005f0);
329          out.write('\n');
330          out.write(' ');
331          out.write(' ');
332          //  i18n:messageArg
333          org.apache.taglibs.i18n.MessageArgumentTag _jspx_th_i18n_005fmessageArg_005f1 = (org.apache.taglibs.i18n.MessageArgumentTag) _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.get(org.apache.taglibs.i18n.MessageArgumentTag.class);
334          _jspx_th_i18n_005fmessageArg_005f1.setPageContext(_jspx_page_context);
335          _jspx_th_i18n_005fmessageArg_005f1.setParent((javax.servlet.jsp.tagext.Tag) _jspx_th_i18n_005fmessage_005f3);
336          // /search.jsp(224,2) name = value type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
337          _jspx_th_i18n_005fmessageArg_005f1.setValue(new Long(end));
338          int _jspx_eval_i18n_005fmessageArg_005f1 = _jspx_th_i18n_005fmessageArg_005f1.doStartTag();
339          if (_jspx_th_i18n_005fmessageArg_005f1.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
340            _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.reuse(_jspx_th_i18n_005fmessageArg_005f1);
341            return;
342          }
343          _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.reuse(_jspx_th_i18n_005fmessageArg_005f1);
344          out.write('\n');
345          out.write(' ');
346          out.write(' ');
347          //  i18n:messageArg
348          org.apache.taglibs.i18n.MessageArgumentTag _jspx_th_i18n_005fmessageArg_005f2 = (org.apache.taglibs.i18n.MessageArgumentTag) _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.get(org.apache.taglibs.i18n.MessageArgumentTag.class);
349          _jspx_th_i18n_005fmessageArg_005f2.setPageContext(_jspx_page_context);
350          _jspx_th_i18n_005fmessageArg_005f2.setParent((javax.servlet.jsp.tagext.Tag) _jspx_th_i18n_005fmessage_005f3);
351          // /search.jsp(225,2) name = value type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
352          _jspx_th_i18n_005fmessageArg_005f2.setValue(new Long(hits.getTotal()));
353          int _jspx_eval_i18n_005fmessageArg_005f2 = _jspx_th_i18n_005fmessageArg_005f2.doStartTag();
354          if (_jspx_th_i18n_005fmessageArg_005f2.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
355            _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.reuse(_jspx_th_i18n_005fmessageArg_005f2);
356            return;
357          }
358          _005fjspx_005ftagPool_005fi18n_005fmessageArg_0026_005fvalue_005fnobody.reuse(_jspx_th_i18n_005fmessageArg_005f2);
359          out.write('\n');
360          int evalDoAfterBody = _jspx_th_i18n_005fmessage_005f3.doAfterBody();
361          if (evalDoAfterBody != javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN)
362            break;
363        } while (true);
364        if (_jspx_eval_i18n_005fmessage_005f3 != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) {
365          out = _jspx_page_context.popBody();
366        }
367      }
368      if (_jspx_th_i18n_005fmessage_005f3.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
369        _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey.reuse(_jspx_th_i18n_005fmessage_005f3);
370        return;
371      }
372      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey.reuse(_jspx_th_i18n_005fmessage_005f3);
373      out.write('\n');
374      out.write('\n');
375
376// be responsive
377out.flush();
378
379      out.write("\n");
380      out.write("\n");
381      out.write("<br><br>\n");
382      out.write("\n");
383 if (clustering.equals("yes") && length != 0) { 
384      out.write("\n");
385      out.write("<table border=0 cellspacing=\"3\" cellpadding=\"0\">\n");
386      out.write("\n");
387      out.write("<tr>\n");
388      out.write("\n");
389      out.write("<td valign=\"top\">\n");
390      out.write("\n");
391 } 
392      out.write('\n');
393      out.write('\n');
394
395  for (int i = 0; i < length; i++) {      // display the hits
396    Hit hit = show[i];
397    HitDetails detail = details[i];
398    String title = detail.getValue("title");
399    String url = detail.getValue("url");
400    String id = "idx=" + hit.getIndexNo() + "&id=" + hit.getUniqueKey();
401    String summary = summaries[i].toHtml(true);
402    String caching = detail.getValue("cache");
403    boolean showSummary = true;
404    boolean showCached = true;
405    if (caching != null) {
406      showSummary = !caching.equals(Nutch.CACHING_FORBIDDEN_ALL);
407      showCached = !caching.equals(Nutch.CACHING_FORBIDDEN_NONE);
408    }
409
410    if (title == null || title.equals("")) {      // use url for docs w/o title
411      title = url;
412    }
413   
414      out.write("\n");
415      out.write("    <b><a href=\"");
416      out.print(url);
417      out.write('"');
418      out.write('>');
419      out.print(Entities.encode(title));
420      out.write("</a></b>\n");
421      out.write("    ");
422      out.write('\n');
423
424    // @author John Xing
425    // show meta info (currently type, size, date of last-modified)
426    // for each hit. These info are indexed by ./src/plugin/index-more.
427
428    // do not show unless we have something
429    boolean showMore = false;
430
431    // Content-Type
432    String primaryType = detail.getValue("primaryType");
433    String subType = detail.getValue("subType");
434
435    String contentType = subType;
436    if (contentType == null)
437      contentType = primaryType;
438    if (contentType != null) {
439      contentType = "[<span class=\"contentType\">" + contentType + "</span>]";
440      showMore = true;
441    } else {
442      contentType = "";
443    }
444
445    // Content-Length
446    String contentLength = detail.getValue("contentLength");
447    if (contentLength != null) {
448      contentLength = "(" + contentLength + " bytes)";
449      showMore = true;
450    } else {
451      contentLength = "";
452    }
453
454    // Last-Modified
455    String lastModified = detail.getValue("lastModified");
456    if (lastModified != null) {
457      Calendar cal = new GregorianCalendar();
458      cal.setTimeInMillis(new Long(lastModified).longValue());
459      lastModified = cal.get(Calendar.YEAR)
460                  + "." + (1+cal.get(Calendar.MONTH)) // it is 0-based
461                  + "." + cal.get(Calendar.DAY_OF_MONTH);
462      showMore = true;
463    } else {
464      lastModified = "";
465    }
466
467      out.write('\n');
468      out.write('\n');
469 if (showMore) {
470    if ("text".equalsIgnoreCase(primaryType)) { 
471      out.write("\n");
472      out.write("    <br><font size=-1><nobr>");
473      out.print(contentType);
474      out.write(' ');
475      out.print(contentLength);
476      out.write(' ');
477      out.print(lastModified);
478      out.write("</nobr></font>\n");
479  } else { 
480      out.write("\n");
481      out.write("    <br><font size=-1><nobr>");
482      out.print(contentType);
483      out.write(' ');
484      out.print(contentLength);
485      out.write(' ');
486      out.print(lastModified);
487      out.write(" - <a href=\"../text.jsp?");
488      out.print(id);
489      out.write('"');
490      out.write('>');
491      if (_jspx_meth_i18n_005fmessage_005f4(_jspx_page_context))
492        return;
493      out.write("</a></nobr></font>\n");
494  }
495  } 
496      out.write('\n');
497      out.write("\n");
498      out.write("    ");
499 if (!"".equals(summary) && showSummary) { 
500      out.write("\n");
501      out.write("    <br>");
502      out.print(summary);
503      out.write("\n");
504      out.write("    ");
505 } 
506      out.write("\n");
507      out.write("    <br>\n");
508      out.write("    <span class=\"url\">");
509      out.print(Entities.encode(url));
510      out.write("</span>\n");
511      out.write("    ");
512
513      if (showCached) {
514       
515      out.write("(<a href=\"../cached.jsp?");
516      out.print(id);
517      out.write('"');
518      out.write('>');
519      if (_jspx_meth_i18n_005fmessage_005f5(_jspx_page_context))
520        return;
521      out.write("</a>) ");
522
523    }
524   
525      out.write("\n");
526      out.write("    (<a href=\"../explain.jsp?");
527      out.print(id);
528      out.write("&query=");
529      out.print(URLEncoder.encode(queryString, "UTF-8"));
530      out.write("&lang=");
531      out.print(queryLang);
532      out.write('"');
533      out.write('>');
534      if (_jspx_meth_i18n_005fmessage_005f6(_jspx_page_context))
535        return;
536      out.write("</a>)\n");
537      out.write("    (<a href=\"../anchors.jsp?");
538      out.print(id);
539      out.write('"');
540      out.write('>');
541      if (_jspx_meth_i18n_005fmessage_005f7(_jspx_page_context))
542        return;
543      out.write("</a>)\n");
544      out.write("    ");
545 if (hit.moreFromDupExcluded()) {
546    String more =
547    "query="+URLEncoder.encode("site:"+hit.getDedupValue()+" "+queryString, "UTF8")
548    +params+"&hitsPerSite="+0
549    +"&lang="+queryLang
550    +"&clustering="+clustering;
551      out.write("\n");
552      out.write("    (<a href=\"../search.jsp?");
553      out.print(more);
554      out.write('"');
555      out.write('>');
556      if (_jspx_meth_i18n_005fmessage_005f8(_jspx_page_context))
557        return;
558      out.write("\n");
559      out.write("     ");
560      out.print(hit.getDedupValue());
561      out.write("</a>)\n");
562      out.write("    ");
563 } 
564      out.write("\n");
565      out.write("    <br><br>\n");
566 } 
567      out.write('\n');
568      out.write('\n');
569 if (clustering.equals("yes") && length != 0) { 
570      out.write("\n");
571      out.write("\n");
572      out.write("</td>\n");
573      out.write("\n");
574      out.write("<!-- clusters -->\n");
575      out.write("<td style=\"border-right: 1px dotted gray;\" />&#160;</td>\n");
576      out.write("<td align=\"left\" valign=\"top\" width=\"25%\">\n");
577      out.write('\n');
578
579
580// @author Dawid Weiss
581//
582// PERFORMANCE/USER INTERFACE NOTE:
583//
584// What I do here is merely a demonstration. In real life the clustering
585// process should be done in a separate "processing" stream, most likely
586// a separate HTML frame that the user's browser requests data to.
587// We don't want the user to wait with plain snippets until the clusters
588// are created.
589//
590// Also: clustering is resource consuming, so a cache of recent queries
591// would be in place. Besides, such cache would also be beneficial for the
592// purpose of re-querying existing clusters (remember that the
593// clustering extension may be a heuristic returning a DIFFERENT set of
594// clusters for an identical input).
595// See www.vivisimo.com for details of how this can be done using frames, or
596// http://carrot.cs.put.poznan.pl for an example of a Javascript solution.
597
598// cluster the hits
599HitsCluster [] clusters = null;
600if (clusterer != null) {
601  final long clusteringStart = System.currentTimeMillis();
602  try {
603    clusters = clusterer.clusterHits( details, Summary.toStrings(summaries) );
604    final long clusteringDuration = System.currentTimeMillis() - clusteringStart;
605    bean.LOG.info("Clustering took: " + clusteringDuration + " milliseconds.");
606  } catch (Exception e) {
607    // failed to do clustering (see below)
608  }
609}
610
611if (clusterer == null) {
612 
613      out.write("No clustering extension found.");
614
615} else {
616  if (clusters == null) {
617   
618      out.write("Unable to do clustering.");
619
620  } else if (clusters.length == 0) {
621   
622      out.write("No clusters found.");
623
624  } else {
625    // display top N clusters and top Q documents inside them.
626    int N = 10;
627    int Q = 3;
628    int maxLabels = 2;
629   
630    int displayCounter = 0;
631    N = Math.min(N, clusters.length );
632
633    for (int clusterIndex = 0 ; clusterIndex < N ; clusterIndex++) {
634      HitsCluster cluster = clusters[ clusterIndex ];
635      String [] clusterLabels = cluster.getDescriptionLabels();
636     
637      // probably leave it on for now
638      //if (cluster.isJunkCluster()) continue;
639
640      // output cluster label.
641     
642      out.write("<div style=\"margin: 0px; padding: 0px; font-weight: bold;\">");
643
644      for (int k=0;k<maxLabels && k<clusterLabels.length;k++) {
645        if (k>0) out.print(", ");
646        out.print( Entities.encode(clusterLabels[k]) );
647      }
648     
649      out.write("</div>");
650
651       
652      // now output sample documents from the inside
653      HitDetails[] documents = cluster.getHits();
654      if (documents.length > 0) {
655       
656      out.write("<ul style=\"font-size: 90%; margin-top: .5em;\">");
657
658        for (int k = 0; k < Q && k < documents.length; k++) {
659          HitDetails detail = documents[ k ];
660          String title = detail.getValue("title");
661          String url = detail.getValue("url");
662          if (title == null || title.equals("")) title = url;
663          if (title.length() > 35) title = title.substring(0,35) + "...";
664         
665      out.write("\n");
666      out.write("            <li><a href=\"");
667      out.print(url);
668      out.write('"');
669      out.write('>');
670      out.print( Entities.encode(title) );
671      out.write("</a></li>\n");
672      out.write("          ");
673
674        }
675       
676      out.write("</ul>");
677
678      }
679       
680      // ignore subclusters for now, ALTHOUGH HIERARCHICAL CLUSTERING
681      // METHODS DO EXIST AND ARE VERY USEFUL
682      // HitsCluster [] subclusters = cluster.getSubclusters();
683    }
684  }
685}
686
687
688      out.write('\n');
689      out.write("\n");
690      out.write("</td>\n");
691      out.write("\n");
692      out.write("</tr>\n");
693      out.write("</table>\n");
694      out.write("\n");
695 } 
696      out.write('\n');
697      out.write('\n');
698
699
700if ((hits.totalIsExact() && end < hits.getTotal()) // more hits to show
701    || (!hits.totalIsExact() && (hits.getLength() > start+hitsPerPage))) {
702
703      out.write("\n");
704      out.write("    <form name=\"next\" action=\"../search.jsp\" method=\"get\">\n");
705      out.write("    <input type=\"hidden\" name=\"query\" value=\"");
706      out.print(htmlQueryString);
707      out.write("\">\n");
708      out.write("    <input type=\"hidden\" name=\"lang\" value=\"");
709      out.print(queryLang);
710      out.write("\">\n");
711      out.write("    <input type=\"hidden\" name=\"start\" value=\"");
712      out.print(end);
713      out.write("\">\n");
714      out.write("    <input type=\"hidden\" name=\"hitsPerPage\" value=\"");
715      out.print(hitsPerPage);
716      out.write("\">\n");
717      out.write("    <input type=\"hidden\" name=\"hitsPerSite\" value=\"");
718      out.print(hitsPerSite);
719      out.write("\">\n");
720      out.write("    <input type=\"hidden\" name=\"clustering\" value=\"");
721      out.print(clustering);
722      out.write("\">\n");
723      out.write("    <input type=\"submit\" value=\"");
724      if (_jspx_meth_i18n_005fmessage_005f9(_jspx_page_context))
725        return;
726      out.write('"');
727      out.write('>');
728      out.write('\n');
729 if (sort != null) { 
730      out.write("\n");
731      out.write("    <input type=\"hidden\" name=\"sort\" value=\"");
732      out.print(sort);
733      out.write("\">\n");
734      out.write("    <input type=\"hidden\" name=\"reverse\" value=\"");
735      out.print(reverse);
736      out.write('"');
737      out.write('>');
738      out.write('\n');
739 } 
740      out.write("\n");
741      out.write("    </form>\n");
742
743    }
744
745if ((!hits.totalIsExact() && (hits.getLength() <= start+hitsPerPage))) {
746
747      out.write("\n");
748      out.write("    <form name=\"showAllHits\" action=\"../search.jsp\" method=\"get\">\n");
749      out.write("    <input type=\"hidden\" name=\"query\" value=\"");
750      out.print(htmlQueryString);
751      out.write("\">\n");
752      out.write("    <input type=\"hidden\" name=\"lang\" value=\"");
753      out.print(queryLang);
754      out.write("\">\n");
755      out.write("    <input type=\"hidden\" name=\"hitsPerPage\" value=\"");
756      out.print(hitsPerPage);
757      out.write("\">\n");
758      out.write("    <input type=\"hidden\" name=\"hitsPerSite\" value=\"0\">\n");
759      out.write("    <input type=\"hidden\" name=\"clustering\" value=\"");
760      out.print(clustering);
761      out.write("\">\n");
762      out.write("    <input type=\"submit\" value=\"");
763      if (_jspx_meth_i18n_005fmessage_005f10(_jspx_page_context))
764        return;
765      out.write('"');
766      out.write('>');
767      out.write('\n');
768 if (sort != null) { 
769      out.write("\n");
770      out.write("    <input type=\"hidden\" name=\"sort\" value=\"");
771      out.print(sort);
772      out.write("\">\n");
773      out.write("    <input type=\"hidden\" name=\"reverse\" value=\"");
774      out.print(reverse);
775      out.write('"');
776      out.write('>');
777      out.write('\n');
778 } 
779      out.write("\n");
780      out.write("    </form>\n");
781
782    }
783
784      out.write("\n");
785      out.write("\n");
786      out.write("<table bgcolor=\"3333ff\" align=\"right\">\n");
787      out.write("<tr><td bgcolor=\"ff9900\"><a href=\"");
788      out.print(rss);
789      out.write("\"><font color=\"ffffff\"><b>RSS</b>\n");
790      out.write("</font></a></td></tr>\n");
791      out.write("</table>\n");
792      out.write("\n");
793      out.write("<p>\n");
794      out.write("<a href=\"http://wiki.apache.org/nutch/FAQ\">\n");
795      out.write("<img border=\"0\" src=\"../img/poweredbynutch_01.gif\">\n");
796      out.write("</a>\n");
797      out.write("\n");
798      org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/include/footer.html", out, false);
799      out.write("\n");
800      out.write("\n");
801      out.write("</body>\n");
802      out.write("</html>\n");
803    } catch (Throwable t) {
804      if (!(t instanceof SkipPageException)){
805        out = _jspx_out;
806        if (out != null && out.getBufferSize() != 0)
807          try { out.clearBuffer(); } catch (java.io.IOException e) {}
808        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
809      }
810    } finally {
811      _jspxFactory.releasePageContext(_jspx_page_context);
812    }
813  }
814
815  private boolean _jspx_meth_i18n_005fbundle_005f0(PageContext _jspx_page_context)
816          throws Throwable {
817    PageContext pageContext = _jspx_page_context;
818    JspWriter out = _jspx_page_context.getOut();
819    //  i18n:bundle
820    org.apache.taglibs.i18n.BundleTag _jspx_th_i18n_005fbundle_005f0 = (org.apache.taglibs.i18n.BundleTag) _005fjspx_005ftagPool_005fi18n_005fbundle_0026_005fbaseName_005fnobody.get(org.apache.taglibs.i18n.BundleTag.class);
821    _jspx_th_i18n_005fbundle_005f0.setPageContext(_jspx_page_context);
822    _jspx_th_i18n_005fbundle_005f0.setParent(null);
823    // /search.jsp(153,0) name = baseName type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
824    _jspx_th_i18n_005fbundle_005f0.setBaseName("org.nutch.jsp.search");
825    int _jspx_eval_i18n_005fbundle_005f0 = _jspx_th_i18n_005fbundle_005f0.doStartTag();
826    if (_jspx_th_i18n_005fbundle_005f0.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
827      _005fjspx_005ftagPool_005fi18n_005fbundle_0026_005fbaseName_005fnobody.reuse(_jspx_th_i18n_005fbundle_005f0);
828      return true;
829    }
830    _005fjspx_005ftagPool_005fi18n_005fbundle_0026_005fbaseName_005fnobody.reuse(_jspx_th_i18n_005fbundle_005f0);
831    return false;
832  }
833
834  private boolean _jspx_meth_i18n_005fmessage_005f0(PageContext _jspx_page_context)
835          throws Throwable {
836    PageContext pageContext = _jspx_page_context;
837    JspWriter out = _jspx_page_context.getOut();
838    //  i18n:message
839    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f0 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
840    _jspx_th_i18n_005fmessage_005f0.setPageContext(_jspx_page_context);
841    _jspx_th_i18n_005fmessage_005f0.setParent(null);
842    // /search.jsp(157,14) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
843    _jspx_th_i18n_005fmessage_005f0.setKey("title");
844    int _jspx_eval_i18n_005fmessage_005f0 = _jspx_th_i18n_005fmessage_005f0.doStartTag();
845    if (_jspx_th_i18n_005fmessage_005f0.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
846      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f0);
847      return true;
848    }
849    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f0);
850    return false;
851  }
852
853  private boolean _jspx_meth_i18n_005fmessage_005f1(PageContext _jspx_page_context)
854          throws Throwable {
855    PageContext pageContext = _jspx_page_context;
856    JspWriter out = _jspx_page_context.getOut();
857    //  i18n:message
858    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f1 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
859    _jspx_th_i18n_005fmessage_005f1.setPageContext(_jspx_page_context);
860    _jspx_th_i18n_005fmessage_005f1.setParent(null);
861    // /search.jsp(178,29) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
862    _jspx_th_i18n_005fmessage_005f1.setKey("search");
863    int _jspx_eval_i18n_005fmessage_005f1 = _jspx_th_i18n_005fmessage_005f1.doStartTag();
864    if (_jspx_th_i18n_005fmessage_005f1.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
865      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f1);
866      return true;
867    }
868    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f1);
869    return false;
870  }
871
872  private boolean _jspx_meth_i18n_005fmessage_005f2(PageContext _jspx_page_context)
873          throws Throwable {
874    PageContext pageContext = _jspx_page_context;
875    JspWriter out = _jspx_page_context.getOut();
876    //  i18n:message
877    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f2 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
878    _jspx_th_i18n_005fmessage_005f2.setPageContext(_jspx_page_context);
879    _jspx_th_i18n_005fmessage_005f2.setParent(null);
880    // /search.jsp(181,26) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
881    _jspx_th_i18n_005fmessage_005f2.setKey("clustering");
882    int _jspx_eval_i18n_005fmessage_005f2 = _jspx_th_i18n_005fmessage_005f2.doStartTag();
883    if (_jspx_th_i18n_005fmessage_005f2.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
884      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f2);
885      return true;
886    }
887    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f2);
888    return false;
889  }
890
891  private boolean _jspx_meth_i18n_005fmessage_005f4(PageContext _jspx_page_context)
892          throws Throwable {
893    PageContext pageContext = _jspx_page_context;
894    JspWriter out = _jspx_page_context.getOut();
895    //  i18n:message
896    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f4 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
897    _jspx_th_i18n_005fmessage_005f4.setPageContext(_jspx_page_context);
898    _jspx_th_i18n_005fmessage_005f4.setParent(null);
899    // /more.jsp(66,114) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
900    _jspx_th_i18n_005fmessage_005f4.setKey("viewAsText");
901    int _jspx_eval_i18n_005fmessage_005f4 = _jspx_th_i18n_005fmessage_005f4.doStartTag();
902    if (_jspx_th_i18n_005fmessage_005f4.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
903      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f4);
904      return true;
905    }
906    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f4);
907    return false;
908  }
909
910  private boolean _jspx_meth_i18n_005fmessage_005f5(PageContext _jspx_page_context)
911          throws Throwable {
912    PageContext pageContext = _jspx_page_context;
913    JspWriter out = _jspx_page_context.getOut();
914    //  i18n:message
915    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f5 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
916    _jspx_th_i18n_005fmessage_005f5.setPageContext(_jspx_page_context);
917    _jspx_th_i18n_005fmessage_005f5.setParent(null);
918    // /search.jsp(273,43) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
919    _jspx_th_i18n_005fmessage_005f5.setKey("cached");
920    int _jspx_eval_i18n_005fmessage_005f5 = _jspx_th_i18n_005fmessage_005f5.doStartTag();
921    if (_jspx_th_i18n_005fmessage_005f5.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
922      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f5);
923      return true;
924    }
925    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f5);
926    return false;
927  }
928
929  private boolean _jspx_meth_i18n_005fmessage_005f6(PageContext _jspx_page_context)
930          throws Throwable {
931    PageContext pageContext = _jspx_page_context;
932    JspWriter out = _jspx_page_context.getOut();
933    //  i18n:message
934    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f6 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
935    _jspx_th_i18n_005fmessage_005f6.setPageContext(_jspx_page_context);
936    _jspx_th_i18n_005fmessage_005f6.setParent(null);
937    // /search.jsp(276,109) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
938    _jspx_th_i18n_005fmessage_005f6.setKey("explain");
939    int _jspx_eval_i18n_005fmessage_005f6 = _jspx_th_i18n_005fmessage_005f6.doStartTag();
940    if (_jspx_th_i18n_005fmessage_005f6.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
941      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f6);
942      return true;
943    }
944    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f6);
945    return false;
946  }
947
948  private boolean _jspx_meth_i18n_005fmessage_005f7(PageContext _jspx_page_context)
949          throws Throwable {
950    PageContext pageContext = _jspx_page_context;
951    JspWriter out = _jspx_page_context.getOut();
952    //  i18n:message
953    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f7 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
954    _jspx_th_i18n_005fmessage_005f7.setPageContext(_jspx_page_context);
955    _jspx_th_i18n_005fmessage_005f7.setParent(null);
956    // /search.jsp(277,38) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
957    _jspx_th_i18n_005fmessage_005f7.setKey("anchors");
958    int _jspx_eval_i18n_005fmessage_005f7 = _jspx_th_i18n_005fmessage_005f7.doStartTag();
959    if (_jspx_th_i18n_005fmessage_005f7.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
960      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f7);
961      return true;
962    }
963    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f7);
964    return false;
965  }
966
967  private boolean _jspx_meth_i18n_005fmessage_005f8(PageContext _jspx_page_context)
968          throws Throwable {
969    PageContext pageContext = _jspx_page_context;
970    JspWriter out = _jspx_page_context.getOut();
971    //  i18n:message
972    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f8 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
973    _jspx_th_i18n_005fmessage_005f8.setPageContext(_jspx_page_context);
974    _jspx_th_i18n_005fmessage_005f8.setParent(null);
975    // /search.jsp(284,39) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
976    _jspx_th_i18n_005fmessage_005f8.setKey("moreFrom");
977    int _jspx_eval_i18n_005fmessage_005f8 = _jspx_th_i18n_005fmessage_005f8.doStartTag();
978    if (_jspx_th_i18n_005fmessage_005f8.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
979      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f8);
980      return true;
981    }
982    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f8);
983    return false;
984  }
985
986  private boolean _jspx_meth_i18n_005fmessage_005f9(PageContext _jspx_page_context)
987          throws Throwable {
988    PageContext pageContext = _jspx_page_context;
989    JspWriter out = _jspx_page_context.getOut();
990    //  i18n:message
991    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f9 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
992    _jspx_th_i18n_005fmessage_005f9.setPageContext(_jspx_page_context);
993    _jspx_th_i18n_005fmessage_005f9.setParent(null);
994    // /search.jsp(317,32) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
995    _jspx_th_i18n_005fmessage_005f9.setKey("next");
996    int _jspx_eval_i18n_005fmessage_005f9 = _jspx_th_i18n_005fmessage_005f9.doStartTag();
997    if (_jspx_th_i18n_005fmessage_005f9.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
998      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f9);
999      return true;
1000    }
1001    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f9);
1002    return false;
1003  }
1004
1005  private boolean _jspx_meth_i18n_005fmessage_005f10(PageContext _jspx_page_context)
1006          throws Throwable {
1007    PageContext pageContext = _jspx_page_context;
1008    JspWriter out = _jspx_page_context.getOut();
1009    //  i18n:message
1010    org.apache.taglibs.i18n.MessageTag _jspx_th_i18n_005fmessage_005f10 = (org.apache.taglibs.i18n.MessageTag) _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.get(org.apache.taglibs.i18n.MessageTag.class);
1011    _jspx_th_i18n_005fmessage_005f10.setPageContext(_jspx_page_context);
1012    _jspx_th_i18n_005fmessage_005f10.setParent(null);
1013    // /search.jsp(334,32) name = key type = null reqTime = true required = true fragment = false deferredValue = false expectedTypeName = null deferredMethod = false methodSignature = null
1014    _jspx_th_i18n_005fmessage_005f10.setKey("showAllHits");
1015    int _jspx_eval_i18n_005fmessage_005f10 = _jspx_th_i18n_005fmessage_005f10.doStartTag();
1016    if (_jspx_th_i18n_005fmessage_005f10.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) {
1017      _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f10);
1018      return true;
1019    }
1020    _005fjspx_005ftagPool_005fi18n_005fmessage_0026_005fkey_005fnobody.reuse(_jspx_th_i18n_005fmessage_005f10);
1021    return false;
1022  }
1023}
Note: See TracBrowser for help on using the repository browser.