|
|
| version 1.4, 2005/03/03 20:41:00 | version 1.13, 2005/11/29 10:34:03 |
|---|---|
| Line 6 from OFS.Folder import Folder | Line 6 from OFS.Folder import Folder |
| from AccessControl import ClassSecurityInfo | from AccessControl import ClassSecurityInfo |
| from Products.PageTemplates.PageTemplateFile import PageTemplateFile | from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
| import os.path | import os.path |
| import sys | |
| import xml.dom.minidom | import xml.dom.minidom |
| import xml.dom.pulldom | import xml.dom.pulldom |
| import OSAS_helpers | import OSAS_helpers |
| import zLOG | import zLOG |
| import string | import string |
| import xml.xpath | try: |
| from xml.xpath import Evaluate | |
| except: | |
| from Ft.Xml.XPath import Evaluate | |
| import xmlrpclib | import xmlrpclib |
| from types import * | from types import * |
| Line 106 class OSAS_MetadataMapping(SimpleItem): | Line 110 class OSAS_MetadataMapping(SimpleItem): |
| if RESPONSE is not None: | if RESPONSE is not None: |
| RESPONSE.redirect('manage_main') | RESPONSE.redirect('manage_main') |
| manage_workspace=changeMetadataMappingForm | |
| def manage_addMetadataMappingForm(self): | def manage_addMetadataMappingForm(self): |
| """interface for adding the OSAS_root""" | """interface for adding the OSAS_root""" |
| Line 120 def manage_addMetadataMapping(self,idOfO | Line 124 def manage_addMetadataMapping(self,idOfO |
| argList={} | argList={} |
| for arg in self.fieldList: | for arg in self.fieldList: |
| if not (arg in ['idOfObject','titleOfObject']): | if not (arg in ['idOfObject','titleOfObject']): |
| argList[arg]=(self.REQUEST.form[arg],self.REQUEST.form['label_'+arg],self.REQUEST.form['explanation_'+arg],arglist['status_'+fieldName],arglist['values_'+fieldName]) | argList[arg]=(self.REQUEST.form[arg],self.REQUEST.form['label_'+arg],self.REQUEST.form['explanation_'+arg],self.REQUEST.form['status_'+arg],self.REQUEST.form['values_'+arg]) |
| newObj=OSAS_MetadataMapping(idOfObject,titleOfObject,argList) | newObj=OSAS_MetadataMapping(idOfObject,titleOfObject,argList) |
| self._setObject(idOfObject,newObj) | self._setObject(idOfObject,newObj) |
| Line 180 class OSAS_Metadata(Folder): | Line 184 class OSAS_Metadata(Folder): |
| def generateMappingList(self): | def generateMappingList(self): |
| """Erzeuge Mapping""" | """Erzeuge Mapping""" |
| mapping={} | mapping={} |
| for dict in self.__dict__: | for dict in self.__dict__: |
| #print dict | #print dict |
| obj=getattr(self,dict) | obj=getattr(self,dict) |
| if hasattr(obj,'meta_type'): | if hasattr(obj,'meta_type'): |
| if obj.meta_type=="OSAS_MetadataMapping": | if obj.meta_type=="OSAS_MetadataMapping__neu": |
| mapping[obj.getId()]=obj.generateMappingHash() | mapping[obj.getId()]=obj.generateMappingHash() |
| return mapping | return mapping |
| def generateMappingForType(self,type,clean="yes"): | def generateMappingForType(self,type,clean="yes"): |
| """erzeuge spezifisches Mapping""" | """erzeuge spezifisches Mapping""" |
| hash=self.generateMappingList() | hash=self.generateMappingList() |
| if hash.has_key(type): | |
| for key in hash.keys(): | |
| if (key.lower() == type.lower()): | |
| if clean=="yes": | if clean=="yes": |
| temp={} | temp={} |
| for x in hash[type].keys(): | for x in hash[key].keys(): |
| if not hash[type][x]=="": | if not hash[key][x]=="": |
| temp[x]=hash[type][x] | temp[x]=hash[key][x] |
| return temp | return temp |
| else: | else: |
| return hash[type] | |
| else: | return hash[key] |
| return {} | return {} |
| def getFieldList(self): | def getFieldList(self): |
| Line 211 class OSAS_Metadata(Folder): | Line 220 class OSAS_Metadata(Folder): |
| except: | except: |
| return "" | return "" |
| security.declarePublic('getFields') | |
| def getFields(self): | def getFields(self): |
| """ausgabe der Felder""" | """ausgabe der Felder""" |
| return self.fieldList | return self.fieldList |
| Line 238 class OSAS_Metadata(Folder): | Line 248 class OSAS_Metadata(Folder): |
| types=[] | types=[] |
| for obj in self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping_neu']): | for obj in self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping__neu']): |
| if obj.title=="": | if obj[1].title=="": |
| title=obj.id | title=obj[1].id |
| else: | else: |
| title=obj.title | title=obj[1].title |
| types.append((obj.id,title,obj)) | types.append((obj[1].id, title, obj[1])) |
| return types | return types |
| Line 262 class OSAS_Metadata(Folder): | Line 272 class OSAS_Metadata(Folder): |
| def getDisplayFieldsAsStr(self,indexMeta): | def getDisplayFieldsAsStr(self,indexMeta): |
| ret=[] | 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: |
| Line 284 class OSAS_Metadata(Folder): | Line 295 class OSAS_Metadata(Folder): |
| """nothing""" | """nothing""" |
| return "; ".join(ret) | return "; ".join(ret) |
| else: | |
| return "" | |
| except: | |
| return "" | |
| def getDisplayFieldsAsStrOLD(self,indexMeta): | def getDisplayFieldsAsStrOLD(self,indexMeta): |
| """Gebe display fields als string zurück | """Gebe display fields als string zurück |
| @param path: Pfad zum Object | @param path: Pfad zum Object |
| Line 384 class OSAS_Metadata(Folder): | Line 398 class OSAS_Metadata(Folder): |
| pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetadataForm_template.zpt')).__of__(self) | pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetadataForm_template.zpt')).__of__(self) |
| return pt() | 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): | def writeMetadata(self,MDF_path,MDF_type,form,MDF_prefix="",MDF_xpathStart="", MDF_addPath=None,MDF_identifyFields=None,newdoc=None,actualNode=None): |
| """writeMetadata""" | """writeMetadata""" |
| #MDF_path="/tmp/index.meta" | #MDF_path="/tmp/index.meta" |
| if type(MDF_path)==ListType: | if type(MDF_path)==ListType: |
| MDF_path=MDF_path[0] | MDF_path=MDF_path[0] |
| indexFile=os.path.join(MDF_path,'index.meta') | indexFile=os.path.join(MDF_path,'index.meta') |
| print "load index file",indexFile | |
| server=xmlrpclib.Server(self.serverUrl) | server=xmlrpclib.Server(self.serverUrl) |
| if newdoc: | if newdoc: |
| if not actualNode: actualNode=newdoc | if not actualNode: actualNode=newdoc |
| dom=newdoc | dom=newdoc |
| else: | else: |
| documentStr=server.getFile(indexFile) | documentStr=server.getFile(indexFile) |
| print indexFile | |
| print "ds",documentStr | |
| if documentStr: | if documentStr: |
| print "hhh" | |
| newdoc=xml.dom.minidom.parseString(documentStr) | newdoc=xml.dom.minidom.parseString(documentStr) |
| dom=newdoc.documentElement | dom=newdoc.documentElement |
| actualNode=dom | actualNode=dom |
| else: | else: |
| print "ho2" | |
| impl=xml.dom.minidom.getDOMImplementation() | impl=xml.dom.minidom.getDOMImplementation() |
| newdoc=None | newdoc=None |
| Line 438 class OSAS_Metadata(Folder): | Line 508 class OSAS_Metadata(Folder): |
| else: | else: |
| xpathStr=MDF_xpathStart | xpathStr=MDF_xpathStart |
| print xpathStr,actualNode | |
| xpathNodes=xml.xpath.Evaluate(xpathStr,actualNode) | xpathNodes=Evaluate(xpathStr,actualNode) |
| Line 450 class OSAS_Metadata(Folder): | Line 520 class OSAS_Metadata(Folder): |
| else: | else: |
| #existiert nicht dann neue erzeugen | #existiert nicht dann neue erzeugen |
| if len(xml.xpath.Evaluate(MDF_xpathStart,dom))>0: | if len(Evaluate(MDF_xpathStart,dom))>0: |
| create=True | create=True |
| Line 507 class OSAS_Metadata(Folder): | Line 577 class OSAS_Metadata(Folder): |
| actualNode.appendChild(namenode) | actualNode.appendChild(namenode) |
| ret=newdoc.toxml(encoding='utf-8') | ret=newdoc.toxml(encoding='utf-8') |
| zLOG.LOG("OSAS_metadata (writeMetadata)",zLOG.INFO,"write: %s"%ret) | |
| server.writeMetaDataFile(indexFile,ret) | server.writeMetaDataFile(indexFile,ret) |