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