File:  [Repository] / ECHO_content / ECHO_movie.py
Revision 1.4: download - view: text, annotated - select for diffs - revision graph
Tue Mar 22 20:31:26 2005 UTC (19 years, 2 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
rdf for movies

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

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