Annotation of ECHO_content/ECHO_movie.py, revision 1.10

1.8       dwinter     1: 
1.1       dwinter     2: """preliminary object for displaying movies as part of a collection, shall be exchanged by a generalized ressource object"""
                      3: 
                      4: import string
                      5: import tempfile
                      6: import re
                      7: import os
                      8: import OFS.Image
                      9: from types import *
                     10: from OFS.Cache import Cacheable
                     11: from OFS.Image import Image
                     12: from Globals import DTMLFile
                     13: from OFS.Folder import Folder
                     14: from OFS.SimpleItem import SimpleItem
                     15: from AccessControl import ClassSecurityInfo
                     16: from AccessControl.User import UserFolder
                     17: from Globals import InitializeClass
                     18: from Globals import DTMLFile
                     19: import Globals
                     20: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                     21: from Products.PageTemplates.PageTemplate import PageTemplate
                     22: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
                     23: from Globals import Persistent, package_home
                     24: from Acquisition import Implicit
                     25: 
                     26: import urllib
                     27: import smtplib
                     28: import time
                     29: from Ft.Xml.Domlette import NonvalidatingReader
                     30: from Ft.Xml.Domlette import PrettyPrint
                     31: from Ft.Xml import EMPTY_NAMESPACE
                     32: 
                     33: import Ft.Xml.XPath
                     34: import cStringIO
                     35: import zLOG
                     36: 
                     37: try:
1.8       dwinter    38:         from psycopg import libpq
1.1       dwinter    39: except:
1.8       dwinter    40:         try:
                     41:                 from pyPgSQL import libpq
                     42:         except:
                     43:                 print "ECHO_collection: Warning - No libpq imported!"
                     44:                 
1.1       dwinter    45: import xml.dom.minidom
                     46: 
                     47: import urllib
                     48: import xml.dom.minidom
                     49: import ECHO_helpers
                     50: from ECHO_helpers import *
1.10    ! dwinter    51: try:
        !            52:  from ECHO_language import *
        !            53: except:
        !            54:  print "no echo_language"
        !            55: 
1.1       dwinter    56: class ECHO_movie(Folder,Persistent,ECHO_basis):
                     57:     """ECHO Ressource"""
                     58:     security=ClassSecurityInfo()
                     59:     meta_type='ECHO_movie'
1.3       dwinter    60:     contentType='movie'
                     61:     
1.1       dwinter    62: #    viewClassificationList=viewClassificationListMaster
                     63: 
                     64:     getSubCols = ECHO_helpers.getSubCols
                     65: 
                     66:     security.declareProtected('View','index_html')
                     67: 
                     68:     
                     69:   
                     70:     security.declareProtected('View','createPDF')
                     71:   
                     72: 
1.5       dwinter    73:     def linkHTTP(self):
1.8       dwinter    74:             """protokoll fuer link html"""
                     75:             
                     76:             splitted=self.link.split(":")
                     77:             if len(splitted)<2:
                     78:                     return self.link
                     79:             else:
                     80:                     splitted[0]="http"
                     81: 
                     82:             ret= ":".join(splitted)
                     83:             ret=ret.replace("//einst1","//einst3")
                     84:             return ret
1.5       dwinter    85:     
                     86:     def linkRTSP(self):
1.8       dwinter    87:             """protokoll fuer link html"""
                     88:             splitted=self.link.split(":")
                     89:             if len(splitted)<2:
                     90:                     return self.link
                     91:             else:
                     92:                     splitted[0]="RTSP"
                     93: 
                     94:             ret= ":".join(splitted)
                     95:             ret=ret.replace("//einst3","//einst1")
                     96:             return ret
1.5       dwinter    97:     
1.6       dwinter    98:     def lowresHTTP(self):
1.8       dwinter    99:             """protokoll fuer link html"""
                    100:             if getattr(self,"lowresFile","")=="":
                    101:                     return None
                    102:             
                    103:             splitted=self.lowresFile.split(":")
                    104:             if len(splitted)<2:
                    105:                     return self.lowresFile
                    106:             else:
                    107:                     splitted[0]="http"
                    108: 
                    109:             ret= ":".join(splitted)
                    110:             ret=ret.replace("//einst1","//einst3")
                    111:             return ret
1.6       dwinter   112:     
                    113:     def lowresRTSP(self):
1.8       dwinter   114:             """protokoll fuer link html"""
                    115:             if getattr(self,"lowresFile","")=="":
                    116:                     return None
                    117:             
                    118:             splitted=self.lowresFile.split(":")
                    119:             if len(splitted)<2:
                    120:                     return self.lowresFile
                    121:             else:
                    122:                     splitted[0]="RTSP"
                    123: 
                    124:             ret= ":".join(splitted)
                    125:             ret=ret.replace("//einst3","//einst1")
                    126:             return ret
