Mercurial > hg > mpdl-group
diff software/mpdl-services/mpiwg-mpdl-cms-web/src/de/mpg/mpiwg/berlin/mpdl/servlets/cms/MoreLikeThis.java @ 23:e845310098ba
diverse Korrekturen
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 27 Nov 2012 12:35:19 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/software/mpdl-services/mpiwg-mpdl-cms-web/src/de/mpg/mpiwg/berlin/mpdl/servlets/cms/MoreLikeThis.java Tue Nov 27 12:35:19 2012 +0100 @@ -0,0 +1,140 @@ +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 + } + +}