| 
0
 | 
     1 <%
 | 
| 
 | 
     2 package global.web;
 | 
| 
 | 
     3 
 | 
| 
 | 
     4 import fschmidt.util.java.HtmlUtils;
 | 
| 
 | 
     5 import fschmidt.util.servlet.JtpContext;
 | 
| 
 | 
     6 import global.HtmlGlobalUtils;
 | 
| 
 | 
     7 import global.Site;
 | 
| 
 | 
     8 import nabble.model.MessageUtils;
 | 
| 
 | 
     9 import nabble.model.NodeSearcher;
 | 
| 
 | 
    10 import nabble.view.lib.HtmlViewUtils;
 | 
| 
 | 
    11 import org.apache.lucene.search.IndexSearcher;
 | 
| 
 | 
    12 import org.apache.lucene.search.Query;
 | 
| 
 | 
    13 import org.apache.lucene.search.TopDocs;
 | 
| 
 | 
    14 
 | 
| 
 | 
    15 import javax.servlet.ServletException;
 | 
| 
 | 
    16 import javax.servlet.http.HttpServlet;
 | 
| 
 | 
    17 import javax.servlet.http.HttpServletRequest;
 | 
| 
 | 
    18 import javax.servlet.http.HttpServletResponse;
 | 
| 
 | 
    19 import java.io.IOException;
 | 
| 
 | 
    20 import java.io.PrintWriter;
 | 
| 
 | 
    21 
 | 
| 
 | 
    22 
 | 
