Annotation of ECHO_content/ECHO_language.py, revision 1.9

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>