Mercurial > hg > mpdl-group
view software/mpdl-services-new/mpiwg-mpdl-cms-web/src/de/mpg/mpiwg/berlin/mpdl/servlets/cms/MoreLikeThis.java @ 25:e9fe3186670c default tip
letzter Stand eingecheckt
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 21 May 2013 10:19:32 +0200 |
parents | |
children |
line wrap: on
line source
package de.mpg.mpiwg.berlin.mpdl.servlets.cms; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.lucene.document.Fieldable; import de.mpg.mpiwg.berlin.mpdl.cms.document.Document; import de.mpg.mpiwg.berlin.mpdl.cms.document.Hits; import de.mpg.mpiwg.berlin.mpdl.cms.lucene.IndexHandler; public class MoreLikeThis extends HttpServlet { private static final long serialVersionUID = 1L; public MoreLikeThis() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String outputFormat = request.getParameter("outputFormat"); if (outputFormat == null) outputFormat = "html"; String docId = request.getParameter("docId"); String pageStr = request.getParameter("page"); if (pageStr == null) pageStr = "1"; int page = Integer.parseInt(pageStr); String pageSizeStr = request.getParameter("pageSize"); if (pageSizeStr == null) pageSizeStr = "10"; int pageSize = Integer.parseInt(pageSizeStr); int from = (page * pageSize) - pageSize; // e.g. 0 int to = page * pageSize - 1; // e.g. 9 PrintWriter out = response.getWriter(); IndexHandler indexHandler; try { Date begin = new Date(); indexHandler = IndexHandler.getInstance(); Hits hits = indexHandler.moreLikeThis(docId, from, to); ArrayList<Document> docs = null; if (hits != null) docs = hits.getHits(); int hitsSize = -1; int docsSize = -1; if (hits != null) hitsSize = hits.getSize(); if (docs != null) docsSize = docs.size(); Date end = new Date(); long elapsedTime = end.getTime() - begin.getTime(); if (outputFormat.equals("xml")) response.setContentType("text/xml"); else if (outputFormat.equals("html")) response.setContentType("text/html"); else response.setContentType("text/xml"); if (outputFormat.equals("xml")) { out.print("<result>"); out.print("<query>"); out.print("<docId>" + docId + "</docId>"); out.print("<resultPage>" + page + "</resultPage>"); out.print("<resultPageSize>" + pageSize + "</resultPageSize>"); out.print("</query>"); out.print("<hitsSize>" + hitsSize + "</hitsSize>"); out.print("<hits>"); for (int i=0; i<docsSize; i++) { Document doc = docs.get(i); out.print("<doc>"); String similarDocId = doc.getFieldable("docId").stringValue(); out.print("<docId>" + similarDocId + "</docId>"); Fieldable docCollectionNamesField = doc.getFieldable("collectionNames"); if (docCollectionNamesField != null) { String docCollectionNames = docCollectionNamesField.stringValue(); out.print("<collectionName>" + docCollectionNames + "</collectionName>"); } ArrayList<String> hitFragments = doc.getHitFragments(); if (hitFragments != null) { out.print("<hitFragments>"); for (int j=0; j<hitFragments.size(); j++) { String hitFragment = hitFragments.get(j); out.print("<hitFragment>" + hitFragment + "</hitFragment>"); } out.print("</hitFragments>"); } out.print("</doc>"); } out.print("</hits>"); out.print("<executionTime>" + elapsedTime + "</executionTime>"); out.print("</result>"); } else if (outputFormat.equals("html")) { StringBuilder htmlStrBuilder = new StringBuilder(); htmlStrBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"); htmlStrBuilder.append("<html>"); htmlStrBuilder.append("<head>"); htmlStrBuilder.append("<title>Similar documents of: " + docId + "</title>"); htmlStrBuilder.append("</head>"); htmlStrBuilder.append("<body>"); htmlStrBuilder.append("<h4>Similar documents of: " + docId + "</h4>"); int fromDisplay = from + 1; int toDisplay = to + 1; if (hitsSize < to) toDisplay = hitsSize; htmlStrBuilder.append("Result: " + fromDisplay + " - " + toDisplay + " of " + hitsSize + " documents" + "</td>"); htmlStrBuilder.append("<ul>"); for (int i=0; i<docsSize; i++) { Document doc = docs.get(i); String similarDocId = doc.getFieldable("docId").stringValue(); int num = (page - 1) * pageSize + i + 1; htmlStrBuilder.append("<li>" + num + ". " + similarDocId + "</li>"); } htmlStrBuilder.append("</ul>"); htmlStrBuilder.append("<p/>"); htmlStrBuilder.append("Elapsed time: " + elapsedTime + " ms"); htmlStrBuilder.append("</body>"); htmlStrBuilder.append("</html>"); out.print(htmlStrBuilder.toString()); } out.close(); } catch (Exception e) { throw new ServletException(e); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }