File:  [Repository] / ECHO_content / ECHO_language.py
Revision 1.10: download - view: text, annotated - select for diffs - revision graph
Wed Oct 18 14:42:33 2006 UTC (17 years, 7 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
exportImport added

    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>