1.6       dwinter   127:     
1.5       dwinter   128: 
1.1       dwinter   129:     def getRDF(self,urn=None):
1.8       dwinter   130:             
                    131:             """rdf"""
                    132:             #ret=getRDFDescription(self,self.link,urn=urn)
                    133:             #return ret+self.createSubElementRDF(urn=urn) 
                    134:             if not urn:
                    135:                     urn=self.absolute_url()
                    136:             ret=""
                    137: 
                    138:             rettemp="""<RDF:Seq RDF:about="%s">\n"""%urn
                    139:             
                    140:             li="""<RDF:li RDF:resource="%s" />\n"""
                    141:             rettemp+=li%self.thumbUrl
                    142:             rettemp+=li%self.metalink
                    143:             rettemp+=li%self.rawFile
                    144:             rettemp+=li%getattr(self,'lowresFile','')
                    145:             rettemp+=li%self.link
                    146:             rettemp+="</RDF:Seq>"
                    147: 
                    148:             rettemp+=getRDFDescription(self,self.thumbUrl,nameDef="thumb",typeName="thumb",urn=self.thumbUrl)
                    149:             rettemp+=getRDFDescription(self,self.metalink,nameDef="metadata",typeName="ECHO_metaData",urn=self.metalink)
                    150:             rettemp+=getRDFDescription(self,self.rawFile,nameDef="raw",typeName="raw_movie",urn=self.rawFile)
                    151:             if not (getattr(self,'lowresFile','')==""):
                    152:                     rettemp+=getRDFDescription(self,self.lowresFile,nameDef="lores_movie",typeName="lores",urn=self.lowresFile)
                    153:             rettemp+=getRDFDescription(self,self.link,nameDef="hires",typeName="hires_movie",urn=self.link)
                    154:             return rettemp
1.4       dwinter   155:     
1.1       dwinter   156:     def getAccessRightSelectorHTML(self,outlook="select"):
1.8       dwinter   157:             """htmlselector"""
                    158:             values=['free','mpiwg']
                    159:             
                    160:             if outlook=="select":
                    161:                     ret="""<select name="%s">"""%self.getId()
                    162: 
                    163:                     for value in values:
                    164:                             if value==self.getAccessRightMD():
                    165:                                     ret+="<option selected>%s</option>"%value
                    166:                             else:
                    167:                                     ret+="<option>%s</option>"%value
                    168:                     return ret+"</select>"
                    169: 
                    170:             else:
                    171:                     ret=""
                    172:                     for value in values:
                    173:                             
                    174:                             if value==self.getAccessRightMD():
                    175:                                     ret+="""<input type="radio" name="%s" value="%s" checked>%s"""%(self.getId(),value,value)
                    176:                             else:
                    177:                                     ret+="""<input type="radio" name="%s" value="%s">%s"""%(self.getId(),value,value)
                    178:                     return ret
1.1       dwinter   179: 
                    180: 
                    181:     
                    182:     def getAccessRightMD(self):
1.8       dwinter   183:                 """set accessright"""
                    184:                 url=self.metalink
1.1       dwinter   185: 
1.8       dwinter   186:                 try:
                    187:                         geturl=""
                    188:                         for line in ECHO_helpers.urlopen(url).readlines():
                    189:                                 geturl=geturl+line
                    190: 
                    191: 
                    192:                 except:
                    193:                         return (None,"Cannot open: "+url)
                    194: 
                    195:                 try:
                    196:                         dom=xml.dom.minidom.parseString(geturl)
                    197:                         root=dom.getElementsByTagName('resource')[0]
                    198:                 except:
                    199:                         return (None,"Cannot parse: "+url+"<br>"+geturl)
                    200: 
                    201:                 internal=dom.getElementsByTagName('internal')
                    202:                 if internal:
                    203:                         institution=dom.getElementsByTagName('institution')
                    204:                         return getText(institution[0].childNodes)
                    205:                 
                    206:                 free=dom.getElementsByTagName('free')
                    207:                 if free:
                    208:                         return "free"
1.1       dwinter   209: 
1.8       dwinter   210:                 return "free" #default free
1.1       dwinter   211: 
                    212:     def changeAccessRightMD(self,accessright,RESPONSE=None):
1.8       dwinter   213:             """change the rights"""
                    214:             
                    215:             params="accessright=%s"%accessright
1.1       dwinter   216: 
                    217: 