| 
 | 
    23 public final class RootForums extends HttpServlet {
 | 
| 
 | 
    24 
 | 
| 
 | 
    25 	public static final int PAGES = 200;
 | 
| 
 | 
    26 	private static final int ROWS_PER_PAGE = 50;
 | 
| 
 | 
    27 
 | 
| 
 | 
    28 	static String path() {
 | 
| 
 | 
    29 		return path(1);
 | 
| 
 | 
    30 	}
 | 
| 
 | 
    31 
 | 
| 
 | 
    32 	static String path(int page) {
 | 
| 
 | 
    33 		return "/free-apps/page" + page + ".html";
 | 
| 
 | 
    34 	}
 | 
| 
 | 
    35 
 | 
| 
 | 
    36 	protected void service(HttpServletRequest request,HttpServletResponse response)
 | 
| 
 | 
    37 		throws ServletException, IOException
 | 
| 
 | 
    38 	{
 | 
| 
 | 
    39 		JtpContext jtpContext = (JtpContext)getServletContext().getAttribute(JtpContext.attrName);
 | 
| 
 | 
    40 		jtpContext.setEtag(request,response,"x");
 | 
| 
 | 
    41 
 | 
| 
 | 
    42 		PrintWriter out = response.getWriter();
 | 
| 
 | 
    43 
 | 
| 
 | 
    44 		String title = "Browse Apps";
 | 
| 
 | 
    45 
 | 
| 
 | 
    46 		String pageS = request.getParameter("page");
 | 
| 
 | 
    47 		int page = Integer.parseInt(pageS);
 | 
| 
 | 
    48 		int iRec = (page-1)*ROWS_PER_PAGE;
 | 
| 
 | 
    49 
 | 
| 
 | 
    50 		IndexSearcher searcher;
 | 
| 
 | 
    51 		TopDocs hits;
 | 
| 
 | 
    52 		try {
 | 
| 
 | 
    53 			searcher = new IndexSearcher(Site.dir());
 | 
| 
53
 | 
    54 			hits = searcher.search( Index.query, iRec+ROWS_PER_PAGE, Site.SORT_BY_ACTIVITY );
 | 
| 
0
 | 
    55 		} catch(IOException e) {
 | 
| 
 | 
    56 			throw new RuntimeException(e);
 | 
| 
 | 
    57 		}
 | 
| 
 | 
    58 		try {
 | 
| 
 | 
    59 			HtmlViewUtils.PagingPath pagingPath = new HtmlViewUtils.PagingPath() {
 | 
| 
 | 
    60 				public String path(int row) {
 | 
| 
 | 
    61 					return RootForums.path(1+row/ROWS_PER_PAGE);
 | 
| 
 | 
    62 				}
 | 
| 
 | 
    63 			};
 | 
| 
 | 
    64 
 | 
| 
 | 
    65 %>
 | 
| 
 | 
    66 <!DOCTYPE html>
 | 
| 
 | 
    67 <html lang="en">
 | 
| 
 | 
    68 	<head>
 | 
| 
 | 
    69 		<% HtmlGlobalUtils.head(request, response, title + " | Page " + page); %>
 | 
| 
 | 
    70 		<link rel="canonical" href="https://www.nabble.com<%=path(page)%>">
 | 
| 
 | 
    71 		<style>
 | 
| 
 | 
    72 			h2{margin-bottom:.2em}
 | 
| 
 | 
    73 			div[sites] > div{min-height:70px}
 | 
| 
 | 
    74 		</style>
 | 
| 
 | 
    75 	</head>
 | 
| 
 | 
    76 	<body lato>
 | 
| 
 | 
    77 		<% HtmlGlobalUtils.header(request,response); %>
 | 
| 
 | 
    78 		<div content center paddingTop>
 | 
| 
 | 
    79 			<h1 oswald><%=title%></h1>
 | 
| 
 | 
    80 		</div>
 | 
| 
 | 
    81 		<div gray content marginBottom>
 | 
| 
 | 
    82 			Page <%=page%> of <%=PAGES%>
 | 
| 
 | 
    83 			<% HtmlViewUtils.genericPaging(request, response, PAGES*ROWS_PER_PAGE, iRec, ROWS_PER_PAGE, pagingPath, "0 4em .5em", true, 10); %>
 | 
| 
 | 
    84 		</div>
 | 
| 
 | 
    85 		<div content paddingTop sites>
 | 
| 
 | 
    86 			<%
 | 
| 
 | 
    87 			for( int i = iRec; i<hits.scoreDocs.length; i++ ) {
 | 
| 
 | 
    88 				Site site = new Site(searcher.doc(hits.scoreDocs[i].doc));
 | 
| 
 | 
    89 				String message = site.message();
 | 
| 
 | 
    90 				message = MessageUtils.getTextWithoutQuotes(message);
 | 
| 
 | 
    91 				message = NodeSearcher.getStartingFragment(message,200,"...");
 | 
| 
 | 
    92 				message = MessageUtils.hideAllEmails(message);
 | 
| 
 | 
    93 				message = HtmlUtils.htmlEncode(message);
 | 
| 
 | 
    94 				String what = site.type();
 | 
| 
 | 
    95 				if (what == null || what.matches("mixed|category|board|null"))
 | 
| 
 | 
    96 					what = "forum";
 | 
| 
 | 
    97 				%>
 | 
| 
 | 
    98 					<div marginBottom>
 | 
| 
 | 
    99 						<h2><%=site.link()%></h2>
 | 
| 
 | 
   100 						<div gray>
 | 
| 
 | 
   101 							<%=message%>
 | 
| 
 | 
   102 						</div>
 | 
| 
 | 
   103 					</div>
 | 
| 
 | 
   104 				<%
 | 
| 
 | 
   105 			}
 | 
| 
 | 
   106 			%>
 | 
| 
 | 
   107 			<% HtmlViewUtils.genericPaging(request, response, PAGES*ROWS_PER_PAGE, iRec, ROWS_PER_PAGE, pagingPath, ".4em 4em", true, 10); %>
 | 
| 
 | 
   108 		</div>
 | 
| 
 | 
   109 		<% HtmlGlobalUtils.footer(request,response); %>
 | 
| 
 | 
   110 	</body>
 | 
| 
 | 
   111 </html>
 | 
| 
 | 
   112 <%
 | 
| 
 | 
   113 		} finally {
 | 
| 
 | 
   114 			searcher.close();
 | 
| 
 | 
   115 		}
 | 
| 
 | 
   116 	}
 | 
| 
 | 
   117 
 | 
| 
 | 
   118 }
 | 
| 
 | 
   119 %>
 |