comparison software/mpdl-services-new/mpiwg-mpdl-cms-web/src/de/mpg/mpiwg/berlin/mpdl/servlets/cms/GetDocInfo.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
comparison
equal deleted inserted replaced
23:e845310098ba 25:e9fe3186670c
1 package de.mpg.mpiwg.berlin.mpdl.servlets.cms;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.io.PrintWriter;
6 import java.util.Date;
7
8 import javax.servlet.ServletConfig;
9 import javax.servlet.ServletContext;
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 import org.apache.commons.io.FileUtils;
16
17 import de.mpg.mpiwg.berlin.mpdl.cms.document.DocumentHandler;
18 import de.mpg.mpiwg.berlin.mpdl.cms.document.MetadataRecord;
19 import de.mpg.mpiwg.berlin.mpdl.cms.lucene.IndexHandler;
20 import de.mpg.mpiwg.berlin.mpdl.cms.transform.TocTransformer;
21 import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;
22 import de.mpg.mpiwg.berlin.mpdl.util.Util;
23
24 public class GetDocInfo extends HttpServlet {
25 private static final long serialVersionUID = 1L;
26 private TocTransformer tocTransformer;
27
28 public GetDocInfo() {
29 super();
30 }
31
32 public void init(ServletConfig config) throws ServletException {
33 super.init(config);
34 ServletContext context = getServletContext();
35 tocTransformer = (TocTransformer) context.getAttribute("tocTransformer");
36 }
37
38 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
39 request.setCharacterEncoding("utf-8");
40 response.setCharacterEncoding("utf-8");
41 String docId = request.getParameter("docId");
42 String field = request.getParameter("field");
43 String outputFormat = request.getParameter("outputFormat");
44 if (outputFormat == null)
45 outputFormat = "xml";
46 String cssUrl = request.getParameter("cssUrl");
47 if (cssUrl == null) {
48 String baseUrl = getBaseUrl(request);
49 cssUrl = baseUrl + "/css/page.css";
50 }
51 try {
52 IndexHandler indexHandler = IndexHandler.getInstance();
53 MetadataRecord mdRecord = indexHandler.getDocMetadata(docId);
54 if (outputFormat.equals("xml"))
55 response.setContentType("text/xml");
56 else if (outputFormat.equals("html"))
57 response.setContentType("text/html");
58 PrintWriter out = response.getWriter();
59 if (mdRecord != null && outputFormat.equals("xml")) {
60 out.print("<doc>");
61 out.print("<id>" + docId + "</id>");
62 String identifier = mdRecord.getIdentifier();
63 if ((field == null || (field != null && field.equals("identifier"))) && identifier != null)
64 out.print("<identifier>" + identifier + "</identifier>");
65 String uri = mdRecord.getUri();
66 if ((field == null || (field != null && field.equals("uri"))) && uri != null)
67 out.print("<uri>" + uri + "</uri>");
68 String collectionNames = mdRecord.getCollectionNames();
69 if ((field == null || (field != null && field.equals("collectionNames"))) && collectionNames != null)
70 out.print("<collectionNames>" + collectionNames + "</collectionNames>");
71 String author = mdRecord.getCreator();
72 if ((field == null || (field != null && field.equals("author"))) && author != null)
73 out.print("<author>" + author + "</author>");
74 String title = mdRecord.getTitle();
75 if ((field == null || (field != null && field.equals("title"))) && title != null)
76 out.print("<title>" + title + "</title>");
77 String language = mdRecord.getLanguage();
78 if ((field == null || (field != null && field.equals("language"))) && language != null)
79 out.print("<language>" + language + "</language>");
80 String publisher = mdRecord.getPublisher();
81 if ((field == null || (field != null && field.equals("publisher"))) && publisher != null)
82 out.print("<publisher>" + publisher + "</publisher>");
83 String date = mdRecord.getYear();
84 if ((field == null || (field != null && field.equals("date"))) && date != null)
85 out.print("<date>" + date + "</date>");
86 String subject = mdRecord.getSubject();
87 if ((field == null || (field != null && field.equals("subject"))) && subject != null)
88 out.print("<subject>" + subject + "</subject>");
89 String rights = mdRecord.getRights();
90 if ((field == null || (field != null && field.equals("rights"))) && rights != null)
91 out.print("<rights>" + rights + "</rights>");
92 String license = mdRecord.getLicense();
93 if ((field == null || (field != null && field.equals("license"))) && license != null)
94 out.print("<license>" + license + "</license>");
95 String accessRights = mdRecord.getAccessRights();
96 if ((field == null || (field != null && field.equals("accessRights"))) && accessRights != null)
97 out.print("<accessRights>" + accessRights + "</accessRights>");
98 String echoId = mdRecord.getEchoId();
99 if ((field == null || (field != null && field.equals("echoId"))) && echoId != null)
100 out.print("<echoId>" + echoId + "</echoId>");
101 String echoPageImageDir = mdRecord.getEchoPageImageDir();
102 if ((field == null || (field != null && field.equals("echoPageImageDir"))) && echoPageImageDir != null)
103 out.print("<echoPageImageDir>" + echoPageImageDir + "</echoPageImageDir>");
104 String echoFiguresDir = mdRecord.getEchoFiguresDir();
105 if ((field == null || (field != null && field.equals("echoFiguresDir"))) && echoFiguresDir != null)
106 out.print("<echoFiguresDir>" + echoFiguresDir + "</echoFiguresDir>");
107 String mpiwgDocId = mdRecord.getMpiwgDocId();
108 if ((field == null || (field != null && field.equals("mpiwgDocId"))) && mpiwgDocId != null)
109 out.print("<mpiwgDocId>" + mpiwgDocId + "</mpiwgDocId>");
110 if (field == null || (field != null && ! field.equals("toc") && ! field.equals("figures") && ! field.equals("notes") && ! field.equals("notesHandwritten") && ! field.equals("pages") && ! field.equals("places")))
111 out.print("<system>");
112 int pageCount = mdRecord.getPageCount();
113 if (field == null || (field != null && field.equals("countPages")))
114 out.print("<countPages>" + pageCount + "</countPages>");
115 DocumentHandler docHandler = new DocumentHandler();
116 String docDir = docHandler.getDocDir(docId);
117 String tocFileName = docDir + "/toc.xml";
118 File tocFile = new File(tocFileName);
119 String tocStr = FileUtils.readFileToString(tocFile, "utf-8");
120 String tocCount = getTocCount(tocStr, "toc");
121 out.print("<countTocEntries>" + tocCount + "</countTocEntries>");
122 String figuresCount = getTocCount(tocStr, "figures");
123 out.print("<countFigures>" + figuresCount + "</countFigures>");
124 String notesCount = getTocCount(tocStr, "notes");
125 out.print("<countNotes>" + notesCount + "</countNotes>");
126 String notesHandwrittenCount = getTocCount(tocStr, "notesHandwritten");
127 out.print("<countNotesHandwritten>" + notesHandwrittenCount + "</countNotesHandwritten>");
128 String placesCount = getTocCount(tocStr, "places");
129 out.print("<countPlaces>" + placesCount + "</countPlaces>");
130 Date lastModified = mdRecord.getLastModified();
131 if ((field == null || (field != null && field.equals("lastModified"))) && lastModified != null) {
132 String lastModifiedStr = new Util().toXsDate(lastModified);
133 out.print("<lastModified>" + lastModifiedStr + "</lastModified>");
134 }
135 String schemaName = mdRecord.getSchemaName();
136 if ((field == null || (field != null && field.equals("schema"))) && schemaName != null)
137 out.print("<schema>" + schemaName + "</schema>");
138 if (field == null || (field != null && ! field.equals("toc") && ! field.equals("figures") && ! field.equals("notes") && ! field.equals("notesHandwritten") && ! field.equals("pages") && ! field.equals("places")))
139 out.print("</system>");
140 if (field != null && (field.equals("toc") || field.equals("figures") || field.equals("notes") || field.equals("notesHandwritten") || field.equals("pages") || field.equals("places"))) {
141 String tocXmlStr = tocTransformer.transform(tocStr, field, outputFormat);
142 out.print(tocXmlStr);
143 }
144 out.print("</doc>");
145 } else if (mdRecord != null && outputFormat.equals("html")) {
146 if (field != null && (field.equals("toc") || field.equals("figures") || field.equals("notes") || field.equals("notesHandwritten") || field.equals("pages") || field.equals("places"))) {
147 DocumentHandler docHandler = new DocumentHandler();
148 String docDir = docHandler.getDocDir(docId);
149 String tocFileName = docDir + "/toc.xml";
150 File tocFile = new File(tocFileName);
151 String tocStr = FileUtils.readFileToString(tocFile, "utf-8");
152 String tocHtmlStr = tocTransformer.transform(tocStr, field, outputFormat);
153 String title = docId + ", " + field;
154 String head = "<head><title>" + title + "</title><link rel=\"stylesheet\" type=\"text/css\" href=\"" + cssUrl + "\"/></head>";
155 String result = "<html>" + head + "<body>" + tocHtmlStr + "</body>" + "</html>";
156 out.print(result);
157 }
158 } else {
159 out.print("<result>" + "no document found with id: " + docId + "</result>");
160 }
161 out.close();
162 } catch (ApplicationException e) {
163 throw new ServletException(e);
164 }
165 }
166
167 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
168 doGet(request, response);
169 }
170
171 private String getBaseUrl(HttpServletRequest request) {
172 return getServerUrl(request) + request.getContextPath();
173 }
174
175 private String getServerUrl(HttpServletRequest request) {
176 if ( ( request.getServerPort() == 80 ) || ( request.getServerPort() == 443 ) )
177 return request.getScheme() + "://" + request.getServerName();
178 else
179 return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
180 }
181
182 private String getTocCount(String tocStr, String type) {
183 String tocCount = "0";
184 if (tocStr == null)
185 return "0";
186 String listTypeStr = "<list type=\"" + type + "\" count=\"";
187 int from = tocStr.indexOf(listTypeStr);
188 if (from != -1) {
189 from = from + listTypeStr.length();
190 int to = tocStr.indexOf("\"", from);
191 tocCount = tocStr.substring(from, to);
192 }
193 return tocCount;
194 }
195 }