--- ECHO_content/ECHO_resource.py 2009/04/14 16:32:00 1.4
+++ 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)
@@ -291,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
@@ -436,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')
@@ -455,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())
@@ -621,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()
@@ -641,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")
@@ -654,25 +694,16 @@ class ECHO_resource(CatalogAware,Folder,
def getArchivePathFromMetadata(self):
try:
- fh=ECHO_helpers.urlopen(self.metalink)
- dom=xml.dom.minidom.parse(fh)
- archivePath=dom.getElementsByTagName('archive-path')
- text = getText(archivePath[0].childNodes)
- return text
+ 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()
@@ -894,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
@@ -911,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:
@@ -1072,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
@@ -1090,7 +1125,7 @@ class ECHO_resource(CatalogAware,Folder,
ret= self.metaDataHash.get(fieldNameTest,empty)
-
+
return unicodify(ret)
getFieldValue=getMDValue #depricated
@@ -1215,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"""
@@ -1227,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"
@@ -1246,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):
@@ -1276,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:]
@@ -1286,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:
@@ -1310,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
@@ -1338,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
@@ -1436,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()
+
+ 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)):
- security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination
+ 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())
+
+
+ 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)):
- self.title=pt()[0:]
+ logging.debug(field)
+ mdHash[field]=self.getMDValue(field);
+
+
+ self.title=pt(md=mdHash)[0:]
+ return pt(md=mdHash)[0:]
+
+
- return pt()
Globals.InitializeClass(ECHO_resource)
@@ -1469,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
+