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