source: documentViewer/MpdlXmlTextServer.py @ 449:6c11f3ec8698

Last change on this file since 449:6c11f3ec8698 was 449:6c11f3ec8698, checked in by abukhman, 13 years ago

* empty log message *

File size: 26.3 KB
Line 
1
2from OFS.SimpleItem import SimpleItem
3from Products.PageTemplates.PageTemplateFile import PageTemplateFile
4from Ft.Xml import EMPTY_NAMESPACE, Parse
5from Ft.Xml.Domlette import NonvalidatingReader
6
7import md5
8import sys
9import logging
10import urllib
11import documentViewer
12from documentViewer import getTextFromNode, serializeNode
13
14class MpdlXmlTextServer(SimpleItem):
15    """TextServer implementation for MPDL-XML eXist server"""
16    meta_type="MPDL-XML TextServer"
17
18    manage_options=(
19        {'label':'Config','action':'manage_changeMpdlXmlTextServerForm'},
20       )+SimpleItem.manage_options
21   
22    manage_changeMpdlXmlTextServerForm = PageTemplateFile("zpt/manage_changeMpdlXmlTextServer", globals())
23       
24    def __init__(self,id,title="",serverUrl="http://mpdl-test.mpiwg-berlin.mpg.de/mpdl/interface/", serverName=None, timeout=40):
25    #def __init__(self,id,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de:30030/mpdl/interface/", serverName=None, timeout=40):   
26       
27        """constructor"""
28        self.id=id
29        self.title=title
30        self.timeout = timeout
31        if serverName is None:
32            self.serverUrl = serverUrl
33        else:
34            self.serverUrl = "http://%s/mpdl/interface/"%serverName
35       
36    def getHttpData(self, url, data=None):
37        """returns result from url+data HTTP request"""
38        return documentViewer.getHttpData(url,data,timeout=self.timeout)
39   
40    def getServerData(self, method, data=None):
41        """returns result from text server for method+data"""
42        url = self.serverUrl+method
43        return documentViewer.getHttpData(url,data,timeout=self.timeout)
44
45    def getSearch(self, pageinfo=None,  docinfo=None):
46        """get search list"""
47        docpath = docinfo['textURLPath'] 
48        url = docinfo['url']
49        pagesize = pageinfo['queryPageSize']
50        pn = pageinfo.get('searchPN',1)
51        #sn = pageinfo['sn']
52        s = pageinfo['s']
53        highlightElementPos =pageinfo ['highlightElementPos']
54        highlightElement = pageinfo ['highlightElement']
55       
56        highlightQuery = pageinfo['highlightQuery']
57        query =pageinfo['query']
58        queryType =pageinfo['queryType']
59        viewMode=  pageinfo['viewMode']
60        tocMode = pageinfo['tocMode']
61        characterNormalization = pageinfo['characterNormalization']
62        #optionToggle = pageinfo['optionToggle']
63        tocPN = pageinfo['tocPN']
64        selfurl = self.absolute_url()
65        data = self.getServerData("doc-query.xql","document=%s&mode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&s=%s&viewMode=%s&characterNormalization=%s&highlightElementPos=%s&highlightElement=%s&highlightQuery=%s"%(docpath, 'text', queryType, urllib.quote(query), pagesize, pn, s, viewMode,characterNormalization, highlightElementPos, highlightElement, urllib.quote(highlightQuery)))
66        #data = self.getServerData("doc-query.xql","document=%s&mode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&sn=%s&viewMode=%s&characterNormalization=%s&highlightQuery=%s"%(docpath, 'text', queryType, urllib.quote(query), pagesize, pn, sn, viewMode,characterNormalization, urllib.quote(highlightQuery)))
67        pagexml = data.replace('?document=%s'%str(docpath),'?url=%s'%url)
68        pagedom = Parse(pagexml)
69       
70        """
71        pagedivs = pagedom.xpath("//div[@class='queryResultHits']")
72        if (pagedivs == pagedom.xpath("//div[@class='queryResultHits']")):
73            if len(pagedivs)>0:
74                docinfo['queryResultHits'] = int(getTextFromNode(pagedivs[0]))
75                s = getTextFromNode(pagedivs[0])
76                s1 = int(s)/10+1
77                try:
78                    docinfo['queryResultHits'] = int(s1)
79                    logging.debug("SEARCH ENTRIES: %s"%(s1))
80                except:
81                    docinfo['queryResultHits'] = 0
82        """
83        if (queryType=="fulltext")or(queryType=="xpath")or(queryType=="xquery")or(queryType=="fulltextMorphLemma"):   
84            pagedivs = pagedom.xpath("//div[@class='queryResultPage']")
85            if len(pagedivs)>0:
86                pagenode=pagedivs[0]
87                links=pagenode.xpath("//a")
88                for l in links:
89                    hrefNode = l.getAttributeNodeNS(None, u"href")
90                    if hrefNode:
91                        href = hrefNode.nodeValue
92                        if href.startswith('page-fragment.xql'):
93                            selfurl = self.absolute_url()           
94                            pagexml=href.replace('mode=text','mode=texttool&viewMode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&tocMode=%s&searchPN=%s&tocPN=%s&characterNormalization=%s'%(viewMode,queryType,urllib.quote(query),pagesize,pn,tocMode,pn,tocPN, characterNormalization))
95                            hrefNode.nodeValue = pagexml.replace('page-fragment.xql','%s'%selfurl)                                           
96                #logging.debug("PUREXML :%s"%(serializeNode(pagenode)))
97                return serializeNode(pagenode)       
98        if (queryType=="fulltextMorph"):
99            pagedivs = pagedom.xpath("//div[@class='queryResult']")
100            if len(pagedivs)>0:
101                pagenode=pagedivs[0]
102                links=pagenode.xpath("//a")
103                for l in links:
104                    hrefNode = l.getAttributeNodeNS(None, u"href")
105                    if hrefNode:
106                        href = hrefNode.nodeValue
107                        if href.startswith('page-fragment.xql'):
108                            selfurl = self.absolute_url()       
109                            pagexml=href.replace('mode=text','mode=texttool&viewMode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s&tocMode=%s&searchPN=%s&tocPN=%s&characterNormalization=%s'%(viewMode,queryType,urllib.quote(query),pagesize,pn,tocMode,pn,tocPN,characterNormalization))
110                            hrefNode.nodeValue = pagexml.replace('page-fragment.xql','%s'%selfurl) 
111                        if href.startswith('../lt/lemma.xql'):
112                            hrefNode.nodeValue = href.replace('../lt/lemma.xql','%s/template/head_main_query'%(selfurl))       
113                            l.setAttributeNS(None, 'target', '_blank')
114                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=300,height=400,top=180, left=400, scrollbars=1'); return false;")
115                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();') 
116                pagedivs = pagedom.xpath("//div[@class='queryResultMorphExpansion']")               
117                return serializeNode(pagenode)       
118        if (queryType=="ftIndex")or(queryType=="ftIndexMorph"):
119            pagedivs= pagedom.xpath("//div[@class='queryResultPage']")
120            if len(pagedivs)>0:
121                pagenode=pagedivs[0]
122                links=pagenode.xpath("//a")
123                for l in links:
124                    hrefNode = l.getAttributeNodeNS(None, u"href")
125                    if hrefNode:
126                        href = hrefNode.nodeValue
127                        hrefNode.nodeValue=href.replace('mode=text','mode=texttool&viewMode=%s&tocMode=%s&tocPN=%s&pn=%s&characterNormalization=%s'%(viewMode,tocMode,tocPN,pn,characterNormalization))             
128                        if href.startswith('../lt/lex.xql'):
129                            hrefNode.nodeValue = href.replace('../lt/lex.xql','%s/template/head_main_lex'%selfurl)         
130                            l.setAttributeNS(None, 'target', '_blank')
131                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=400, scrollbars=1'); return false;")
132                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
133                        if href.startswith('../lt/lemma.xql'):
134                            hrefNode.nodeValue = href.replace('../lt/lemma.xql','%s/template/head_main_lemma'%(selfurl))       
135                            l.setAttributeNS(None, 'target', '_blank')
136                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=300,height=400,top=180, left=400, scrollbars=1'); return false;")
137                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
138                return serializeNode(pagenode)     
139        return "no text here"   
140           
141    def getGisPlaces(self, docinfo=None, pageinfo=None):
142        """ Show all Gis Places of whole Page"""
143        xpath='//place'
144        docpath = docinfo.get('textURLPath',None)
145        if not docpath:
146            return None
147
148        url = docinfo['url']
149        selfurl = self.absolute_url()
150        pn = pageinfo['current']
151        hrefList=[]
152        myList= ""
153        text=self.getServerData("xpath.xql", "document=%s&xpath=%s&pn=%s"%(docinfo['textURLPath'],xpath,pn))
154        dom = Parse(text)
155        result = dom.xpath("//result/resultPage/place")
156        for l in result:
157            hrefNode= l.getAttributeNodeNS(None, u"id")
158            href= hrefNode.nodeValue
159            hrefList.append(href)
160            myList = ",".join(hrefList)
161        #logging.debug("getGisPlaces :%s"%(myList))                             
162        return myList
163   
164    def getAllGisPlaces (self, docinfo=None, pageinfo=None):
165        """Show all Gis Places of whole Book """
166        xpath ='//echo:place'
167        docpath =docinfo['textURLPath']
168        url = docinfo['url']
169        selfurl =self.absolute_url()
170        pn =pageinfo['current']
171        hrefList=[]
172        myList=""
173        text=self.getServerData("xpath.xql", "document=%s&xpath=%s"%(docinfo['textURLPath'],xpath))
174        dom =Parse(text)
175        result = dom.xpath("//result/resultPage/place")
176       
177        for l in result:
178            hrefNode = l.getAttributeNodeNS(None, u"id")
179            href= hrefNode.nodeValue
180            hrefList.append(href)
181            myList = ",".join(hrefList)
182            #logging.debug("getALLGisPlaces :%s"%(myList))
183        return myList
184         
185           
186    def getTextPage(self, mode="text_dict", pn=1, docinfo=None, pageinfo=None):
187        """returns single page from fulltext"""
188        docpath = docinfo['textURLPath']
189        path = docinfo['textURLPath']
190        url = docinfo.get('url',None)
191        name = docinfo.get('name',None)
192        pn =pageinfo['current']
193        #sn = pageinfo['sn']
194        s = pageinfo['s']
195        highlightElementPos =pageinfo ['highlightElementPos']
196        highlightElement = pageinfo ['highlightElement']
197        #optionToggle =pageinfo ['optionToggle']
198        highlightQuery = pageinfo['highlightQuery']
199        #mode = pageinfo ['viewMode']
200        tocMode = pageinfo['tocMode']
201        xpointer = pageinfo['xpointer']
202        characterNormalization=pageinfo['characterNormalization']
203        tocPN = pageinfo['tocPN']
204        selfurl = self.absolute_url()   
205        if mode == "text_dict":
206            textmode = "textPollux"
207        else:
208            textmode = mode
209       
210        textParam = "document=%s&mode=%s&pn=%s&characterNormalization=%s&options=withXmlNodeId&xpointer=%s"%(docpath,textmode,pn,characterNormalization, xpointer)
211        if highlightQuery is not None:
212            #textParam +="&highlightQuery=%s&sn=%s"%(urllib.quote(highlightQuery),sn)
213            textParam +="&highlightQuery=%s&s=%s&highlightElement=%s&highlightElementPos=%s"%(urllib.quote(highlightQuery),s, highlightElement, highlightElementPos)           
214       
215        pagexml = self.getServerData("page-fragment.xql",textParam)
216        dom = Parse(pagexml)
217        #dom = NonvalidatingReader.parseStream(pagexml)
218       
219        #original Pages
220        pagedivs = dom.xpath("//div[@class='pageNumberOrig']")       
221       
222        """if pagedivs == dom.xpath("//div[@class='pageNumberOrig']"):
223            if len(pagedivs)>0:
224                docinfo['pageNumberOrig']= getTextFromNode(pagedivs[0])
225                logging.debug("ORIGINAL PAGE: %s"%(docinfo['pageNumberOrig']))
226       
227        #original Pages Norm
228        pagedivs = dom.xpath("//div[@class='pageNumberOrigNorm']")
229        if pagedivs == dom.xpath("//div[@class='pageNumberOrigNorm']"):
230            if len(pagedivs)>0:
231                docinfo['pageNumberOrigNorm']= getTextFromNode(pagedivs[0])
232                logging.debug("ORIGINAL PAGE NORM: %s"%(docinfo['pageNumberOrigNorm']))
233        """
234        #figureEntries
235        pagedivs = dom.xpath("//div[@class='countFigureEntries']")
236        if pagedivs == dom.xpath("//div[@class='countFigureEntries']"):
237            if len(pagedivs)>0:
238                docinfo['countFigureEntries'] = getTextFromNode(pagedivs[0])
239                s = getTextFromNode(pagedivs[0])
240                if s=='0':
241                    try:
242                        docinfo['countFigureEntries'] = int(s)
243                    except:
244                        docinfo['countFigureEntries'] = 0
245                else:
246                    s1 = int(s)/30+1
247                    try:
248                        docinfo['countFigureEntries'] = int(s1)
249                    except:
250                        docinfo['countFigureEntries'] = 0     
251       
252        #allPlaces
253        pagedivs = dom.xpath("//div[@class='countPlaces']")
254        if pagedivs == dom.xpath("//div[@class='countPlaces']"):
255            if len(pagedivs)>0:
256                docinfo['countPlaces']= getTextFromNode(pagedivs[0])
257                s = getTextFromNode(pagedivs[0])
258                try:
259                    docinfo['countPlaces'] = int(s)
260                except:
261                    docinfo['countPlaces'] = 0
262       
263        #tocEntries
264        pagedivs = dom.xpath("//div[@class='countTocEntries']")
265        if pagedivs == dom.xpath("//div[@class='countTocEntries']"):
266            if len(pagedivs)>0:
267                docinfo['countTocEntries'] = int(getTextFromNode(pagedivs[0]))
268                s = getTextFromNode(pagedivs[0])
269                if s=='0':
270                    try:
271                        docinfo['countTocEntries'] = int(s)
272                    except:
273                        docinfo['countTocEntries'] = 0
274                else:
275                    s1 = int(s)/30+1
276                    try:
277                        docinfo['countTocEntries'] = int(s1)
278                    except:
279                        docinfo['countTocEntries'] = 0
280       
281        #numTextPages
282        pagedivs = dom.xpath("//div[@class='countPages']")
283        if pagedivs == dom.xpath("//div[@class='countPages']"):
284            if len(pagedivs)>0:
285                docinfo['numPages'] = getTextFromNode(pagedivs[0])
286                s = getTextFromNode(pagedivs[0])
287               
288                try:
289                    docinfo['numPages'] = int(s)
290                    #logging.debug("PAGE NUMBER: %s"%(s))
291               
292                    np = docinfo['numPages']
293                    pageinfo['end'] = min(pageinfo['end'], np)
294                    pageinfo['numgroups'] = int(np / pageinfo['groupsize'])
295                    if np % pageinfo['groupsize'] > 0:
296                        pageinfo['numgroups'] += 1               
297                except:
298                    docinfo['numPages'] = 0
299                 
300        else:
301         #no full text -- init to 0
302            docinfo['pageNumberOrig'] = 0
303            docinfo['countFigureEntries'] = 0
304            docinfo['countPlaces'] = 0
305            docinfo['countTocEntries'] = 0
306            docinfo['numPages'] = 0
307            docinfo['pageNumberOrigNorm'] = 0
308        #return docinfo
309       
310        # plain text mode
311        if mode == "text":
312            # first div contains text
313            pagedivs = dom.xpath("/div")
314            if len(pagedivs) > 0:     
315                pagenode = pagedivs[0]
316                links = pagenode.xpath("//a")
317                for l in links:
318                    hrefNode = l.getAttributeNodeNS(None, u"href")
319                    if hrefNode:
320                        href= hrefNode.nodeValue
321                        if href.startswith('#note-'):
322                            hrefNode.nodeValue = href.replace('#note-',"?url=%s&viewMode=text&tocMode=%s&tocPN=%s&pn=%s#note-"%(url,tocMode,tocPN,pn))
323                        #if href.startswith():
324                return serializeNode(pagenode)
325        if mode == "xml":
326              # first div contains text
327              pagedivs = dom.xpath("/div")
328              if len(pagedivs) > 0:
329                  pagenode = pagedivs[0]
330                  return serializeNode(pagenode)
331        if mode == "gis":
332              # first div contains text
333              pagedivs = dom.xpath("/div")
334              if len(pagedivs) > 0:
335                  pagenode = pagedivs[0]
336                  links =pagenode.xpath("//a")
337                  for l in links:
338                      hrefNode =l.getAttributeNodeNS(None, u"href")
339                      if hrefNode:
340                          href=hrefNode.nodeValue
341                          if href.startswith('http://chinagis.mpiwg-berlin.mpg.de'):
342                              hrefNode.nodeValue =href.replace('chinagis_REST/REST/db/chgis/mpdl','chinagis/REST/db/mpdl/%s'%name)
343                              l.setAttributeNS(None, 'target', '_blank') 
344                  return serializeNode(pagenode)
345                   
346        if mode == "pureXml":
347              # first div contains text
348              pagedivs = dom.xpath("/div")
349              if len(pagedivs) > 0:
350                  pagenode = pagedivs[0]
351                  return serializeNode(pagenode)     
352        # text-with-links mode
353        if mode == "text_dict":
354            # first div contains text
355            #mode = pageinfo ['viewMode']
356            pagedivs = dom.xpath("/div")
357            if len(pagedivs) > 0:
358                pagenode = pagedivs[0]
359                # check all a-tags
360                links = pagenode.xpath("//a")
361               
362                for l in links:
363                    hrefNode = l.getAttributeNodeNS(None, u"href")
364                   
365                    if hrefNode:
366                        # is link with href
367                        href = hrefNode.nodeValue
368                        if href.startswith('http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql'):
369                            # is pollux link
370                            selfurl = self.absolute_url()
371                            # change href
372                            hrefNode.nodeValue = href.replace('http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql','%s/head_main_voc'%selfurl)
373                            # add target
374                            l.setAttributeNS(None, 'target', '_blank')
375                            #l.setAttributeNS(None, 'onclick',"popupWin = window.open(this.href, 'InfoWindow', 'menubar=no, location,width=500,height=600,top=180, left=700, toolbar=no, scrollbars=1'); return false;")
376                            #l.setAttributeNS(None, "ondblclick", "popupWin.focus();")
377                            #window.open("this.href, 'InfoWindow', 'menubar=no, location,width=500,height=600,top=180, left=700, toolbar=yes, scrollbars=1'"); return false;")
378                                                         
379                        if href.startswith('http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql'):   
380                            selfurl = self.absolute_url()
381                            hrefNode.nodeValue = href.replace('http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql','%s/head_main_lemma'%selfurl)
382                            l.setAttributeNS(None, 'target', '_blank')
383                            l.setAttributeNS(None, 'onclick',"popupWin = window.open(this.href, 'InfoWindow', 'menubar=no, location,width=300,height=400,top=180, left=700, toolbar=no, scrollbars=1'); return false;")
384                            l.setAttributeNS(None, 'ondblclick', 'popupWin.focus();')   
385                   
386                        if href.startswith('#note-'):
387                            hrefNode.nodeValue = href.replace('#note-',"?url=%s&viewMode=text_dict&tocMode=%s&tocPN=%s&pn=%s#note-"%(url,tocMode,tocPN,pn)) 
388                             
389                return serializeNode(pagenode)
390        return "no text here"
391   
392    def getOrigPages(self, docinfo=None, pageinfo=None):
393        docpath = docinfo['textURLPath']
394        pn =pageinfo['current']
395        selfurl = self.absolute_url()   
396        pagexml = self.getServerData("page-fragment.xql","document=%s&pn=%s"%(docpath, pn))
397        dom = Parse(pagexml)
398        pagedivs = dom.xpath("//div[@class='pageNumberOrig']")
399        if pagedivs == dom.xpath("//div[@class='pageNumberOrig']"):
400            if len(pagedivs)>0:
401                docinfo['pageNumberOrig']= getTextFromNode(pagedivs[0])       
402                return docinfo['pageNumberOrig']
403   
404    def getOrigPagesNorm(self, docinfo=None, pageinfo=None):
405        docpath = docinfo['textURLPath']
406        pn =pageinfo['current']
407        selfurl = self.absolute_url()   
408        pagexml = self.getServerData("page-fragment.xql","document=%s&pn=%s"%(docpath, pn))
409        dom = Parse(pagexml)
410        pagedivs = dom.xpath("//div[@class='pageNumberOrigNorm']")
411        if pagedivs == dom.xpath("//div[@class='pageNumberOrigNorm']"):
412            if len(pagedivs)>0:
413                docinfo['pageNumberOrigNorm']= getTextFromNode(pagedivs[0])       
414                return docinfo['pageNumberOrigNorm']
415
416               
417    def getTranslate(self, word=None, language=None, display=None):
418        """translate into another languages"""
419        data = self.getServerData("lt/wordInfo.xql","language="+str(language)+"&word="+urllib.quote(word)+"&display="+urllib.quote(display)+"&output=html")
420        #pagexml=self.template.fulltextclient.eval("/mpdl/interface/lt/lex.xql","document=&language="+str(language)+"&query="+url_quote(str(query)))
421        return data
422   
423    def getLemma(self, lemma=None, language=None):
424        """simular words lemma """
425        data = self.getServerData("lt/lemma.xql","language="+str(language)+"&lemma="+urllib.quote(lemma)+"&output=html")
426        return data
427   
428    def getLemmaQuery(self, query=None, language=None):
429        """simular words lemma """
430        data = self.getServerData("lt/lemma.xql","language="+str(language)+"&query="+urllib.quote(query)+"&output=html")
431        return data
432   
433    def getLex(self, query=None, language=None):
434        #simular words lemma
435        data = self.getServerData("lt/lex.xql","document=&language="+str(language)+"&query="+urllib.quote(query))
436        return data
437   
438    def getQuery (self,  docinfo=None, pageinfo=None, query=None, queryType=None, pn=1):
439         #number of
440         docpath = docinfo['textURLPath'] 
441         pagesize = pageinfo['queryPageSize']
442         pn = pageinfo['searchPN']
443         query =pageinfo['query']
444         queryType =pageinfo['queryType']
445         tocSearch = 0
446         tocDiv = None
447         
448         pagexml = self.getServerData("doc-query.xql","document=%s&mode=%s&queryType=%s&query=%s&queryResultPageSize=%s&queryResultPN=%s"%(docpath, 'text', queryType, urllib.quote(query), pagesize, pn))
449         pagedom = Parse(pagexml)
450         numdivs = pagedom.xpath("//div[@class='queryResultHits']")
451         tocSearch = int(getTextFromNode(numdivs[0]))
452         tc=int((tocSearch/10)+1)
453         return tc
454   
455    def getToc(self, mode="text", docinfo=None):
456        """loads table of contents and stores in docinfo"""
457        if mode == "none":
458            return docinfo       
459        if 'tocSize_%s'%mode in docinfo:
460            # cached toc
461            return docinfo
462       
463        docpath = docinfo['textURLPath']
464        # we need to set a result set size
465        pagesize = 1000
466        pn = 1
467        if mode == "text":
468            queryType = "toc"
469        else:
470            queryType = mode
471        # number of entries in toc
472        tocSize = 0
473        tocDiv = None
474       
475        pagexml = self.getServerData("doc-query.xql","document=%s&queryType=%s&queryResultPageSize=%s&queryResultPN=%s"%(docpath,queryType, pagesize, pn))
476       
477        # post-processing downloaded xml
478        pagedom = Parse(pagexml)
479        # get number of entries
480        numdivs = pagedom.xpath("//div[@class='queryResultHits']")
481        if len(numdivs) > 0:
482            tocSize = int(getTextFromNode(numdivs[0]))
483        docinfo['tocSize_%s'%mode] = tocSize
484        return docinfo
485   
486    def getTocPage(self, mode="text", pn=1, pageinfo=None, docinfo=None):
487        """returns single page from the table of contents"""
488        # TODO: this should use the cached TOC
489        if mode == "text":
490            queryType = "toc"
491        else:
492            queryType = mode
493        docpath = docinfo['textURLPath']
494        path = docinfo['textURLPath']       
495        pagesize = pageinfo['tocPageSize']
496        pn = pageinfo['tocPN']
497        url = docinfo['url']
498        selfurl = self.absolute_url() 
499        viewMode=  pageinfo['viewMode']
500        characterNormalization = pageinfo ['characterNormalization']
501        #optionToggle =pageinfo ['optionToggle']
502        tocMode = pageinfo['tocMode']
503        tocPN = pageinfo['tocPN'] 
504       
505        data = self.getServerData("doc-query.xql","document=%s&queryType=%s&queryResultPageSize=%s&queryResultPN=%s&characterNormalization=regPlusNorm"%(docpath,queryType, pagesize, pn)) 
506        page = data.replace('page-fragment.xql?document=%s'%str(path),'%s?url=%s&viewMode=%s&tocMode=%s&tocPN=%s'%(selfurl,url, viewMode, tocMode, tocPN))
507        text = page.replace('mode=image','mode=texttool')
508        return text
509   
510    def manage_changeMpdlXmlTextServer(self,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/",timeout=40,RESPONSE=None):
511    #def manage_changeMpdlXmlTextServer(self,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de:30030/mpdl/interface/",timeout=40,RESPONSE=None):
512        """change settings"""
513        self.title=title
514        self.timeout = timeout
515        self.serverUrl = serverUrl
516        if RESPONSE is not None:
517            RESPONSE.redirect('manage_main')
518       
519# management methods
520def manage_addMpdlXmlTextServerForm(self):
521    """Form for adding"""
522    pt = PageTemplateFile("zpt/manage_addMpdlXmlTextServer", globals()).__of__(self)
523    return pt()
524
525def manage_addMpdlXmlTextServer(self,id,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/",timeout=40,RESPONSE=None):
526#def manage_addMpdlXmlTextServer(self,id,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de:30030/mpdl/interface/",timeout=40,RESPONSE=None):   
527    """add zogiimage"""
528    newObj = MpdlXmlTextServer(id,title,serverUrl,timeout)
529    self.Destination()._setObject(id, newObj)
530    if RESPONSE is not None:
531        RESPONSE.redirect('manage_main')
Note: See TracBrowser for help on using the repository browser.