1.8       dwinter   218:             #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()
1.1       dwinter   219: 
1.8       dwinter   220:             
                    221:             ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/setAccessRightXML'+urllib.quote('?'+params))).read()
1.1       dwinter   222: 
1.8       dwinter   223:           
                    224:             if RESPONSE is not None:
                    225:                         RESPONSE.redirect('manage_main')
1.1       dwinter   226: 
1.8       dwinter   227:                 
1.1       dwinter   228:     def setAccessRightXML(self,accessright):
1.8       dwinter   229:                 """set accessright"""
                    230:                 url=self.metalink
1.1       dwinter   231: 
1.8       dwinter   232:                 try:
                    233:                         geturl=""
                    234:                         for line in ECHO_helpers.urlopen(url).readlines():
                    235:                                 geturl=geturl+line 
                    236: 
                    237: 
                    238:                 except:
                    239:                         return (None,"Cannot open: "+url)
                    240: 
                    241:                 try:
                    242:                         dom=xml.dom.minidom.parseString(geturl)
                    243:                         root=dom.getElementsByTagName('resource')[0]
                    244:                 except:
                    245:                         return (None,"Cannot parse: "+url+"<br>"+geturl)
                    246: 
                    247:                 metanodes=dom.getElementsByTagName('access-conditions')
                    248: 
                    249:                 if not metanodes:
                    250:                         nodenew=dom.createElement('access-conditions')
                    251:                         root.appendChild(nodenew)
                    252:                         metanode=nodenew
                    253:                 else:
                    254:                         metanode=metanodes[0]
                    255: 
                    256:                 accesses=metanode.getElementsByTagName('access')
                    257: 
                    258:                 if not accesses:
                    259:                         nodenew2=dom.createElement('access')
                    260:                         metanode.appendChild(nodenew2)
                    261:                         metanode2=nodenew2
                    262:                 else:
                    263:                         metanode2=accesses[0]
                    264: 
                    265:                 internal=metanode.getElementsByTagName('internal')
                    266: 
                    267:                 if internal:
                    268:                         metanode2.removeChild(internal[0]).unlink()
                    269: 
                    270:                 free=metanode.getElementsByTagName('free')
                    271:                 
                    272:                 if free:
                    273:                         metanode2.removeChild(internal[0]).unlink()
                    274: 
                    275: 
                    276:                 if accessright=='free':
                    277:                         nodenew3=dom.createElement('free')
                    278:                         metanode2.appendChild(nodenew3)
                    279:                 elif accessright=='mpiwg':
                    280:                         nodenew3=dom.createElement('internal')
                    281:                         nodenew4=dom.createElement('institution')
                    282:                         metanodetext=dom.createTextNode('mpiwg')
                    283:                         nodenew4.appendChild(metanodetext)
                    284:                         nodenew3.appendChild(nodenew4)
                    285:                         metanode2.appendChild(nodenew3)
1.1       dwinter   286: 
1.8       dwinter   287:                 return dom.toxml().encode('utf-8')
1.1       dwinter   288: 
                    289:   
                    290:   
                    291:     def copyTitleToInfoXML(self,RESPONSE=None):
1.8       dwinter   292:             """copy title from the resource"""
                    293:             presentationXML=readFieldFromXML(self.metalink,'texttool','presentation')
                    294:             resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
                    295:             if (not presentationXML) or (not resourcepath): 
                    296:                 if RESPONSE:
                    297:                         RESPONSE.write("Error: %s\n"%self.getId())
                    298:                 else:
                    299:                         return None,self.absolute_url()
                    300: 
                    301:             try:
                    302:                     fh=file(os.path.join(resourcepath,presentationXML),'w')
                    303:                     fh.write("""<info>
                    304:                     <author></author>
                    305:                     <title>%s</title>
                    306:                     <date></date>
                    307:                     <display>yes</display>
                    308:                     </info>"""%self.title)
                    309:                     fh.close()
                    310:                     return 1,self.getId()
                    311:             except:
                    312:                     if RESPONSE:
                    313:                             RESPONSE.write("Error: %s\n"%self.getId())
                    314:                     else:
                    315:                             return None,self.absolute_url()
1.1       dwinter   316: 
                    317: 
                    318:    
                    319: 
1.8       dwinter   320:     security.declarePublic('content_html')      
1.1       dwinter   321:     def content_html(self):
                    322:         """template fuer content"""
                    323:         return ECHO_basis.content_html(self,'movie')
                    324:     
                    325: #    def getViewClassification(self):
                    326: #        if hasattr(self,'viewClassification'):
                    327: #            return self.viewClassification
                    328: #        else:
                    329: #            return ""
                    330: 
                    331:     
                    332:     def getCopyrightsHTML(self):
