--- OSA_system2/OSAS_metadata.py 2005/03/03 20:41:00 1.4 +++ OSA_system2/OSAS_metadata.py 2005/04/25 19:55:30 1.8 @@ -6,12 +6,16 @@ from OFS.Folder import Folder from AccessControl import ClassSecurityInfo from Products.PageTemplates.PageTemplateFile import PageTemplateFile import os.path +import sys import xml.dom.minidom import xml.dom.pulldom import OSAS_helpers import zLOG import string -import xml.xpath +try: + from xml.xpath import Evaluate +except: + from Ft.Xml.XPath import Evaluate import xmlrpclib from types import * @@ -262,29 +266,33 @@ class OSAS_Metadata(Folder): def getDisplayFieldsAsStr(self,indexMeta): ret=[] + try: + if indexMeta and not (indexMeta==""): + dom=xml.dom.pulldom.parseString(indexMeta) - dom=xml.dom.pulldom.parseString(indexMeta) + for (event,node) in dom: - for (event,node) in dom: + if event == xml.dom.pulldom.START_ELEMENT and node.tagName=="bib": + dom.expandNode(node) - if event == xml.dom.pulldom.START_ELEMENT and node.tagName=="bib": - dom.expandNode(node) - - try: - type=node.getAttribute('type') - mapping=getattr(self,type).generateMappingHash() - except: - type='generic' - mapping=getattr(self,type).generateMappingHash() - - for field in self.displayFields: try: - ret.append(OSAS_helpers.getText(node.getElementsByTagName(mapping[field][0])[0].childNodes)) + type=node.getAttribute('type') + mapping=getattr(self,type).generateMappingHash() except: - """nothing""" - - return "; ".join(ret) + type='generic' + mapping=getattr(self,type).generateMappingHash() + + for field in self.displayFields: + try: + ret.append(OSAS_helpers.getText(node.getElementsByTagName(mapping[field][0])[0].childNodes)) + except: + """nothing""" + return "; ".join(ret) + else: + return "" + except: + return "" def getDisplayFieldsAsStrOLD(self,indexMeta): """Gebe display fields als string zurück @param path: Pfad zum Object @@ -384,31 +392,87 @@ class OSAS_Metadata(Folder): pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetadataForm_template.zpt')).__of__(self) return pt() + def readMetadata(self,MDF_path,MDF_type,MDF_prefix="",MDF_xpathStart="", MDF_addPath=None,MDF_identifyFields=None,newdoc=None,actualNode=None): + + if type(MDF_path)==ListType: + MDF_path=MDF_path[0] + + indexFile=os.path.join(MDF_path,'index.meta') + + server=xmlrpclib.Server(self.serverUrl) + + documentStr=server.getFile(indexFile) + + if documentStr: + newdoc=xml.dom.minidom.parseString(documentStr) + dom=newdoc.documentElement + actualNode=dom + else: + return {} + + if self.containerTag=="": + containerTag="doc" + else: + containerTag=self.containerTag + + if MDF_xpathStart=="": + dom=newdoc.documentElement + actualNode=dom + else: + #try to find xpath + if MDF_identifyFields: + query=[] + for field in MDF_identifyFields.keys(): + + query.append("""(%s="%s")"""%(field,MDF_identifyFields[field])) + querystr=" and ".join(query) + xpathStr=MDF_xpathStart+"[%s]"%querystr + + else: + xpathStr=MDF_xpathStart + + + xpathNodes=Evaluate(xpathStr,actualNode) + + + if len(xpathNodes)>0: + actualNode=xpathNodes[0] + else: + return {} + + ret={} + for node in actualNode.childNodes: + name=node.tagName + text=OSAS_helpers.getText(node.childNodes) + ret[name]=text + + return ret + def writeMetadata(self,MDF_path,MDF_type,form,MDF_prefix="",MDF_xpathStart="", MDF_addPath=None,MDF_identifyFields=None,newdoc=None,actualNode=None): """writeMetadata""" #MDF_path="/tmp/index.meta" if type(MDF_path)==ListType: MDF_path=MDF_path[0] + indexFile=os.path.join(MDF_path,'index.meta') - print "load index file",indexFile + server=xmlrpclib.Server(self.serverUrl) if newdoc: if not actualNode: actualNode=newdoc dom=newdoc else: documentStr=server.getFile(indexFile) - print indexFile - print "ds",documentStr + if documentStr: - print "hhh" + newdoc=xml.dom.minidom.parseString(documentStr) dom=newdoc.documentElement actualNode=dom else: - print "ho2" + impl=xml.dom.minidom.getDOMImplementation() newdoc=None @@ -438,8 +502,8 @@ class OSAS_Metadata(Folder): else: xpathStr=MDF_xpathStart - print xpathStr,actualNode - xpathNodes=xml.xpath.Evaluate(xpathStr,actualNode) + + xpathNodes=Evaluate(xpathStr,actualNode) @@ -450,7 +514,7 @@ class OSAS_Metadata(Folder): else: #existiert nicht dann neue erzeugen - if len(xml.xpath.Evaluate(MDF_xpathStart,dom))>0: + if len(Evaluate(MDF_xpathStart,dom))>0: create=True