--- ECHO_content/ECHO_resource.py 2008/12/04 21:27:00 1.1 +++ ECHO_content/ECHO_resource.py 2012/01/03 13:02:31 1.7 @@ -23,7 +23,10 @@ from Globals import Persistent, package_ from Acquisition import Implicit from Products.ZCatalog.CatalogPathAwareness import CatalogAware from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon -from Products.MetaDataProvider.MetaDataClient import MetaDataClient +try: + from Products.MetaDataProvider.MetaDataClient import MetaDataClient +except: + print "no metadata services" import urllib import urllib2 import cgi @@ -201,7 +204,11 @@ class ECHO_resource(CatalogAware,Folder, def getRDF(self,urn=None): """rdf""" - ret=getRDFDescription(self,self.link,urn=urn) + ap = self.getArchivePathFromMetadata() + + + ret=getRDFDescription(self,self.link,urn=urn,ap=ap) + return ret+self.createSubElementRDF(urn=urn) @@ -429,7 +436,7 @@ class ECHO_resource(CatalogAware,Folder, """create ImageUrl""" - resourcepath=readFieldFromXML(self.metalink,'resource','archive-path') + resourcepath=readFieldFromXML_xpath(self.metalink,'//resource/archive-path') digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix') images=readFieldFromXML(self.metalink,'texttool','image') @@ -448,7 +455,7 @@ class ECHO_resource(CatalogAware,Folder, def copyTitleToInfoXML(self,RESPONSE=None): """copy title from the resource""" presentationXML=readFieldFromXML(self.metalink,'texttool','presentation') - resourcepath=readFieldFromXML(self.metalink,'resource','archive-path') + resourcepath=readFieldFromXML_xpath(self.metalink,'//resource/archive-path') if (not presentationXML) or (not resourcepath): if RESPONSE: RESPONSE.write("Error: %s\n"%self.getId()) @@ -614,8 +621,22 @@ class ECHO_resource(CatalogAware,Folder, #logger("ECHO Fulltext",logging.INFO,"opened %s"%self.metalink) dom=xml.dom.minidom.parse(fh) texttools=dom.getElementsByTagName('texttool') - text=texttools[0].getElementsByTagName('text') - texturl=getText(text[0].childNodes) + + text=texttools[0].getElementsByTagName('text-url-path') #pfad auf text im neuen system + logging.debug(text); + if (text is not None) and len(text)>0: + texturl=getText(text[0].childNodes) + textBasisUrl=None + if hasattr(self,"getFullTextBasisUrl"): + textBasisUrl=self.getFullTextBasisUrl() + else: #default + textBasisUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/getDoc?doc=%s" + #Beispiel http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/getDoc?doc=/archimedes/la/achil_propo_087_la_1545.xml + logging.debug(textBasisUrl); + texturl=textBasisUrl%texturl + else: + text=texttools[0].getElementsByTagName('text') + texturl=getText(text[0].childNodes) #logger("ECHO Fulltext",logging.INFO,"found %s"%texturl) fh.close() @@ -645,17 +666,18 @@ class ECHO_resource(CatalogAware,Folder, """gibt pfad zum image aus""" return self.getImageView(noredirect="yes",onlyPath="yes") + def getArchivePathFromMetadata(self): + try: + archivePath=readFieldFromXML_xpath(self.metalink,"//resource/archive-path") + return archivePath + except: + return "" + def getImageView(self,noredirect=None,onlyPath=None): """getImages; give Imageviewr and if somthing goes wrong.""" try: - fh=ECHO_helpers.urlopen(self.metalink) - dom=xml.dom.minidom.parse(fh) - texttools=dom.getElementsByTagName('texttool') - text=texttools[0].getElementsByTagName('image') - imagetemp=getText(text[0].childNodes) - - text=dom.getElementsByTagName('archive-path') - archivepath=getText(text[0].childNodes) + archivePath=readFieldFromXML_xpath(self.metalink,"//resource/archive-path") + archivepath=re.sub('/mpiwg/online/','',archivepath) imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp fh.close() @@ -1055,8 +1077,8 @@ class ECHO_resource(CatalogAware,Folder, #noch nicht gecached - if not fieldName and hasattr(self.standardMD,ct): - fieldName=getattr(self.standardMD,ct).generateMappingHash()[fieldNameTest][0] + if not fieldName and hasattr(self.getStandardMD(),ct): + fieldName=getattr(self.getStandardMD(),ct).generateMappingHash()[fieldNameTest][0] self._v_mapHash[ct][fieldNameTest]=fieldName if not fieldName: fieldName=fieldNameTest @@ -1073,7 +1095,7 @@ class ECHO_resource(CatalogAware,Folder, ret= self.metaDataHash.get(fieldNameTest,empty) - + return unicodify(ret) getFieldValue=getMDValue #depricated @@ -1198,7 +1220,8 @@ class ECHO_resource(CatalogAware,Folder, def getMetaDataHash(self): """md hash""" - return self.metaDataHash + + return getattr(self,'metaDataHash',{}) def setFieldValue(self,field,value): """get value""" @@ -1210,17 +1233,28 @@ class ECHO_resource(CatalogAware,Folder, def copySearchFields(self): """copys metadatafields to the object""" - fields=['author','title','year'] + # Zunaechst die gnerischen felder + fields=['author','title','year'] for field in fields: - setattr(self,'MD_'+field,self.getMDValue(field,generic="yes")) - + setattr(self,'MD_'+field,self.getMDValue(field,generic="yes")) + + # jetzt die spezifischen + for field in self.getMetaDataHash().keys(): + + if (not field is None) and (not (field in fields)): + logging.debug("ECHO_resource (copySearchFields) mapping: "+field) + logging.debug("ECHO_resource (copySearchFields) mapping value : "+self.getMDValue(field)) + setattr(self,'MD_'+field,self.getMDValue(field)) + + + def findLabelsFromMapping(self,referenceType): """gib hash mit label -> generic zurueck""" #return {},[] - temp=self.ZopeFind(self.standardMD) + temp=self.ZopeFind(self.getStandardMD()) if referenceType=="": referenceType="book" @@ -1229,27 +1263,29 @@ class ECHO_resource(CatalogAware,Folder, bibdata={} retdata={} fields=[] - fieldlist=self.standardMD.fieldList + fieldlist=self.getStandardMD().fieldList tags=self.findTagsFromMapping(normalizeCt(self.contentType)) + logging.debug("ECHO_resource(findLabelsFromMapping)"+repr(tags)) self.referencetypes=tags[2] for referenceTypeF in self.referencetypes: - + logging.debug("--- compare"+normalizeCt(referenceTypeF[1].title)+normalizeCt(referenceType.lower())) if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()): - + try: - bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + bibdata[referenceTypeF[1].title]=referenceTypeF[1].getUsedFields() referenceType=referenceTypeF[1].title + logging.debug("------fields:"+repr(bibdata[referenceTypeF[1].title])) except: - bibdata[referenceType]=referenceTypeF[1].fields + bibdata[referenceType]=referenceTypeF[1].getUsedFields() bibdata['data']=referenceTypeF[1] fields=bibdata[referenceType] for field in fieldlist: retdata[field]=referenceTypeF[1].getValue(field)[1] - + return retdata,fieldlist,temp,fields def findTagsFromMapping(self,referenceType): @@ -1259,7 +1295,7 @@ class ECHO_resource(CatalogAware,Folder, if referenceType=="": referenceType="book" - temp = self.ZopeFind(self.standardMD)[0:] + temp = self.ZopeFind(self.getStandardMD())[0:] #self.referencetypes=temp[0:] @@ -1269,17 +1305,20 @@ class ECHO_resource(CatalogAware,Folder, bibdata={} retdata={} - fieldlist=self.standardMD.fieldList + fieldlist=self.getStandardMD().fieldList fields=[] for referenceTypeF in temp: #print referenceType if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()): try: - bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields + bibdata[referenceTypeF[1].title]=referenceTypeF[1].getUsedFields() referenceType=referenceTypeF[1].title except: - bibdata[referenceType]=referenceTypeF[1].fields + logging.debug("Error in ECHOresource(findTagsFromMapping): %s %s"%(sys.exc_info()[0],sys.exc_info()[1])) + logging.debug(referenceTypeF) + #TODO:CCCC + bibdata[referenceType]=referenceTypeF[1].getUsedFields() bibdata['data']=referenceTypeF[1] fields=bibdata[referenceType] for field in fieldlist: @@ -1293,8 +1332,7 @@ class ECHO_resource(CatalogAware,Folder, """copy MD von Index_meta to the echo_resource""" (metadict, error)=readMetadata(self.metalink) - - + logging.debug(metadict) self.metaDataHash={} if not error=="": #Fehler beim Auslesen des Metafiles @@ -1321,7 +1359,8 @@ class ECHO_resource(CatalogAware,Folder, def ECHO_getResourceMD(self,template="yes",back=None,overwrite="no"): """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource""" (metadict, error)=readMetadata(self.metalink) - + logging.debug("METADICT:") + logging.debug(metadict) if back: self.REQUEST.SESSION['back']=back @@ -1419,20 +1458,76 @@ class ECHO_resource(CatalogAware,Folder, def generate_label(self): """Erzeugt_standard_Label aus Template""" - pt=getattr(self,"label_template_"+normalizeCt(self.contentType).lower()) - - self.label=pt()[0:] - return pt() - - security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination + + templateName="label_template_"+normalizeCt(self.contentType).lower(); + if hasattr(self, templateName): + pt=getattr(self,templateName) + self.title=pt()[0:] + return pt() + else: + pt=getattr(self.metadata,templateName) + + mdHash={} + #mdHash={"author":self.getMDValue('author'),"title":self.getMDValue('title'),"year":self.MD_year} + #logging.debug(mdHash) + logging.debug("new format for template") + fields=['author','title','year'] + + for field in fields: + mdHash[field]=self.getMDValue(field); + + # jetzt die spezifischen + for field in self.getMetaDataHash().keys(): + + if (not field is None) and (not (field in fields)): + + logging.debug(field) + mdHash[field]=self.getMDValue(field); + + + self.title=pt(md=mdHash)[0:] + return pt(md=mdHash)[0:] + + + + + security.declarePublic('generate_title') # has to be change, presently set because of OSAS koordination def generate_title(self,RESPONSE=None): """Erzeugt_standard_Label aus Template""" - pt=getattr(self,"label_template_"+normalizeCt(self.contentType).lower()) - - self.title=pt()[0:] - return pt() + + templateName="label_template_"+normalizeCt(self.contentType).lower(); + if hasattr(self, templateName): + pt=getattr(self,templateName) + self.title=pt()[0:] + return pt() + else: + pt=getattr(self.metadata,templateName) + + mdHash={} + #mdHash={"author":self.getMDValue('author'),"title":self.getMDValue('title'),"year":self.MD_year} + #logging.debug(mdHash) + logging.debug("new format for template") + fields=['author','title','year'] + + for field in fields: + mdHash[field]=self.getMDValue(field); + + # jetzt die spezifischen + for field in self.getMetaDataHash().keys(): + + if (not field is None) and (not (field in fields)): + + logging.debug(field) + mdHash[field]=self.getMDValue(field); + + + self.title=pt(md=mdHash)[0:] + return pt(md=mdHash)[0:] + + + Globals.InitializeClass(ECHO_resource)