1.8       dwinter   333:             """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus"""
                    334:             
                    335:             if hasattr(self,'copyrightModel'):
                    336:                     obj=self.copyrightModel
                    337:                     
                    338:             else:
                    339:                     return "ERROR"
                    340:             ret=[]
                    341:             
                    342:             for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID
                    343:                     
                    344:                     
                    345:                     try:
                    346:                         if hasattr(self.copyrightTypes,copyright[2]):
                    347:                              copyrightTypeObj=getattr(self.copyrightTypes,copyright[2])
                    348:                              link="copyrightTypes/"+copyright[2]+'/copyright.html'
                    349:                         else:
                    350:                              copyrightTypeObj=getattr(obj,copyright[2])
                    351:                              link="copyrightModel/"+copyright[2]+'/copyright.html'
                    352:                              
                    353:                         label=copyrightTypeObj.label
                    354:                         url=getattr(copyrightTypeObj, 'url', '')
                    355:                             
                    356:                         if url!='':
                    357:                                  ret.append((url,copyright[0],copyright[1],copyright[2],label))
                    358:                         else:
                    359:                                 if hasattr(copyrightTypeObj, 'copyright.html'):
                    360:                                      ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label))
                    361:                                 else:
                    362:                                      ret.append(('empty',copyright[0],copyright[1],copyright[2],label))
                    363:                     except:
                    364:                             """nothing"""
                    365:                     
                    366:             return ret
                    367:             
1.1       dwinter   368:     def getInstitutionsHTML(self):
1.8       dwinter   369:                 """gibt Liste der foerdernden Institutionen aus"""
                    370:                 
                    371:                 if hasattr(self,'support'):
                    372:                         obj=self.support
                    373:                         ret=obj.getSupporter()
                    374:                         return ret
                    375:                 else:
                    376:                         return ''
                    377:                         
1.1       dwinter   378:     
                    379:     def getCredits(self):
                    380:         """Ausgabe der credits"""
                    381:         if self.credits:
                    382:             return self.credits
                    383:         else:
                    384:             return []
                    385: 
                    386: 
                    387:     
1.5       dwinter   388:     def __init__(self,id,link,thumbUrl,rawFile,lowresFile,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords):
1.1       dwinter   389: 
                    390:         self.id = id
                    391:         """Festlegen der ID"""
                    392:         
                    393:         self.label = label
                    394:         self.link= link
                    395:         self.metalink=metalink
                    396:         self.title=title
                    397:         self.weight=weight
                    398:         self.credits=toList(credits)
                    399:         self.description=description
                    400:         self.contentType=contentType
1.8       dwinter   401:         self.copyrightType=copyrightType
                    402:         self.renderingType=renderingType
1.1       dwinter   403:         self.responsible=responsible
                    404:         self.resourceID=resourceID
                    405:         self.thumbUrl=thumbUrl
                    406:         self.rawFile=rawFile
1.8       dwinter   407:         self.lowresFile=lowresFile
                    408:         
1.1       dwinter   409:         if coords:
                    410:             coordsnew=[ string.split(x,",") for x in coords]
                    411:         else:
                    412:             coordsnew=[]
                    413:         
                    414:         self.coords=coordsnew
1.8       dwinter   415: #       self.viewClassification=""
1.1       dwinter   416: 
                    417: 
                    418: 
                    419:     def getContentType(self):
1.8       dwinter   420:             try:
                    421:                     return self.contentType
                    422:             except:
                    423:                     return ""
1.1       dwinter   424: 
                    425:     def getCopyrightType(self):
1.8       dwinter   426:             try:
                    427:                     return self.copyrightType
                    428:             except:
                    429:                     return ""
1.1       dwinter   430: 
                    431:     def getRenderingType(self):
1.8       dwinter   432:             try:
                    433:                     return self.renderingType
                    434:             except:
                    435:                     return ""
1.1       dwinter   436: 
                    437:     def ECHO_movie_config(self):
                    438:         """Main configuration"""
                    439: 
                    440:         if not hasattr(self,'weight'):
                    441:             self.weight=""
                    442: 
                    443:         pt=zptFile(self, 'zpt/ChangeECHO_movie.zpt')
                    444:         return pt()
                    445:     
                    446: 
                    447:     def ECHO_movie_config_main(self):
                    448:         """Main configuration"""
                    449:         if not hasattr(self,'weight'):
                    450:             self.weight=""
                    451:         pt=zptFile(self, 'zpt/ChangeECHO_movie_main.zpt')
                    452:         return pt()
                    453: 
                    454:     def ECHO_movie_config_coords(self):
                    455:         """Coords configuration """
                    456:         pt=zptFile(self, 'zpt/ChangeECHO_movie_coords.zpt')
                    457:         return pt()
                    458: 
                    459:     def ECHO_movie_config_credits(self):
                    460:         """Main configuration"""
                    461:         pt=zptFile(self, 'zpt/ChangeECHO_movie_credits.zpt')
                    462:         return pt()
                    463: 
                    464:     def ECHO_resource_config_metadata(self):
                    465:         """Main configuration"""
