diff 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
line wrap: on
line diff
--- a/src/de/mpiwg/dwinter/fulltextSearchServer/ShowContentOfDocument.java	Wed Nov 03 12:18:46 2010 +0100
+++ b/src/de/mpiwg/dwinter/fulltextSearchServer/ShowContentOfDocument.java	Wed Jan 26 14:41:34 2011 +0100
@@ -24,8 +24,11 @@
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.log4j.Logger;
+import org.restlet.Request;
+import org.restlet.Response;
 import org.restlet.data.Form;
 import org.restlet.data.MediaType;
+import org.restlet.data.Reference;
 import org.restlet.data.Status;
 import org.restlet.representation.Representation;
 import org.restlet.representation.StringRepresentation;
@@ -35,6 +38,7 @@
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
+import de.mpiwg.dwinter.fulltext.search.xmlsearchadapter.XMLSearchServerAdapter;
 import de.mpiwg.dwinter.fulltext.ticket.TicketWriter;
 import de.mpiwg.dwinter.fulltextSearchServer.Utils.DigilibTools;
 import de.mpiwg.dwinter.fulltextSearchServer.Utils.XMLTools;
@@ -141,28 +145,28 @@
 		logger.debug("lang:"+lang);
 		logger.debug("textId:"+textId);
 		logger.debug("restpath:"+restPath);
-		String xml;
-		String txt;
+		String html;
+		
 		if (restPath.equals("")){
-			xml = showContent(ticket,lang,textId);
-			if (xml==null){
+			html = showContent(ticket,lang,textId);
+			if (html==null){
 				setStatus(Status.SUCCESS_ACCEPTED);
 				//still waiting
 				return new StringRepresentation("<dev>waiting</dev>",MediaType.TEXT_HTML);
 			}
-			txt = XMLTools.transformToHTML(xml,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/showContentOfDocumentToHTML.xsl");
+			html = XMLTools.transformToHTML(html,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/showContentOfDocumentToHTML.xsl");
 		} else {
-			xml = processRestPath(ticket,lang,textId,restPath);
-			if (xml==null){
+			html = processRestPath(ticket,lang,textId,restPath);
+			if (html==null){
 				setStatus(Status.SUCCESS_ACCEPTED);
 				//still waiting
 				return new StringRepresentation("<dev>waiting</dev>",MediaType.TEXT_HTML);
 			}
-			txt = XMLTools.transformToHTML(xml,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl");
+			
 			//txt=xml;
 		}
 		  
-          StringRepresentation representation = new StringRepresentation(txt, 
+          StringRepresentation representation = new StringRepresentation(html, 
      	            MediaType.TEXT_HTML) ;
           return representation;
     
@@ -224,13 +228,12 @@
 		xml=null;
 	}
 
-	return xml;
+	return XMLTools.transformToHTML(xml,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl");
    
 }
 
 /**
- * Rueckgabe der Treffer gemaess dem Darstellungsmode z.Z. wird nur digilib unterstuetzt, bzw. egal welcher 
- * Mode angegeben wird es wird immer das gleiche gemacht, naemlich ein Link auf Digilib ausgegeben.
+ * Rueckgabe der Treffer gemaess dem Darstellungsmode z.Z. wird nur digilib und generic unterstuetzt.
  * Der Pfad ist in DIGIVIEWBASICSTRING festgelegt.
  * @param ticket
  * @param lang
@@ -246,26 +249,42 @@
 		String ret="<xml xmlns:xlink=\"http://www.w3.org/1999/xlink\">";
 		ret+="<pageFileName>"+pageFileName+"</pageFileName>";
 		ArrayList<Double[]> points = new ArrayList<Double[]>();
-		
+	
 	
 	try {
 		String xml = TicketWriter.getHitsOnPage(ticket,lang,textId,pageFileName);
+		
 		Pattern linePattern = Pattern.compile("<line>(.*?)</line>",Pattern.MULTILINE);
 		Matcher m = linePattern.matcher(xml);
 		
-		while(m.find()){
-			Double[] point = DigilibTools.calculatePoint(m.group(1));
-			points.add(point);		
-		}
-		
-		String url = String.format(DigilibTools.DIGIVIEWBASICSTRING, DigilibTools.generateImagePath(textId,pageFileName),DigilibTools.generateMarksFromPoints(points));
+		// teste format des Restes wenn noch "/" dann Aufruf einer Seite direkt
 		
 		
-		ret+=String.format("<hitsOnPage xlink:href=\"%s\">%s</hitsOnPage>",url,textId);
-		ret+="</xml>";
+		if (mode.equals("digilib")){
 		
+		String txt=handleDigilib(textId, pageFileName, ret, points, m);
+		return XMLTools.transformToHTML(txt,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl");
+		}
+		else if (mode.equals("generic")){
+			if (m.find()){ // xmlfile ist fuer digilib ok, dann digilib
+				String txt = handleDigilib(textId, pageFileName, ret, points, m);
+				return XMLTools.transformToHTML(txt,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl");
+			} else {
+				//assume xml-treffer liste
+				
+				
+				String txt = handleXMLFullText(textId, pageFileName,ret, ticket, lang);
+				return XMLTools.transformToHTML(txt,"/de/mpiwg/dwinter/fulltextSearchServer/xsl/processRestPathOfDocumentToHTML.xsl");
+			}
+			
 		
-		return ret;
+		} else if (mode.equals("showXMLhits")){
+			//String txt="<html><head>"+
+			//"<base href=\""+XMLSearchServerAdapter.XMLServerBase+"\" />"+
+			//"</head><body>";
+			String txt= TicketWriter.getFileContent(ticket,lang,textId,pageFileName);
+			return txt; //+"</body></html>";
+		}
 	
 	
 	} catch (FileNotFoundException e) {
@@ -282,6 +301,50 @@
 
 
 
+protected String handleXMLFullText(String textId, String pageFileName, String ret, String ticket,
+		String lang) {
+	
+	try {
+		String[] morphquerySplitted=TicketWriter.getQueryString(lang,ticket).split(":");
+		//string has normally the format field:query
+		String morphQuery= morphquerySplitted[morphquerySplitted.length-1];
+		
+		String queryString = XMLSearchServerAdapter.XMLDocSearchBase + "document=" + textId.replace(":","/");
+		//queryString += "&queryType=fulltext&query=" + morphQuery;
+		queryString += "&amp;mode=text&amp;query-type=fulltext&amp;query=" + morphQuery;
+
+		ret+=String.format("<hitsOnPage xlink:href=\"%s\">%s</hitsOnPage>",queryString,textId);
+		ret+="</xml>";
+	} catch (FileNotFoundException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	} catch (IOException e) {
+		// TODO Auto-generated catch block
+		e.printStackTrace();
+	}
+	return ret;
+}
+
+protected String handleDigilib(String textId, String pageFileName, String ret,
+		ArrayList<Double[]> points, Matcher m) {
+	while(m.find()){
+		Double[] point = DigilibTools.calculatePoint(m.group(1));
+		points.add(point);		
+	}
+	
+	String url = String.format(DigilibTools.DIGIVIEWBASICSTRING, DigilibTools.generateImagePath(textId,pageFileName),DigilibTools.generateMarksFromPoints(points));
+	
+	
+	ret+=String.format("<hitsOnPage xlink:href=\"%s\">%s</hitsOnPage>",url,textId);
+	ret+="</xml>";
+	
+	
+	return ret;
+}
+
+
+
+