1: """Methoden fuer Language Technologies"""
2:
3: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
4: from Products.ECHO_content.analyseAndTag.analyseAndTag import DonatusFile
5: from OFS.SimpleItem import SimpleItem
6: from OFS.Folder import Folder
7: import xml.parsers
8: import os.path
9: import urlparse,urllib
10: from Globals import package_home
11:
12: class ECHO_language:
13: """language methods"""
14:
15:
16: def tagLex(self,nr="1",id=None):
17: """gerateword tags"""
18:
19:
20: df=DonatusFile(txt=self.getPage(_pn=nr,_id=id),baseUri=self.baseUri)
21:
22: return df.convertedXML()
23: #return DonatusFile(txt=self.getPage(_pn=nr)).convertedXML()
24:
25: class Collection(SimpleItem):
26: def getCollectionXML(self,RESPONSE=None):
27:
28: """get collection as xml"""
29: return self.aq_parent.getCollectionXML(collection=self.getId(),RESPONSE=RESPONSE)
30:
31: def __init__(self,id):
32: """initialise"""
33: self.id=id
34: self.entries=[]
35:
36:
37: def getEntries(self):
38: """get the entries"""
39: entries=self.entries
40: for entry in entries: #backward compatibility, cannot be removed a.s.a.p.
41: print entry
42: if entry.has_key('master') and (len(entry['master'])<3):
43: entry['master']=(entry['master'][0],entry['master'][1],'')
44: if entry.has_key('slave') and (len(entry['slave'])<3):
45: entry['slave']=(entry['slave'][0],entry['slave'][1],'')
46:
47: return self.entries
48:
49: def deleteEntry(self,nr):
50: """delete an entry"""
51: del(self.entries[nr])
52:
53: def changeEntry(self,nr,slaveUrl):
54: """change an entry, only slaveUrl"""
55: tmp=self.entries[nr]
56: tmp['slave']=(slaveUrl,"","")
57:
58: entries=self.entries[0:]
59: entries[nr]=tmp
60: self.entries=entries[0:]
61:
62: def appendEntry(self,fn,id,type,pagelink):
63: """append an entry"""
64: #check if last entry is complete
65: createNew=False
66:
67: if len(self.entries)==0: #noch gar kein Eintrag
68: createNew=True
69: else:
70: entry=self.entries[-1]
71: if entry.get('master',None) and entry.get('slave',None):
72: createNew=True
73: if createNew:
74:
75: self.entries.append({})
76: entry=self.entries[-1]
77: if type=="master":
78: entry['master']=(fn,id,pagelink)
79: elif type=="slave":
80: entry['slave']=(fn,id,pagelink)
81:
82: entries=self.entries[0:]
83: entries[-1]=entry
84: self.entries=entries[0:]
85:
86: class ECHO_linkCreator(Folder):
87: """creator for links"""
88:
89: meta_type="ECHO_linkCreator"
90:
91:
92:
93:
94: def getCollectionEntries(self,collection):
95: col=getattr(self,collection,None)
96: if not col:
97: return []
98:
99: return col.getEntries()
100:
101:
102: def getCollectionXML(self,collection=None,RESPONSE=None):
103: """exports the collection as an XML file"""
104: if not collection:
105: return "<error>no collection: need parameter collection=COLLECTION_NAME</error>"
106:
107: i=0
108: ret=""
109: ret+="""<?xml version="1.0" encoding="UTF-8"?>"""
110: ret+="""<linklist xmlns="http://www.mpiwg-berlin.mpg.de/namespace">"""
111: ret+="""<linklistname>%s</linklistname>"""%collection
112: ret+="""<masterurl ref="%s"/>"""%self.getUrls(collection)[0]
113: ret+="""<slaveurl ref="%s"/>"""%self.getUrls(collection)[1]
114:
115: for entry in self.getCollectionEntries(collection):
116: ret+="""<link id="%s">"""%i
117: i+=1
118:
119: if entry.has_key('master'):
120: ms=entry['master']
121:
122:
123: try:
124: if urlparse.urlparse(ms[0])[0]=="http": # url
125: ret+="""<source filename="%s"/>"""%urllib.quote(ms[0])
126: else:
127: ret+="""<source filename="%s" refid="%s">"""%(ms[0],ms[1])
128: splitted=ms[2].split("/")
129: if (len(splitted)>3):
130: ret+="""<pagelink refid="%s" selectionNodeIndex="%s"/>"""%(splitted[0],splitted[3])
131:
132: ret+="""</source>"""
133: except: #ohne pagelink&
134: ret+="""<source filename="%s" refid="%s"/>"""%ms
135: if entry.has_key('slave'):
136: ms=entry['slave']
137: try:
138: if urlparse.urlparse(ms[0])[0]=="http": # url
139: ret+="""<target filename="%s"/>"""%urllib.quote(ms[0])
140: else:
141: ret+="""<target filename="%s" refid="%s">"""%(ms[0],ms[1])
142: splitted=ms[2].split("/")
143: if (len(splitted)>3):
144: ret+="""<pagelink refid="%s" selectionNodeIndex="%s"/>"""%(splitted[0],splitted[3])
145: ret+="""</target>"""
146: except: #ohne pagelink
147: ret+="""<target filename="%s" refid="%s"/>"""%ms
148:
149: ret+="</link>"
150: ret+="""</linklist>"""
151: if RESPONSE:
152: RESPONSE.setHeader("Content-Type","text/xml")
153: return ret
154: def index_html(self,collection=None):
155: """show create links"""
156: if not collection:
157: return "no collection: need parameter collection=COLLECTION_NAME"
158:
159:
160: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_linkCreator_main')).__of__(self)
161:
162: col=getattr(self,collection,None)
163: if not col:
164: return []
165:
166: masterUrl=getattr(col,'masterUrl','')
167: slaveUrl=getattr(col,'slaveUrl','')
168:
169: return pt(collection=collection,masterUrl=masterUrl,slaveUrl=slaveUrl)
170:
171: def addEntry(self,collection,fn,id,type,pagelink,fromurl=None,RESPONSE=None,REQUEST=None):
172: """add an entry"""
173:
174: col=getattr(self, collection,None)
175: if not col:
176: self._setObject(collection,Collection(collection))
177: col=getattr(self, collection)
178:
179: col.appendEntry(fn,id,type,pagelink)
180:
181: if fromurl and RESPONSE:
182:
183: RESPONSE.setHeader("Expires",(DateTime()-1).rfc822())
184: RESPONSE.setHeader("Cache-Control", "no-cache")
185: RESPONSE.redirect(fromurl)
186:
187:
188: def changeEntry(self,collection,nr,slaveUrl,RESPONSE=None):
189: """change an entry 8only slaveUrl at the moment"""
190: col=getattr(self, collection,None)
191: col.changeEntry(nr,slaveUrl)
192:
193: if RESPONSE:
194: RESPONSE.redirect(self.absolute_url()+"?collection="+collection)
195:
196: def removeEntry(self,collection,nr,RESPONSE=None):
197: """remove an entry"""
198: col=getattr(self, collection,None)
199: col.deleteEntry(nr)
200:
201: if RESPONSE:
202: RESPONSE.redirect(self.absolute_url()+"?collection="+collection)
203:
204: def setUrls(self,collection,masterUrl,slaveUrl,RESPONSE=None):
205: """set the urls for the document viewer"""
206: col=getattr(self, collection,None)
207: setattr(col,'masterUrl',masterUrl)
208: setattr(col,'slaveUrl',slaveUrl)
209:
210: if RESPONSE:
211: RESPONSE.redirect(self.absolute_url()+"?collection="+collection)
212:
213: def getUrls(self,collection,RESPONSE=None):
214: """set the urls for the document viewer"""
215: col=getattr(self, collection,None)
216: x=getattr(col,'masterUrl')
217: y=getattr(col,'slaveUrl')
218: return x,y
219:
220: def manage_addECHO_linkCreatorForm(self,RESPONSE=None):
221: """Form for adding"""
222: manage_addECHO_linkCreator(self,RESPONSE)
223:
224: def manage_addECHO_linkCreator(self,RESPONSE=None):
225: """Add an ECHO_main"""
226: id='linkCreator'
227: self._setObject(id,ECHO_linkCreator(id))
228:
229:
230: if RESPONSE is not None:
231: RESPONSE.redirect('manage_main')
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>