1.8       dwinter   466:         if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
                    467:                 self.metaDataHash={}
                    468:                 self.contentType=self.bib_type
                    469:                 for data in self.metadata:
                    470:                         data_neu=re.sub('-','_',data)
                    471:                         self.meta
1.1       dwinter   472:                         DataHash[data_neu]=getattr(self,data)[0:]
                    473: 
1.8       dwinter   474:         
1.1       dwinter   475:         pt=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt')
                    476:         return pt()
                    477: 
                    478: 
                    479:     
1.5       dwinter   480:     def changeECHO_movie_main(self,metalink,link,rawFile,lowresFile,thumbUrl,title,label,description,contentType,renderingType="",weight="",resourceID="",RESPONSE=None):
1.1       dwinter   481:         """Aenderung der Properties"""
1.8       dwinter   482:         self.resourceID=resourceID
                    483:         self.title=title
                    484:         self.label=label
                    485:         self.description=description
                    486: 
                    487:         self.contentType=contentType
                    488:         self.renderingType=renderingType
                    489:         self.weight=weight
                    490:         
1.1       dwinter   491:         self.link=link
                    492:         self.thumbUrl=thumbUrl
                    493:         self.rawFile=rawFile
1.8       dwinter   494:         self.lowresFile=lowresFile
1.1       dwinter   495:        
                    496:         self.metalink=metalink
                    497:         
                    498:         if RESPONSE is not None:
                    499:             RESPONSE.redirect('manage_main')
                    500: 
                    501: 
                    502:     def changeECHO_movie_coords(self,RESPONSE=None):
                    503:         """Aenderung der Properties - coords"""
1.8       dwinter   504:         #return self.REQUEST
                    505:         for area in self.getMapAreas():
                    506:             id = area.getId()
                    507:             if self.REQUEST.has_key('del.'+id):
                    508:                 # delete this area
                    509:                 self._delObject(id)
                    510:                 # return to same menu
                    511:                 if RESPONSE is not None:
                    512:                     RESPONSE.redirect('ECHO_movie_config_coords')
                    513:                 return
                    514:             # modify this area
                    515:             coordstring = self.REQUEST.get('coords.'+id, '')
                    516:             coords = string.split(coordstring, ',')
                    517:             angle = self.REQUEST.get('angle.'+id, '0')
                    518:             type = self.REQUEST.get('type.'+id, 'area')
                    519:             if len(coords) == 4:
                    520:                 area.setCoordString(coordstring)
                    521:                 area.setAngle(angle)
                    522:                 area.setType(type)
                    523:         # return to main menu    
                    524:         if RESPONSE is not None:
                    525:             RESPONSE.redirect('manage_main')
1.1       dwinter   526: 
                    527: 
                    528:     def changeECHO_movie_credits(self,credits,responsible,copyrightType,RESPONSE=None):
                    529:         """Aenderung der Properties"""
1.8       dwinter   530:         self.credits=credits
                    531:         self.responsible=responsible
                    532:         self.copyrightType=copyrightType
1.1       dwinter   533:         
                    534:         if RESPONSE is not None:
                    535:             RESPONSE.redirect('manage_main')
                    536: 
                    537: 
                    538:     def changeECHO_resource_metadata_local(self,RESPONSE=None):
1.8       dwinter   539:             """change metadata"""
                    540:             tags=self.findTagsFromMapping(self.contentType)
                    541:             for field in tags[1]:
                    542:                     self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:]
                    543:                         
                    544: 
                    545:                     
                    546:             if RESPONSE is not None:
                    547:                     RESPONSE.redirect('manage_main')
1.1       dwinter   548: 
                    549:     def changeECHO_resource_metadata(self,RESPONSE=None):
1.8       dwinter   550:             """change metadata"""
                    551:             tags=self.findTagsFromMapping(self.contentType)
                    552:             self.OSAS_meta={}
                    553:             for field in tags[1]:
                    554:                     try:
                    555:                             self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
                    556:                             self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
                    557:                     except:
                    558:                             """nothing"""
1.1       dwinter   559: 
1.8       dwinter   560:             ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML')).read()
1.1       dwinter   561: 
                    562: 
