--- ECHO_content/ECHO_resource.py 2008/12/17 12:12:27 1.2 +++ ECHO_content/ECHO_resource.py 2012/01/04 13:23:00 1.9 @@ -71,6 +71,7 @@ class ECHO_resource(CatalogAware,Folder, # viewClassificationList=viewClassificationListMaster + def PrincipiaSearchSource(self): """Return cataloguable key for ourselves.""" return str(self) @@ -204,7 +205,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) @@ -287,7 +292,13 @@ class ECHO_resource(CatalogAware,Folder, - + def getMetaLink(self): + return self.metalink + + def setMetaLink(self,ml): + self.metalink=ml + return + def getAccessRightMD(self): """set accessright""" url=self.metalink @@ -432,7 +443,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') @@ -451,7 +462,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()) @@ -617,8 +628,39 @@ 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) + + #TODO: hack has to be romoved, if index.meta for annalen are changed!! (DW) + if (texturl is not None) and (texturl.startswith("/mpiwg/online/permanent/einstein/annalen")): + texturl=texturl.replace("/mpiwg/online/permanent/einstein/annalen/","/diverse/de/") + splitted=texturl.split("/fulltext") + texturl=splitted[0]+".xml" + 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 + + + #logger("ECHO Fulltext",logging.INFO,"found %s"%texturl) fh.close() @@ -637,7 +679,9 @@ class ECHO_resource(CatalogAware,Folder, else: return texturl except: - + logging.debug(sys.exc_info()[0]) + logging.debug(sys.exc_info()[1]) + logging.debug(sys.exc_info()[2]) if not noredirect: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') self.REQUEST.RESPONSE.write("no fulltext available") @@ -648,17 +692,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() @@ -880,6 +925,9 @@ class ECHO_resource(CatalogAware,Folder, vl,msg=self.checkValidityOfMetaLink() + + + if not vl: #ungueltiger link, versuche neuen newStr=re.match(".*/mpiwg/online/(.*)",self.metalink) # suche pfad hinter /mpiwg/online oldLink=self.metalink @@ -897,6 +945,7 @@ class ECHO_resource(CatalogAware,Folder, logging.info("change Viewer (mew Metadatafile) %s"%self.metalink) if vl: + self.newViewer=newViewer return vl,msg else: @@ -1058,8 +1107,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 @@ -1076,7 +1125,7 @@ class ECHO_resource(CatalogAware,Folder, ret= self.metaDataHash.get(fieldNameTest,empty) - + return unicodify(ret) getFieldValue=getMDValue #depricated @@ -1201,7 +1250,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""" @@ -1213,17 +1263,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" @@ -1232,27 +1293,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): @@ -1262,7 +1325,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:] @@ -1272,17 +1335,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: @@ -1296,8 +1362,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 @@ -1324,7 +1389,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 @@ -1422,20 +1488,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) @@ -1455,4 +1577,4 @@ def manage_addECHO_resource(self,id,titl if RESPONSE is not None: RESPONSE.redirect('manage_main') - \ No newline at end of file +