comparison src/de/mpiwg/dwinter/fulltextSearchServer/ShowContentOfDocument.java @ 1:83e9a828e794

Version mit integrierter Suche ?ber XML-Volltexte
author dwinter
date Wed, 26 Jan 2011 14:41:34 +0100
parents db87c1b7eb6d
children eef69274ef15
comparison
equal deleted inserted replaced
0:db87c1b7eb6d 1:83e9a828e794
22 import javax.xml.transform.dom.DOMSource; 22 import javax.xml.transform.dom.DOMSource;
23 import javax.xml.transform.stream.StreamResult; 23 import javax.xml.transform.stream.StreamResult;
24 import javax.xml.transform.stream.StreamSource; 24 import javax.xml.transform.stream.StreamSource;
25 25
26 import org.apache.log4j.Logger; 26 import org.apache.log4j.Logger;
27 import org.restlet.Request;
28 import org.restlet.Response;
27 import org.restlet.data.Form; 29 import org.restlet.data.Form;
28 import org.restlet.data.MediaType; 30 import org.restlet.data.MediaType;
31 import org.restlet.data.Reference;
29 import org.restlet.data.Status; 32 import org.restlet.data.Status;
30 import org.restlet.representation.Representation; 33 import org.restlet.representation.Representation;
31 import org.restlet.representation.StringRepresentation; 34 import org.restlet.representation.StringRepresentation;
32 import org.restlet.resource.Get; 35 import org.restlet.resource.Get;
33 import org.restlet.resource.Options; 36 import org.restlet.resource.Options;
34 import org.restlet.resource.ServerResource; 37 import org.restlet.resource.ServerResource;
35 import org.w3c.dom.Document; 38 import org.w3c.dom.Document;
36 import org.xml.sax.SAXException; 39 import org.xml.sax.SAXException;
37 40
41 import de.mpiwg.dwinter.fulltext.search.xmlsearchadapter.XMLSearchServerAdapter;
38 import de.mpiwg.dwinter.fulltext.ticket.TicketWriter; 42 import de.mpiwg.dwinter.fulltext.ticket.TicketWriter;
39 import de.mpiwg.dwinter.fulltextSearchServer.Utils.DigilibTools; 43 import de.mpiwg.dwinter.fulltextSearchServer.Utils.DigilibTools;
40 import de.mpiwg.dwinter.fulltextSearchServer.Utils.XMLTools; 44 import de.mpiwg.dwinter.fulltextSearchServer.Utils.XMLTools;
41 45
42 /** 46 /**
139 String restPath = getRequest().getResourceRef().getRemainingPart(); 143 String restPath = getRequest().getResourceRef().getRemainingPart();
140 logger.debug("ticket:"+ticket); 144 logger.debug("ticket:"+ticket);
141 logger.debug("lang:"+lang); 145 logger.debug("lang:"+lang);
142 logger.debug("textId:"+textId); 146 logger.debug("textId:"+textId);
143 logger.debug("restpath:"+restPath); 147 logger.debug("restpath:"+restPath);
144 String xml; 148 String html;
145 String txt; 149
146 if (restPath.equals("")){ 150 if (restPath.equals("")){
147 xml = showContent(ticket,lang,textId); 151 html = showContent(ticket,lang,textId);
148 if (xml==null){ 152 if (html==null){
149 setStatus(Status.SUCCESS_ACCEPTED); 153 setStatus(Status.SUCCESS_ACCEPTED);
150 //still waiting 154 //still waiting
151 return new StringRepresentation("<dev>waiting</dev>",MediaType.TEXT_HTML); 155 return new StringRepresentation("<dev>waiting</dev>",MediaType.TEXT_HTML);
152 } 156 }
153 txt = XMLTools.transformToHTML(xml,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/showContentOfDocumentToHTML.xsl"); 157 html = XMLTools.transformToHTML(html,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/showContentOfDocumentToHTML.xsl");
154 } else { 158 } else {
155 xml = processRestPath(ticket,lang,textId,restPath); 159 html = processRestPath(ticket,lang,textId,restPath);
156 if (xml==null){ 160 if (html==null){
157 setStatus(Status.SUCCESS_ACCEPTED); 161 setStatus(Status.SUCCESS_ACCEPTED);
158 //still waiting 162 //still waiting
159 return new StringRepresentation("<dev>waiting</dev>",MediaType.TEXT_HTML); 163 return new StringRepresentation("<dev>waiting</dev>",MediaType.TEXT_HTML);
160 } 164 }
161 txt = XMLTools.transformToHTML(xml,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl"); 165
162 //txt=xml; 166 //txt=xml;
163 } 167 }
164 168
165 StringRepresentation representation = new StringRepresentation(txt, 169 StringRepresentation representation = new StringRepresentation(html,
166 MediaType.TEXT_HTML) ; 170 MediaType.TEXT_HTML) ;
167 return representation; 171 return representation;
168 172
169 } 173 }
170 174
222 // TODO Auto-generated catch block 226 // TODO Auto-generated catch block
223 e.printStackTrace(); 227 e.printStackTrace();
224 xml=null; 228 xml=null;
225 } 229 }
226 230
227 return xml; 231 return XMLTools.transformToHTML(xml,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl");
228 232
229 } 233 }
230 234
231 /** 235 /**
232 * Rueckgabe der Treffer gemaess dem Darstellungsmode z.Z. wird nur digilib unterstuetzt, bzw. egal welcher 236 * Rueckgabe der Treffer gemaess dem Darstellungsmode z.Z. wird nur digilib und generic unterstuetzt.
233 * Mode angegeben wird es wird immer das gleiche gemacht, naemlich ein Link auf Digilib ausgegeben.
234 * Der Pfad ist in DIGIVIEWBASICSTRING festgelegt. 237 * Der Pfad ist in DIGIVIEWBASICSTRING festgelegt.
235 * @param ticket 238 * @param ticket
236 * @param lang 239 * @param lang
237 * @param textId 240 * @param textId
238 * @param pageFileName 241 * @param pageFileName
244 247
245 logger.debug("processRestWithMode"); 248 logger.debug("processRestWithMode");
246 String ret="<xml xmlns:xlink=\"http://www.w3.org/1999/xlink\">"; 249 String ret="<xml xmlns:xlink=\"http://www.w3.org/1999/xlink\">";
247 ret+="<pageFileName>"+pageFileName+"</pageFileName>"; 250 ret+="<pageFileName>"+pageFileName+"</pageFileName>";
248 ArrayList<Double[]> points = new ArrayList<Double[]>(); 251 ArrayList<Double[]> points = new ArrayList<Double[]>();
249 252
250 253
251 try { 254 try {
252 String xml = TicketWriter.getHitsOnPage(ticket,lang,textId,pageFileName); 255 String xml = TicketWriter.getHitsOnPage(ticket,lang,textId,pageFileName);
256
253 Pattern linePattern = Pattern.compile("<line>(.*?)</line>",Pattern.MULTILINE); 257 Pattern linePattern = Pattern.compile("<line>(.*?)</line>",Pattern.MULTILINE);
254 Matcher m = linePattern.matcher(xml); 258 Matcher m = linePattern.matcher(xml);
255 259
256 while(m.find()){ 260 // teste format des Restes wenn noch "/" dann Aufruf einer Seite direkt
257 Double[] point = DigilibTools.calculatePoint(m.group(1)); 261
258 points.add(point); 262
263 if (mode.equals("digilib")){
264
265 String txt=handleDigilib(textId, pageFileName, ret, points, m);
266 return XMLTools.transformToHTML(txt,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl");
259 } 267 }
260 268 else if (mode.equals("generic")){
261 String url = String.format(DigilibTools.DIGIVIEWBASICSTRING, DigilibTools.generateImagePath(textId,pageFileName),DigilibTools.generateMarksFromPoints(points)); 269 if (m.find()){ // xmlfile ist fuer digilib ok, dann digilib
262 270 String txt = handleDigilib(textId, pageFileName, ret, points, m);
263 271 return XMLTools.transformToHTML(txt,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl");
264 ret+=String.format("<hitsOnPage xlink:href=\"%s\">%s</hitsOnPage>",url,textId); 272 } else {
273 //assume xml-treffer liste
274
275
276 String txt = handleXMLFullText(textId, pageFileName,ret, ticket, lang);
277 return XMLTools.transformToHTML(txt,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl");
278 }
279
280
281 } else if (mode.equals("showXMLhits")){
282 //String txt="<html><head>"+
283 //"<base href=\""+XMLSearchServerAdapter.XMLServerBase+"\" />"+
284 //"</head><body>";
285 String txt= TicketWriter.getFileContent(ticket,lang,textId,pageFileName);
286 return txt; //+"</body></html>";
287 }
288
289
290 } catch (FileNotFoundException e) {
291 // TODO Auto-generated catch block
292 e.printStackTrace();
293 } catch (IOException e) {
294 // TODO Auto-generated catch block
295 e.printStackTrace();
296 }
297
298 return null;
299 }
300
301
302
303
304 protected String handleXMLFullText(String textId, String pageFileName, String ret, String ticket,
305 String lang) {
306
307 try {
308 String[] morphquerySplitted=TicketWriter.getQueryString(lang,ticket).split(":");
309 //string has normally the format field:query
310 String morphQuery= morphquerySplitted[morphquerySplitted.length-1];
311
312 String queryString = XMLSearchServerAdapter.XMLDocSearchBase + "document=" + textId.replace(":","/");
313 //queryString += "&queryType=fulltext&query=" + morphQuery;
314 queryString += "&amp;mode=text&amp;query-type=fulltext&amp;query=" + morphQuery;
315
316 ret+=String.format("<hitsOnPage xlink:href=\"%s\">%s</hitsOnPage>",queryString,textId);
265 ret+="</xml>"; 317 ret+="</xml>";
266
267
268 return ret;
269
270
271 } catch (FileNotFoundException e) { 318 } catch (FileNotFoundException e) {
272 // TODO Auto-generated catch block 319 // TODO Auto-generated catch block
273 e.printStackTrace(); 320 e.printStackTrace();
274 } catch (IOException e) { 321 } catch (IOException e) {
275 // TODO Auto-generated catch block 322 // TODO Auto-generated catch block
276 e.printStackTrace(); 323 e.printStackTrace();
277 } 324 }
278 325 return ret;
279 return null; 326 }
327
328 protected String handleDigilib(String textId, String pageFileName, String ret,
329 ArrayList<Double[]> points, Matcher m) {
330 while(m.find()){
331 Double[] point = DigilibTools.calculatePoint(m.group(1));
332 points.add(point);
333 }
334
335 String url = String.format(DigilibTools.DIGIVIEWBASICSTRING, DigilibTools.generateImagePath(textId,pageFileName),DigilibTools.generateMarksFromPoints(points));
336
337
338 ret+=String.format("<hitsOnPage xlink:href=\"%s\">%s</hitsOnPage>",url,textId);
339 ret+="</xml>";
340
341
342 return ret;
280 } 343 }
281 344
282 345
283 346
284 347