1.8       dwinter   563:             if RESPONSE is not None:
                    564:                     RESPONSE.redirect('manage_main')
1.1       dwinter   565: 
1.9       dwinter   566:     def getMDValue(self,fieldNameTest,empty=None,generic=None):
                    567:             """get md values"""
                    568:             #TODO: cache mappinghash
                    569:             
                    570:             fieldName=None
                    571:             if generic:
                    572:                 ct=self.contentType.replace(" ","_").lower()
                    573:                 
                    574:                 #caching
                    575:                 if not hasattr(self,'_v_mapHash'): #noch keine cachevariable
                    576:                     self._v_mapHash={}
                    577:                     
                    578:                 tmp=self._v_mapHash.get(ct,None) 
                    579:                 if tmp: #teste ob type schon existiert
                    580:                     fieldName=tmp.get(fieldNameTest,None)
                    581:                 else:
                    582:                     self._v_mapHash[ct]={}
                    583:                     
                    584:                 #noch nicht gecached    
                    585:                 if not fieldName and hasattr(self.standardMD,ct):    
                    586:                     fieldName=getattr(self.standardMD,ct).generateMappingHash()[fieldNameTest][0]
                    587:                     self._v_mapHash[ct][fieldNameTest]=fieldName
                    588:                     
1.8       dwinter   589:             if not empty:
                    590:                     return self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
                    591:             
                    592:             else:
                    593:                     return self.metaDataHash.get(fieldName,empty)
                    594:             
1.1       dwinter   595:     def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None):
1.8       dwinter   596:             """new index.meta"""
                    597:             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1.1       dwinter   598: 
1.8       dwinter   599:             if not hasattr(self,'metaDataHash'):
                    600:                 
                    601:                     self.copyIndex_meta2echo_resource()
                    602:             try:
                    603:                     return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
                    604:             except:
                    605:                     return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
1.1       dwinter   606: 
                    607:     def showMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.8       dwinter   608:             """schreibe md"""
                    609:             
                    610:             try:
                    611:                     
                    612:                     return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes")
                    613:             except:
                    614:                     return "<error> no metadata stored</error>"
1.1       dwinter   615:     
                    616:     def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.8       dwinter   617:             """prints out metadata as stored in the echo environment, format is the index.meta format"""
                    618:             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
                    619:             return writeMetadata(self.metalink,self.metaDataHash)
