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
+  }
+
+}