File:  [Repository] / ECHO_content / ECHO_language.py
Revision 1.9: download - view: text, annotated - select for diffs - revision graph
Thu Oct 12 16:37:33 2006 UTC (17 years, 8 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
link mechanismus geaendert, kann jetzt backlinks

    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: from Globals import package_home
   10: 
   11: class ECHO_language:
   12:         """language methods"""
   13:         
   14:         
   15:         def tagLex(self,nr="1",id=None):
   16:             """gerateword tags"""
   17:             
   18:            
   19:             df=DonatusFile(txt=self.getPage(_pn=nr,_id=id),baseUri=self.baseUri)
   20:            
   21:             return df.convertedXML()
   22:             #return DonatusFile(txt=self.getPage(_pn=nr)).convertedXML()
   23:         
   24: class Collection(SimpleItem):
   25:          def getCollectionXML(self,RESPONSE=None):
   26:              
   27:              """get collection as xml"""
   28:              return self.aq_parent.getCollectionXML(collection=self.getId(),RESPONSE=RESPONSE)
   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"""
   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:                  
   46:              return self.entries
   47:          
   48:          def deleteEntry(self,nr):
   49:              """delete an entry"""
   50:              del(self.entries[nr])
   51:            
   52:              
   53:          def appendEntry(self,fn,id,type,pagelink):
   54:              """append an entry"""
   55:              #check if last entry is complete
   56:              createNew=False
   57:             
   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":
   69:                  entry['master']=(fn,id,pagelink)
   70:              elif type=="slave":
   71:                  entry['slave']=(fn,id,pagelink)
   72:              
   73:              entries=self.entries[0:]
   74:              entries[-1]=entry 
   75:              self.entries=entries[0:]
   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:      
   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
  134:      def index_html(self,collection=None):
  135:          """show create links"""
  136:          if not collection:
  137:              return "no collection: need parameter collection=COLLECTION_NAME"
  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:      
  151:      def addEntry(self,collection,fn,id,type,pagelink,fromurl=None,RESPONSE=None,REQUEST=None):
  152:          """add an entry"""
  153:         
  154:          col=getattr(self, collection,None)
  155:          if not col:
  156:              self._setObject(collection,Collection(collection))
  157:              col=getattr(self, collection)
  158:          
  159:          col.appendEntry(fn,id,type,pagelink)
  160:          
  161:          if fromurl and RESPONSE:
  162:      
  163:              RESPONSE.setHeader("Expires",(DateTime()-1).rfc822())
  164:              RESPONSE.setHeader("Cache-Control", "no-cache")
  165:              RESPONSE.redirect(fromurl)
  166:     
  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:          
  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
  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>