1.1       dwinter   620: 
1.5       dwinter   621:     def changeECHO_movie(self,metalink,link,thumbUrl,rawFile,lowresFile,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.1       dwinter   622:         """Aenderung der Properties"""
                    623:         
                    624:         setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
                    625:         self.link=link
                    626:         self.metalink=metalink
                    627:         self.thumbUrl=thumbUrl
                    628:         self.rawFile=rawFile
1.8       dwinter   629:         self.lowresFile=lowresFile
1.1       dwinter   630:         
                    631:         
                    632:         if RESPONSE is not None:
                    633:             RESPONSE.redirect('manage_main')
                    634:             
                    635:             
                    636:     manage_options = Folder.manage_options+(
                    637:         {'label':'Main Config','action':'ECHO_movie_config_main'},
1.8       dwinter   638:         {'label':'Change Metadata','action':'ECHO_movie_config_metadata'},
                    639:         {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
1.1       dwinter   640:         {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
1.8       dwinter   641:         {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'},
                    642:         {'label':'set/change startpage','action':'setStartPageForm'},
                    643:         {'label':'Copy MD for indexing and search','action':'copySearchFields'},
                    644:         )
1.1       dwinter   645: 
                    646: 
                    647:     def isDefinedInThisSet(self,fields,field):
1.8       dwinter   648:             """checks if field is defined in fields"""
                    649:             if (fields[0].has_key(field)) and not (fields[0][field]==""):
                    650:                     return 1
                    651:             else:
                    652:                   
                    653:                     return 0
                    654:             
1.1       dwinter   655:     def getFieldLabel(self,fields,field):
                    656:         """get labels"""
                    657:         try:
                    658:             ret =fields[0][field]
                    659:             if ret == "":
                    660:                 return field
                    661:             else:
                    662:                 return ret
                    663:         except:
                    664:             return field
                    665: 
                    666: 
                    667: 
                    668:     def getFieldTag(self,fields,field):
                    669:         """get labels"""
                    670:         try:
                    671:             ret =fields[0][field]
                    672:             if ret == "":
                    673:                 return field
                    674:             else:
                    675:                 return ret
                    676:         except:
                    677:             return field
                    678: 
                    679:     
                    680: 
                    681:     def getMetaDataHash(self):
1.8       dwinter   682:             """md hash"""
                    683:             return self.metaDataHash
1.1       dwinter   684:     
                    685:     def setFieldValue(self,field,value):
                    686:         """get value"""
1.8       dwinter   687:         
                    688:         if not hasattr(self,'metaDataHash'):
                    689:                 setattr(self,'metaDataHash',{})
                    690:         self.metaDataHash[field]=value[0:]
                    691:         
1.1       dwinter   692: 
                    693:     def copySearchFields(self):
1.8       dwinter   694:             """copys metadatafields to the object"""
                    695:             fields=['author','title','year']
                    696:             for field in fields:
1.9       dwinter   697:                     setattr(self,'MD_'+field,self.getMDValue(field))
1.1       dwinter   698:     
                    699: 
                    700:     def findLabelsFromMapping(self,referenceType):
                    701:         """gib hash mit label -> generic zurueck"""
1.8       dwinter   702:         #return {},[]
1.1       dwinter   703: 
                    704:         temp=self.ZopeFind(self.standardMD)
                    705: 
1.8       dwinter   706:         if referenceType=="":
                    707:                 referenceType="book"
                    708:         
                    709:         
1.1       dwinter   710:         bibdata={}
                    711:         retdata={}
1.8       dwinter   712:         fields=[]
1.1       dwinter   713:         fieldlist=self.standardMD.fieldList
                    714: 
                    715:         tags=self.findTagsFromMapping(self.contentType)
1.8       dwinter   716:         self.referencetypes=tags[2]
                    717:         for referenceTypeF in self.referencetypes:
1.1       dwinter   718: 
1.8       dwinter   719:                 if referenceTypeF[1].title.lower() == referenceType.lower():
1.1       dwinter   720: 
1.8       dwinter   721:                         try:
                    722:                                 bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
                    723:                                 referenceType=referenceTypeF[1].title
                    724:                         except:
                    725:                                 bibdata[referenceType]=referenceTypeF[1].fields
                    726:                 
1.1       dwinter   727: 
1.8       dwinter   728:                         bibdata['data']=referenceTypeF[1]
                    729:                         fields=bibdata[referenceType]
1.1       dwinter   730:                         for field in fieldlist:
                    731:                             retdata[field]=referenceTypeF[1].getValue(field)[1]
                    732: 
                    733:         return retdata,fieldlist,temp,fields
                    734: 
                    735:     def findTagsFromMapping(self,referenceType):
                    736:         """gib hash mit label -> generic zurueck"""
1.8       dwinter   737:         
1.1       dwinter   738: 
1.8       dwinter   739:         if referenceType=="":
                    740:                 referenceType="book"
                    741:         
                    742:         temp =  self.ZopeFind(self.standardMD)[0:]
                    743: 
                    744:         
                    745:         #self.referencetypes=temp[0:]
                    746:         
                    747:         
                    748:         
1.1       dwinter   749: 
1.8       dwinter   750:         
1.1       dwinter   751: 
                    752:         bibdata={}
                    753:         retdata={}
                    754:         fieldlist=self.standardMD.fieldList
                    755:         fields=[]
1.8       dwinter   756:         for referenceTypeF in temp:
                    757:                 #print referenceType
                    758:         
                    759:                 if referenceTypeF[1].title.lower() == referenceType.lower(): 
                    760:                         try:
                    761:                                 bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
                    762:                                 referenceType=referenceTypeF[1].title
                    763:                         except:
                    764:                                 bibdata[referenceType]=referenceTypeF[1].fields
                    765:                         bibdata['data']=referenceTypeF[1]
                    766:                         fields=bibdata[referenceType]
1.1       dwinter   767:                         for field in fieldlist:
                    768:                             retdata[field]=referenceTypeF[1].getValue(field)[0]
1.8       dwinter   769:         
1.1       dwinter   770:         return retdata,fieldlist,temp,fields
                    771: 
                    772:     
                    773:     security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination
                    774:     def copyIndex_meta2echo_resource(self,RESPONSE=None):
1.8       dwinter   775:             """copy MD von Index_meta to the echo_resource"""
                    776:             
                    777:             (metadict, error)=readMetadata(self.metalink)
                    778: 
                    779: 
                    780:             
                    781:             self.metaDataHash={}
                    782:             if not error=="": #Fehler beim Auslesen des Metafiles
                    783:                     
                    784:                     return "ERROR:",error,self.absolute_url()
                    785:             
                    786:             self.contentType=metadict['bib_type'][0:]
                    787:             fields=self.findTagsFromMapping(self.contentType)
                    788:             
                    789:             #fields=self.findLabelsFromMapping(self.contentType)
                    790:             for field in fields[1]:
                    791:                     
                    792:                     if self.isDefinedInThisSet(fields,field):
                    793:                             #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),''))
                    794:                             self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),''))
                    795: 
                    796:             
                    797:             
                    798:             if RESPONSE:
                    799:                     return RESPONSE.redirect('manage_main')
                    800:             
1.1       dwinter   801:     def ECHO_getResourceMD(self,template="yes",back=None):
                    802:         """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
                    803:         (metadict, error)=readMetadata(self.metalink)
                    804: 
                    805:         if back:
                    806:             self.REQUEST.SESSION['back']=back
                    807: 
                    808:         if not error=="": #Fehler beim Auslesen des Metafiles
1.8       dwinter   809:                 return "ERROR:",error
                    810:         
1.1       dwinter   811: 
1.8       dwinter   812:         if not (metadict['bib_type'].lower()==self.contentType.lower()):
                    813:                 self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
                    814:                 self.REQUEST.SESSION['contentZope']=self.contentType
1.1       dwinter   815: 
1.8       dwinter   816:                 return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')()
1.1       dwinter   817: 
1.8       dwinter   818:         self.REQUEST.SESSION['metadict']=metadict
1.1       dwinter   819: 
1.8       dwinter   820:         
                    821:         
                    822:         self.REQUEST.SESSION['diffs']=checkDiffs(self,self.REQUEST.SESSION['metadict'])
                    823:         
1.1       dwinter   824: 
1.8       dwinter   825:                 
1.1       dwinter   826:         if template=="yes":
1.8       dwinter   827:                 pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt')
                    828:                 return pt()
1.1       dwinter   829: 
1.8       dwinter   830:         
1.1       dwinter   831: 
                    832:     
                    833:     
                    834:     def ECHO_getMD(self,item):
                    835:         """Ausgabe der MD"""
                    836:         return getattr(self,item)
                    837: 
                    838:     def checkRDF(self,path):
1.8       dwinter   839:             """check if pdf in the path"""
                    840:             try:
                    841:                     for fileName in os.listdir(path):
                    842:                             if os.path.splitext(fileName)[1]==".pdf":
                    843:                                     return os.path.join(path,fileName)
                    844:                     return None
                    845:             except:
                    846:                     return None
                    847:             
                    848:             
1.1       dwinter   849:     def index_html(self):
                    850:         """standard page"""
                    851:         pdf=self.checkRDF(self.link)
1.8       dwinter   852:         if pdf:
                    853:                 fh=file(pdf,'r').read()
                    854:                 self.REQUEST.RESPONSE.setHeader('Content-Type','application/pdf')
                    855:                 self.REQUEST.RESPONSE.write(fh)
                    856:                 self.REQUEST.RESPONSE.close()
                    857:                 return 
1.1       dwinter   858:         return self.REQUEST.RESPONSE.redirect(self.link)
                    859: 
                    860: 
                    861:     security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination
                    862: 
                    863:     def generate_label(self):
                    864:         """Erzeugt_standard_Label aus Template"""
1.8       dwinter   865:         try:
                    866:                 pt=getattr(self,"label_template_"+self.contentType.lower())
                    867:                 self.label=pt()[0:]
                    868:                 return pt()
                    869:         except:
                    870:                 return self.label
1.1       dwinter   871: 
                    872:     security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination
                    873: 
                    874:     def generate_title(self,RESPONSE=None):
                    875:         """Erzeugt_standard_Label aus Template"""
1.8       dwinter   876:         try:
                    877:                 pt=getattr(self,"label_template_"+self.contentType.lower())
                    878:                 self.title=pt()[0:]
                    879:                 return pt()
                    880:         except:
                    881:                 return self.label
                    882:         
1.1       dwinter   883: Globals.InitializeClass(ECHO_movie)
                    884: 
                    885: def manage_addECHO_movieForm(self):
                    886:         """Form for adding a ressource"""
                    887:         pt=zptFile(self, 'zpt/AddECHO_movieForm.zpt')
                    888:         return pt()
                    889: 
                    890: 
                    891: 
1.5       dwinter   892: def manage_addECHO_movie(self,id,title,label,description="",responsible="",link="",thumbUrl="",rawFile="",lowresFile="",metalink="",weight="",copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None):
1.1       dwinter   893:     """addaresource"""
                    894: 
1.5       dwinter   895:     newObj=ECHO_movie(id,link,thumbUrl,rawFile,lowresFile,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords)
1.1       dwinter   896: 
                    897:     self._setObject(id,newObj)
                    898: 
                    899:     if RESPONSE is not None:
                    900:         RESPONSE.redirect('manage_main')
                    901:  

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