diff software/mpdl-services/mpiwg-mpdl-cms-web/src/de/mpg/mpiwg/berlin/mpdl/servlets/cms/GetDocInfo.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/GetDocInfo.java	Tue Nov 27 12:35:19 2012 +0100
@@ -0,0 +1,172 @@
+package de.mpg.mpiwg.berlin.mpdl.servlets.cms;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Date;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.FileUtils;
+
+import de.mpg.mpiwg.berlin.mpdl.cms.document.DocumentHandler;
+import de.mpg.mpiwg.berlin.mpdl.cms.document.MetadataRecord;
+import de.mpg.mpiwg.berlin.mpdl.cms.lucene.IndexHandler;
+import de.mpg.mpiwg.berlin.mpdl.cms.transform.TocTransformer;
+import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;
+import de.mpg.mpiwg.berlin.mpdl.util.Util;
+
+public class GetDocInfo extends HttpServlet {
+  private static final long serialVersionUID = 1L;
+  private TocTransformer tocTransformer;
+  
+  public GetDocInfo() {
+    super();
+  }
+
+  public void init(ServletConfig config) throws ServletException  {
+    super.init(config);
+    ServletContext context = getServletContext();
+    tocTransformer = (TocTransformer) context.getAttribute("tocTransformer");
+  }
+
+  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+    request.setCharacterEncoding("utf-8");
+    response.setCharacterEncoding("utf-8");
+    String docId = request.getParameter("docId");
+    String field = request.getParameter("field");
+    String outputFormat = request.getParameter("outputFormat");
+    if (outputFormat == null)
+      outputFormat = "xml";
+    String cssUrl = request.getParameter("cssUrl");
+    if (cssUrl == null) {
+      String baseUrl = getBaseUrl(request);
+      cssUrl = baseUrl + "/css/page.css";
+    }
+    try {
+      IndexHandler indexHandler = IndexHandler.getInstance();
+      MetadataRecord mdRecord = indexHandler.getDocMetadata(docId);
+      if (outputFormat.equals("xml"))
+        response.setContentType("text/xml");
+      else if (outputFormat.equals("html"))
+        response.setContentType("text/html");
+      PrintWriter out = response.getWriter();
+      if (mdRecord != null && outputFormat.equals("xml")) {
+        out.print("<doc>");
+        out.print("<id>" + docId + "</id>");
+        String identifier = mdRecord.getIdentifier();
+        if ((field == null || (field != null && field.equals("identifier"))) && identifier != null)
+          out.print("<identifier>" + identifier + "</identifier>");
+        String uri = mdRecord.getUri();
+        if ((field == null || (field != null && field.equals("uri"))) && uri != null)
+          out.print("<uri>" + uri + "</uri>");
+        String collectionNames = mdRecord.getCollectionNames();
+        if ((field == null || (field != null && field.equals("collectionNames"))) && collectionNames != null)
+          out.print("<collectionNames>" + collectionNames + "</collectionNames>");
+        String author = mdRecord.getCreator();
+        if ((field == null || (field != null && field.equals("author"))) && author != null)
+          out.print("<author>" + author + "</author>");
+        String title = mdRecord.getTitle();
+        if ((field == null || (field != null && field.equals("title"))) && title != null)
+          out.print("<title>" + title + "</title>");
+        String language = mdRecord.getLanguage();
+        if ((field == null || (field != null && field.equals("language"))) && language != null)
+          out.print("<language>" + language + "</language>");
+        String publisher = mdRecord.getPublisher();
+        if ((field == null || (field != null && field.equals("publisher"))) && publisher != null)
+          out.print("<publisher>" + publisher + "</publisher>");
+        String date = mdRecord.getYear();
+        if ((field == null || (field != null && field.equals("date"))) && date != null)
+          out.print("<date>" + date + "</date>");
+        String subject = mdRecord.getSubject();
+        if ((field == null || (field != null && field.equals("subject"))) && subject != null)
+          out.print("<subject>" + subject + "</subject>");
+        String rights = mdRecord.getRights();
+        if ((field == null || (field != null && field.equals("rights"))) && rights != null)
+          out.print("<rights>" + rights + "</rights>");
+        String license = mdRecord.getLicense();
+        if ((field == null || (field != null && field.equals("license"))) && license != null)
+          out.print("<license>" + license + "</license>");
+        String accessRights = mdRecord.getAccessRights();
+        if ((field == null || (field != null && field.equals("accessRights"))) && accessRights != null)
+          out.print("<accessRights>" + accessRights + "</accessRights>");
+        String echoId = mdRecord.getEchoId();
+        if ((field == null || (field != null && field.equals("echoId"))) && echoId != null)
+          out.print("<echoId>" + echoId + "</echoId>");
+        String echoPageImageDir = mdRecord.getEchoPageImageDir();
+        if ((field == null || (field != null && field.equals("echoPageImageDir"))) && echoPageImageDir != null)
+          out.print("<echoPageImageDir>" + echoPageImageDir + "</echoPageImageDir>");
+        String echoFiguresDir = mdRecord.getEchoFiguresDir();
+        if ((field == null || (field != null && field.equals("echoFiguresDir"))) && echoFiguresDir != null)
+          out.print("<echoFiguresDir>" + echoFiguresDir + "</echoFiguresDir>");
+        String mpiwgDocId = mdRecord.getMpiwgDocId();
+        if ((field == null || (field != null && field.equals("mpiwgDocId"))) && mpiwgDocId != null)
+          out.print("<mpiwgDocId>" + mpiwgDocId + "</mpiwgDocId>");
+        if (field == null || (field != null && ! field.equals("toc") && ! field.equals("figures") && ! field.equals("notes") && ! field.equals("notesHandwritten") && ! field.equals("pages") && ! field.equals("places")))
+          out.print("<system>");
+        int pageCount = mdRecord.getPageCount();
+        if (field == null || (field != null && field.equals("countPages")))
+          out.print("<countPages>" + pageCount + "</countPages>");
+        Date lastModified = mdRecord.getLastModified();
+        if ((field == null || (field != null && field.equals("lastModified"))) && lastModified != null) {
+          String lastModifiedStr = new Util().toXsDate(lastModified);
+          out.print("<lastModified>" + lastModifiedStr + "</lastModified>");
+        }
+        String schemaName = mdRecord.getSchemaName();
+        if ((field == null || (field != null && field.equals("schema"))) && schemaName != null)
+          out.print("<schema>" + schemaName + "</schema>");
+        if (field == null || (field != null && ! field.equals("toc") && ! field.equals("figures") && ! field.equals("notes") && ! field.equals("notesHandwritten") && ! field.equals("pages") && ! field.equals("places")))
+          out.print("</system>");
+        if (field != null && (field.equals("toc") || field.equals("figures") || field.equals("notes") || field.equals("notesHandwritten") || field.equals("pages") || field.equals("places"))) { 
+          DocumentHandler docHandler = new DocumentHandler();
+          String docDir = docHandler.getDocDir(docId);
+          String tocFileName = docDir + "/toc.xml";
+          File tocFile = new File(tocFileName);
+          String tocStr = FileUtils.readFileToString(tocFile, "utf-8");
+          String tocXmlStr = tocTransformer.transform(tocStr, field, outputFormat);
+          out.print(tocXmlStr);
+        }
+        out.print("</doc>");
+      } else if (mdRecord != null && outputFormat.equals("html")) {
+        if (field != null && (field.equals("toc") || field.equals("figures") || field.equals("notes") || field.equals("notesHandwritten") || field.equals("pages") || field.equals("places"))) { 
+          DocumentHandler docHandler = new DocumentHandler();
+          String docDir = docHandler.getDocDir(docId);
+          String tocFileName = docDir + "/toc.xml";
+          File tocFile = new File(tocFileName);
+          String tocStr = FileUtils.readFileToString(tocFile, "utf-8");
+          String tocHtmlStr = tocTransformer.transform(tocStr, field, outputFormat);
+          String title = docId + ", " + field;
+          String head = "<head><title>" + title + "</title><link rel=\"stylesheet\" type=\"text/css\" href=\"" + cssUrl + "\"/></head>";
+          String result = "<html>" + head + "<body>" + tocHtmlStr + "</body>" + "</html>";
+          out.print(result);
+        }
+      } else {
+        out.print("<result>" + "no document found with id: " + docId + "</result>");
+      }
+      out.close();
+    } catch (ApplicationException e) {
+      throw new ServletException(e);
+    }
+  }
+
+  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+    doGet(request, response);
+  }  
+
+  private String getBaseUrl(HttpServletRequest request) {
+    return getServerUrl(request) + request.getContextPath();
+  }
+
+  private String getServerUrl(HttpServletRequest request) {
+    if ( ( request.getServerPort() == 80 ) || ( request.getServerPort() == 443 ) )
+      return request.getScheme() + "://" + request.getServerName();
+    else
+      return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
+  }
+
+}