Mercurial > hg > mpdl-group
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 } |