Mercurial > hg > fulltextSearchServer
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 += "&mode=text&query-type=fulltext&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 |
