source: documentViewer/MpdlXmlTextServer.py @ 455:0a53fea83df7

elementtree
Last change on this file since 455:0a53fea83df7 was 455:0a53fea83df7, checked in by casties, 13 years ago

more work renovating

File size: 24.8 KB
Line 
1
2from OFS.SimpleItem import SimpleItem
3from Products.PageTemplates.PageTemplateFile import PageTemplateFile
4
5from Ft.Xml import EMPTY_NAMESPACE, Parse
6from Ft.Xml.Domlette import NonvalidatingReader
7import Ft.Xml.Domlette
8import cStringIO
9
10import xml.etree.ElementTree as ET
11
12import re
13import logging
14import urllib
15import documentViewer
16#from documentViewer import getTextFromNode, serializeNode
17
18def intOr0(s, default=0):
19    """convert s to int or return default"""
20    try:
21        return int(s)
22    except:
23        return default
24
25def getText(node):
26    """get the cdata content of a node"""
27    if node is None:
28        return ""
29    # ET:
30    text = node.text or ""
31    for e in node:
32        text += gettext(e)
33        if e.tail:
34            text += e.tail
35
36    return text
37
38def serialize(node):
39    """returns a string containing an XML snippet of node"""
40    s = ET.tostring(node, 'UTF-8')
41    # snip off XML declaration
42    if s.startswith('<?xml'):
43        i = s.find('?>')
44        return s[i+3:]
45
46    return s
47
48
49def getTextFromNode(node):
50    """get the cdata content of a node"""
51    if node is None:
52        return ""
53    # ET:
54#    text = node.text or ""
55#    for e in node:
56#        text += gettext(e)
57#        if e.tail:
58#            text += e.tail
59
60    # 4Suite:
61    nodelist=node.childNodes
62    text = ""
63    for n in nodelist:
64        if n.nodeType == node.TEXT_NODE:
65           text = text + n.data
66   
67    return text
68
69def serializeNode(node, encoding="utf-8"):
70    """returns a string containing node as XML"""
71    #s = ET.tostring(node)
72   
73    # 4Suite:
74    stream = cStringIO.StringIO()
75    Ft.Xml.Domlette.Print(node, stream=stream, encoding=encoding)
76    s = stream.getvalue()
77    stream.close()
78
79    return s
80
81
82class MpdlXmlTextServer(SimpleItem):
83    """TextServer implementation for MPDL-XML eXist server"""
84    meta_type="MPDL-XML TextServer"
85
86    manage_options=(
87        {'label':'Config','action':'manage_changeMpdlXmlTextServerForm'},
88       )+SimpleItem.manage_options
89   
90    manage_changeMpdlXmlTextServerForm = PageTemplateFile("zpt/manage_changeMpdlXmlTextServer", globals())
91       
92    def __init__(self,id,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/", serverName=None, timeout=40):
93       
94        """constructor"""
95        self.id=id
96        self.title=title
97        self.timeout = timeout
98        if serverName is None:
99            self.serverUrl = serverUrl
100        else:
101            self.serverUrl = "http://%s/mpdl/interface/"%serverName
102       
103    def getHttpData(self, url, data=None):
104        """returns result from url+data HTTP request"""
105        return documentViewer.getHttpData(url,data,timeout=self.timeout)
106   
107    def getServerData(self, method, data=None):
108        """returns result from text server for method+data"""
109        url = self.serverUrl+method
110        return documentViewer.getHttpData(url,data,timeout=self.timeout)
111
112    # WTF: what does this really do? can it be integrated in getPage?
113    def getSearch(self, pageinfo=None,  docinfo=None):
114        """get search list"""
115        logging.debug("getSearch()")
116        docpath = docinfo['textURLPath'] 
117        url = docinfo['url']
118        pagesize = pageinfo['queryPageSize']
119        pn = pageinfo.get('searchPN',1)
120        sn = pageinfo['sn']
121        highlightQuery = pageinfo['highlightQuery']
122        query =pageinfo['query']
123        queryType =pageinfo['queryType']
124        viewMode=  pageinfo['viewMode']
125        tocMode = pageinfo['tocMode']
126        characterNormalization = pageinfo['characterNormalization']
127        #optionToggle = pageinfo['optionToggle']
128        tocPN = pageinfo['tocPN']
129        selfurl = self.absolute_url()
130        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)))
131        pagexml = data.replace('?document=%s'%str(docpath),'?url=%s'%url)
132        pagedom = Parse(pagexml)
133       
134        """
135        pagedivs = pagedom.xpath("//div[@class='queryResultHits']")
136        if (pagedivs == pagedom.xpath("//div[@class='queryResultHits']")):
137            if len(pagedivs)>0:
138                docinfo['queryResultHits'] = int(getTextFromNode(pagedivs[0]))
139                s = getTextFromNode(pagedivs[0])
140                s1 = int(s)/10+1
141                try:
142                    docinfo['queryResultHits'] = int(s1)
143                    logging.debug("SEARCH ENTRIES: %s"%(s1))
144                except:
145                    docinfo['queryResultHits'] = 0
146        """
147        if (queryType=="fulltext")or(queryType=="xpath")or(queryType=="xquery")or(queryType=="fulltextMorphLemma"):   
148            pagedivs = pagedom.xpath("//div[@class='queryResultPage']")
149            if len(pagedivs)>0:
150                pagenode=pagedivs[0]
151                links=pagenode.xpath("//a")
152                for l in links:
153                    hrefNode = l.getAttributeNodeNS(None, u"href")
154                    if hrefNode:
155                        href = hrefNode.nodeValue
156                        if href.startswith('page-fragment.xql'):
157                            selfurl = self.absolute_url()           
158                            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))
159                            hrefNode.nodeValue = pagexml.replace('page-fragment.xql','%s'%selfurl)                                           
160                #logging.debug("PUREXML :%s"%(serializeNode(pagenode)))
161                return serializeNode(pagenode)       
162        if (queryType=="fulltextMorph"):
163            pagedivs = pagedom.xpath("//div[@class='queryResult']")
164            if len(pagedivs)>0:
165                pagenode=pagedivs[0]
166                links=pagenode.xpath("//a")
167                for l in links:
168                    hrefNode = l.getAttributeNodeNS(None, u"href")
169                    if hrefNode:
170                        href = hrefNode.nodeValue
171                        if href.startswith('page-fragment.xql'):
172                            selfurl = self.absolute_url()       
173                            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))
174                            hrefNode.nodeValue = pagexml.replace('page-fragment.xql','%s'%selfurl) 
175                        if href.startswith('../lt/lemma.xql'):
176                            hrefNode.nodeValue = href.replace('../lt/lemma.xql','%s/template/head_main_query'%(selfurl))       
177                            l.setAttributeNS(None, 'target', '_blank')
178                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=400, scrollbars=1'); return false;")
179                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();') 
180                pagedivs = pagedom.xpath("//div[@class='queryResultMorphExpansion']")               
181                return serializeNode(pagenode)       
182        if (queryType=="ftIndex")or(queryType=="ftIndexMorph"):
183            pagedivs= pagedom.xpath("//div[@class='queryResultPage']")
184            if len(pagedivs)>0:
185                pagenode=pagedivs[0]
186                links=pagenode.xpath("//a")
187                for l in links:
188                    hrefNode = l.getAttributeNodeNS(None, u"href")
189                    if hrefNode:
190                        href = hrefNode.nodeValue
191                        hrefNode.nodeValue=href.replace('mode=text','mode=texttool&viewMode=%s&tocMode=%s&tocPN=%s&pn=%s&characterNormalization=%s'%(viewMode,tocMode,tocPN,pn,characterNormalization))             
192                        if href.startswith('../lt/lex.xql'):
193                            hrefNode.nodeValue = href.replace('../lt/lex.xql','%s/template/head_main_lex'%selfurl)         
194                            l.setAttributeNS(None, 'target', '_blank')
195                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=400, scrollbars=1'); return false;")
196                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
197                        if href.startswith('../lt/lemma.xql'):
198                            hrefNode.nodeValue = href.replace('../lt/lemma.xql','%s/template/head_main_lemma'%(selfurl))       
199                            l.setAttributeNS(None, 'target', '_blank')
200                            l.setAttributeNS(None, 'onClick',"popupWin = window.open(this.href, 'contacts', 'location,width=500,height=600,top=180, left=400, scrollbars=1'); return false;")
201                            l.setAttributeNS(None, 'onDblclick', 'popupWin.focus();')
202                return serializeNode(pagenode)     
203        return "no text here"   
204           
205    def getGisPlaces(self, docinfo=None, pageinfo=None):
206        """ Show all Gis Places of whole Page"""
207        xpath='//place'
208        docpath = docinfo.get('textURLPath',None)
209        if not docpath:
210            return None
211
212        url = docinfo['url']
213        selfurl = self.absolute_url()
214        pn = pageinfo['current']
215        hrefList=[]
216        myList= ""
217        text=self.getServerData("xpath.xql", "document=%s&xpath=%s&pn=%s"%(docinfo['textURLPath'],xpath,pn))
218        dom = ET.fromstring(text)
219        result = dom.findall(".//result/resultPage/place")
220        for l in result:
221            href = l.get("id")
222            hrefList.append(href)
223            # WTF: what does this do?
224            myList = ",".join(hrefList)
225        #logging.debug("getGisPlaces :%s"%(myList))                             
226        return myList
227   
228    def getAllGisPlaces (self, docinfo=None, pageinfo=None):
229        """Show all Gis Places of whole Book """
230        xpath ='//echo:place'
231        docpath =docinfo['textURLPath']
232        url = docinfo['url']
233        selfurl =self.absolute_url()
234        pn =pageinfo['current']
235        hrefList=[]
236        myList=""
237        text=self.getServerData("xpath.xql", "document=%s&xpath=%s"%(docinfo['textURLPath'],xpath))
238        dom = ET.fromstring(text)
239        result = dom.findall(".//result/resultPage/place")
240       
241        for l in result:
242            href = l.get("id")
243            hrefList.append(href)
244            # WTF: what does this do?
245            myList = ",".join(hrefList)
246            #logging.debug("getALLGisPlaces :%s"%(myList))
247        return myList
248         
249    def processPageInfo(self, dom, docinfo, pageinfo):
250        """processes page info divs from dom and stores in docinfo and pageinfo"""
251        # process all toplevel divs
252        alldivs = dom.findall(".//div")
253        pagediv = None
254        for div in alldivs:
255            dc = div.get('class')
256           
257            # page content div
258            if dc == 'pageContent':
259                pagediv = div
260           
261            # pageNumberOrig 
262            elif dc == 'pageNumberOrig':
263                pageinfo['pageNumberOrig'] = div.text
264               
265            # pageNumberOrigNorm
266            elif dc == 'pageNumberOrigNorm':
267                pageinfo['pageNumberOrigNorm'] = div.text
268               
269            # pageNumberOrigNorm
270            elif dc == 'countFigureEntries':
271                docinfo['countFigureEntries'] = intOr0(div.text)
272               
273            # pageNumberOrigNorm
274            elif dc == 'countTocEntries':
275                # WTF: s1 = int(s)/30+1
276                docinfo['countTocEntries'] = intOr0(div.text)
277               
278            # numTextPages
279            elif dc == 'countPages':
280                np = intOr0(div.text)                   
281                if np > 0:
282                    docinfo['numTextPages'] = np
283                    if docinfo.get('numPages', 0) == 0:
284                        # seems to be text-only
285                        docinfo['numTextPages'] = np
286                        pageinfo['end'] = min(pageinfo['end'], np)
287                        pageinfo['numgroups'] = int(np / pageinfo['groupsize'])
288                        if np % pageinfo['groupsize'] > 0:
289                            pageinfo['numgroups'] += 1
290                           
291        return
292         
293           
294    def getTextPage(self, mode="text_dict", pn=1, docinfo=None, pageinfo=None):
295        """returns single page from fulltext"""
296        logging.debug("getTextPage mode=%s, pn=%s"%(mode,pn))
297        # check for cached text -- but this shouldn't be called twice
298        if pageinfo.has_key('textPage'):
299            logging.debug("getTextPage: using cached text")
300            return pageinfo['textPage']
301       
302        docpath = docinfo['textURLPath']
303        # just checking
304        if pageinfo['current'] != pn:
305            logging.warning("getTextPage: current!=pn!")
306           
307        # stuff for constructing full urls
308        url = docinfo['url']
309        urlmode = docinfo['mode']
310        sn = pageinfo.get('sn', None)
311        highlightQuery = pageinfo.get('highlightQuery', None)
312        tocMode = pageinfo.get('tocMode', None)
313        tocPN = pageinfo.get('tocPN',None)
314        characterNormalization = pageinfo.get('characterNormalization', None)
315        selfurl = docinfo['viewerUrl']   
316       
317        if mode == "text_dict":
318            # text_dict is called textPollux in the backend
319            textmode = "textPollux"
320        else:
321            textmode = mode
322       
323        textParam = "document=%s&mode=%s&pn=%s&characterNormalization=%s"%(docpath,textmode,pn,characterNormalization)
324        if highlightQuery:
325            textParam +="&highlightQuery=%s&sn=%s"%(urllib.quote(highlightQuery),sn)           
326       
327        # fetch the page
328        pagexml = self.getServerData("page-fragment.xql",textParam)
329        dom = ET.fromstring(pagexml)
330        # extract additional info
331        self.processPageInfo(dom, docinfo, pageinfo)
332        # page content is in <div class="pageContent">
333        pagediv = None
334        # ElementTree 1.2 in Python 2.6 can't do div[@class='pageContent']
335        alldivs = dom.findall(".//div")
336        for div in alldivs:
337            dc = div.get('class')
338            # page content div
339            if dc == 'pageContent':
340                pagediv = div
341                break
342       
343        # plain text mode
344        if mode == "text":
345            if pagediv:
346                links = pagediv.findall(".//a")
347                for l in links:
348                    href = l.get('href')
349                    if href and href.startswith('#note-'):
350                        href = href.replace('#note-',"?mode=%s&url=%s&viewMode=text&tocMode=%s&tocPN=%s&pn=%s#note-"%(urlmode,url,tocMode,tocPN,pn))
351                        l.set('href', href)
352
353                return serialize(pagediv)
354           
355        # text-with-links mode
356        elif mode == "text_dict":
357            if pagediv:
358                # check all a-tags
359                links = pagediv.findall(".//a")
360                for l in links:
361                    href = l.get('href')
362                   
363                    if href:
364                        # is link with href
365                        if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql'):
366                            # is pollux link
367                            selfurl = self.absolute_url()
368                            # change href
369                            l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql','%s/head_main_voc'%selfurl))
370                            # add target
371                            l.set('target', '_blank')
372                                                         
373                        if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql'):   
374                            selfurl = self.absolute_url()
375                            l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql','%s/head_main_lemma'%selfurl))
376                            l.set('target', '_blank')
377                            l.set('onclick',"popupWin = window.open(this.href, 'InfoWindow', 'menubar=no, location,width=500,height=600,top=180, left=700, toolbar=no, scrollbars=1'); return false;")
378                            l.set('ondblclick', 'popupWin.focus();')   
379                   
380                        if href.startswith('#note-'):
381                            l.set('href', href.replace('#note-',"?mode=%s&url=%s&viewMode=text_dict&tocMode=%s&tocPN=%s&pn=%s#note-"%(urlmode,url,tocMode,tocPN,pn)))
382                             
383                return serialize(pagediv)
384           
385        # xml mode
386        elif mode == "xml":
387            if pagediv:
388                return serialize(pagediv)
389           
390        # pureXml mode
391        elif mode == "pureXml":
392            if pagediv:
393                return serialize(pagediv)
394                 
395        # gis mode
396        elif mode == "gis":
397            name = docinfo['name']
398            if pagediv:
399                # check all a-tags
400                links = pagediv.findall(".//a")
401                for l in links:
402                    href = l.get('href')
403                    if href:
404                        if href.startswith('http://chinagis.mpiwg-berlin.mpg.de'):
405                            l.set('href', href.replace('chinagis_REST/REST/db/chgis/mpdl','chinagis/REST/db/mpdl/%s'%name))
406                            l.set('target', '_blank') 
407                           
408                return serialize(pagediv)
409                   
410        return "no text here"
411   
412    # WTF: is this needed?
413    def getOrigPages(self, docinfo=None, pageinfo=None):
414        logging.debug("CALLED: getOrigPages!")
415        if not pageinfo.has_key('pageNumberOrig'):
416            logging.warning("getOrigPages: not in pageinfo!")
417            return None
418       
419        return pageinfo['pageNumberOrig']
420   
421    # WTF: is this needed?
422    def getOrigPagesNorm(self, docinfo=None, pageinfo=None):
423        logging.debug("CALLED: getOrigPagesNorm!")
424        if not pageinfo.has_key('pageNumberOrigNorm'):
425            logging.warning("getOrigPagesNorm: not in pageinfo!")
426            return None
427       
428        return pageinfo['pageNumberOrigNorm']
429               
430    # TODO: should be getWordInfo
431    def getTranslate(self, word=None, language=None):
432        """translate into another languages"""
433        data = self.getServerData("lt/wordInfo.xql","language="+str(language)+"&word="+urllib.quote(word)+"&output=html")
434        return data
435   
436    # WTF: what does this do?
437    def getLemma(self, lemma=None, language=None):
438        """simular words lemma """
439        data = self.getServerData("lt/lemma.xql","language="+str(language)+"&lemma="+urllib.quote(lemma)+"&output=html")
440        return data
441   
442    # WTF: what does this do?
443    def getLemmaQuery(self, query=None, language=None):
444        """simular words lemma """
445        data = self.getServerData("lt/lemma.xql","language="+str(language)+"&query="+urllib.quote(query)+"&output=html")
446        return data
447   
448    # WTF: what does this do?
449    def getLex(self, query=None, language=None):
450        #simular words lemma
451        data = self.getServerData("lt/lex.xql","document=&language="+str(language)+"&query="+urllib.quote(query))
452        return data
453
454    # WTF: what does this do?
455    def getQuery (self,  docinfo=None, pageinfo=None, query=None, queryType=None, pn=1):
456         #number of
457         docpath = docinfo['textURLPath'] 
458         pagesize = pageinfo['queryPageSize']
459         pn = pageinfo['searchPN']
460         query =pageinfo['query']
461         queryType =pageinfo['queryType']
462         tocSearch = 0
463         tocDiv = None
464         
465         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))
466         pagedom = Parse(pagexml)
467         numdivs = pagedom.xpath("//div[@class='queryResultHits']")
468         tocSearch = int(getTextFromNode(numdivs[0]))
469         tc=int((tocSearch/10)+1)
470         return tc
471   
472    def getToc(self, mode="text", docinfo=None):
473        """loads table of contents and stores XML in docinfo"""
474        logging.debug("getToc mode=%s"%mode)
475        if mode == "none":
476            return docinfo
477             
478        if 'tocSize_%s'%mode in docinfo:
479            # cached toc
480            return docinfo
481       
482        docpath = docinfo['textURLPath']
483        # we need to set a result set size
484        pagesize = 1000
485        pn = 1
486        if mode == "text":
487            queryType = "toc"
488        else:
489            queryType = mode
490        # number of entries in toc
491        tocSize = 0
492        tocDiv = None
493        # fetch full toc
494        pagexml = self.getServerData("doc-query.xql","document=%s&queryType=%s&queryResultPageSize=%s&queryResultPN=%s"%(docpath,queryType, pagesize, pn))
495        dom = ET.fromstring(pagexml)
496        # page content is in <div class="queryResultPage">
497        pagediv = None
498        # ElementTree 1.2 in Python 2.6 can't do div[@class='queryResultPage']
499        alldivs = dom.findall("div")
500        for div in alldivs:
501            dc = div.get('class')
502            # page content div
503            if dc == 'queryResultPage':
504                pagediv = div
505               
506            elif dc == 'queryResultHits':
507                docinfo['tocSize_%s'%mode] = intOr0(div.text)
508
509        if pagediv:
510#            # split xml in chunks
511#            tocs = []
512#            tocdivs = pagediv.findall('div')
513#            for p in zip(tocdivs[::2], tocdivs[1::2]):
514#                toc = serialize(p[0])
515#                toc += serialize(p[1])
516#                tocs.append(toc)
517#                logging.debug("pair: %s"%(toc))
518            # store XML in docinfo
519            docinfo['tocXML_%s'%mode] = ET.tostring(pagediv, 'UTF-8')
520
521        return docinfo
522   
523    def getTocPage(self, mode="text", pn=1, pageinfo=None, docinfo=None):
524        """returns single page from the table of contents"""
525        logging.debug("getTocPage mode=%s, pn=%s"%(mode,pn))
526        if mode == "text":
527            queryType = "toc"
528        else:
529            queryType = mode
530           
531        # check for cached TOC
532        if not docinfo.has_key('tocXML_%s'%mode):
533            self.getToc(mode=mode, docinfo=docinfo)
534           
535        tocxml = docinfo.get('tocXML_%s'%mode, None)
536        if not tocxml:
537            logging.error("getTocPage: unable to find tocXML")
538            return "No ToC"
539       
540        pagesize = int(pageinfo['tocPageSize'])
541        url = docinfo['url']
542        urlmode = docinfo['mode']
543        selfurl = docinfo['viewerUrl']
544        viewMode=  pageinfo['viewMode']
545        tocMode = pageinfo['tocMode']
546        tocPN = int(pageinfo['tocPN'])
547
548        fulltoc = ET.fromstring(tocxml)
549       
550        if fulltoc:
551            # paginate
552            #start = (pn - 1) * pagesize * 2
553            #end = start + pagesize * 2
554            #tocdivs = fulltoc[start:end]
555            tocdivs = fulltoc
556           
557            # check all a-tags
558            links = tocdivs.findall(".//a")
559            for l in links:
560                href = l.get('href')
561                if href:
562                    # take pn from href
563                    m = re.match(r'page-fragment\.xql.*pn=(\d+)', href)
564                    if m is not None:
565                        # and create new url
566                        l.set('href', '%s?mode=%s&url=%s&viewMode=%s&pn=%s&tocMode=%s&tocPN=%s'%(selfurl, urlmode, url, viewMode, m.group(1), tocMode, tocPN))
567                    else:
568                        logging.warning("getTocPage: Problem with link=%s"%href)
569                       
570            return serialize(tocdivs)
571   
572   
573    def manage_changeMpdlXmlTextServer(self,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/",timeout=40,RESPONSE=None):
574        """change settings"""
575        self.title=title
576        self.timeout = timeout
577        self.serverUrl = serverUrl
578        if RESPONSE is not None:
579            RESPONSE.redirect('manage_main')
580       
581# management methods
582def manage_addMpdlXmlTextServerForm(self):
583    """Form for adding"""
584    pt = PageTemplateFile("zpt/manage_addMpdlXmlTextServer", globals()).__of__(self)
585    return pt()
586
587def manage_addMpdlXmlTextServer(self,id,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/",timeout=40,RESPONSE=None):
588#def manage_addMpdlXmlTextServer(self,id,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de:30030/mpdl/interface/",timeout=40,RESPONSE=None):   
589    """add zogiimage"""
590    newObj = MpdlXmlTextServer(id,title,serverUrl,timeout)
591    self.Destination()._setObject(id, newObj)
592    if RESPONSE is not None:
593        RESPONSE.redirect('manage_main')
594       
595       
Note: See TracBrowser for help on using the repository browser.