# HG changeset patch
# User dwinter
# Date 1347869641 -7200
# Node ID b3428e281ee239de99ad5b9ea82b6cd85b77b042
# Parent 40508e672841f56cc200ba6652c041a54e65161e
dcpmapping added to metadata
diff -r 40508e672841 -r b3428e281ee2 MetaData.py
--- a/MetaData.py Mon Aug 20 20:14:45 2012 +0200
+++ b/MetaData.py Mon Sep 17 10:14:01 2012 +0200
@@ -5,6 +5,7 @@
import logging
import xml.etree.ElementTree as ET
+import xml.sax.saxutils
from MetaDataMapping import MetaDataMapping
from SrvTxtUtils import getHttpData, getText
@@ -197,6 +198,16 @@
return data
+ def getDCDataFromPath(self,path):
+ """returns DC mapped data from path to index.meta"""
+ data=self.getData(path=path)
+ ret=""" """
+ for key,value in self.getDCMappedData(data).items():
+ ret+="""%s"""%(key,xml.sax.saxutils.escape(value),key)
+ ret+=""
+
+ return ret
+
def getMapping(self, type):
"""returns MetaDataMapping for type"""
# try type as id
diff -r 40508e672841 -r b3428e281ee2 MetaDataFolder.py
--- a/MetaDataFolder.py Mon Aug 20 20:14:45 2012 +0200
+++ b/MetaDataFolder.py Mon Sep 17 10:14:01 2012 +0200
@@ -203,6 +203,10 @@
"""returns dict with metadata descriptions and data for bibdata"""
return self.resource.meta.bib.getMappedData(bibdata, allFields=allFields)
+ def getDCDataFromPath(self,path):
+ """returns DC mapped data from path to index.meta"""
+ return self.resource.meta.bib.getDCDataFromPath(path)
+
def getDCMappedData(self, bibdata):
"""returns dict with DC keys and data from bibdata"""
return self.resource.meta.bib.getDCMappedData(bibdata)
diff -r 40508e672841 -r b3428e281ee2 OSAS_helpers.py
--- a/OSAS_helpers.py Mon Aug 20 20:14:45 2012 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,203 +0,0 @@
-# hilfsfunktionen
-import os.path
-from types import *
-import xml.dom.minidom
-import logging
-
-#ersetzt logging
-def logger(txt,method,txt2):
- """logging"""
- logging.info(txt+ txt2)
-
-
-
-OSASObjectTypes=['OSAS_metaDataFile','OSAS_dir','Osas_file','OSAS_imageFolder','OSAS_dir_archive','OSAS_file_archive','OSAS_videoFolder','OSAS_videoFile','OSAS_videoFolder']
-OSASDirObjects=['OSAS_dir','OSAS_imageFolder',]
-OSASExcludedFiles=['TheVolumeSettingsFolder','TheFindByContentFolder']
-
-
-def getText(nodelist):
- """gibt text aus nodelist"""
- rc = ""
- for node in nodelist:
- if node.nodeType == node.TEXT_NODE:
- rc = rc + node.data
- return rc
-
-def getMetaInfoFromXML(path,xmlInfo):
- """get index.meta and translate it to HTML"""
- html=[]
-
- dom = xml.dom.minidom.parseString(xmlInfo)
- try:
- name=getText(dom.getElementsByTagName("name")[0].childNodes)
- except:
- name="NOT_DEFINED!!!"
- try:
- creator=getText(dom.getElementsByTagName("creator")[0].childNodes)
- except:
- creator="NOT_DEFINED!!!"
-
- try:
- creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes)
- except:
- creation_date="NOT_DEFINED!!!"
-
- try:
- description=getText(dom.getElementsByTagName("description")[0].childNodes)
- except:
- description="NOT_DEFINED!!!"
-
- try:
- type=getText(dom.getElementsByTagName("content-type")[0].childNodes)
- except:
- type=""
- if type=="scanned document":
- html="
Document: "+name+"
"
- elif type=="folder":
- html="Folder: "+name+"
"
- else:
- html="Document: "+name+"
"
-
- html=html+"created by: "+creator+" at: "+creation_date+"
"
- html=html+"Description
"+description+"
"
- try:
- bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
- if bib.attributes.has_key('type'):
- html=html+"Info ("+bib.attributes['type'].value+")
"
- else:
- html=html+"Info
"
- html=html+getBib(bib.childNodes)
-
- except:
- """none"""
-
-# html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace')
-
-
- return html
-
-
-def getBib(nodelist):
- """ translate bibliographical entries """
- rc= ""
-
- for node in nodelist:
-
- if node.nodeType == node.ELEMENT_NODE:
- """nothing"""
-
- rc = rc+""+str(node.nodeName)+": | "+getText(node.childNodes)+" |
"
-
- #print rc
- return rc+"
"
-
-def getPropertyOfDirs(indexMeta,propertyName):
- """gibt Eigenschaften der directorys gemaess Index.metas file in path aus
- @param indexMeta: index.meta file
- @param propertyName: Property die ausgegebenwerden soll
- @return: Hash mit key name des Directories and Value von property, None if error.
- """
- ret={}
-
- try:
- dom=xml.dom.minidom.parseString(indexMeta)
-
- rootProp=xml.xpath.Evaluate("/resource/%s"%propertyName,dom)
- if len(rootProp)==1:
- property= getText(rootProp[0].childNodes)
- ret["."]=property
-
- for node in dom.getElementsByTagName("dir"):
- try:
- property= getText(node.getElementsByTagName(propertyName)[0].childNodes)
- dirName=getText(node.getElementsByTagName("name")[0].childNodes)
- ret[dirName]=property
- except:
- ret[dirName]=none
- return ret
- except:
-
- return ret
-
-
-def dirHasProperty(path,indexMeta,propertyName,propertyValue):
- """gibt 1 zurueck falls path hat propertyName und properName=propertyValue
- @param propertyName:Property von path in index.meta des parent folders von path
- @param propertyValue:Wert der Property
- @param path: Pfad der getestet werden soll
- """
- if getPropertyOfDirs(indexMeta,propertyName).get(os.path.split(path)[1],None)==propertyValue:
- return 1
- else:
- return 0
-
-def isImageFolder(path,indexMeta):
- """check if folder contains images without metadata or with metadata"""
- # metadaten ergeben imagefolder
- if dirHasProperty(path,indexMeta,'content-type','images'):
- return 1
-
-def isVideoFolder(path,indexMeta):
- """check if folder contains images without metadata or with metadata"""
- # metadaten ergeben imagefolder
-
- if dirHasProperty(path,indexMeta,'media-type','video'):
- return 1
-
-def isVideoStream(path,indexMeta):
- if dirHasProperty(path,indexMeta,'container-format','quicktime'):
- return 1
-
-def isImageFolderGuess(path):
- """check if folder contains images without metadata or with metadata"""
- #sonst rate ob folder images enthaelten durch test nach suffix
- try:
- dir=os.listdir(path)
-
- imagesuffixes=['.gif','.jpg','.jpeg','.png','.tiff','.tif']
- ret=""
- for a in dir:
-
- suffix=os.path.splitext(a)[1].lower()
-
- if suffix in imagesuffixes:
- return 1
-
- return 0
-
- except:
- return 0
-
-def checkOSASFileType(object):
- """checke filetype
- nicht erkannte type auf werden auf none gesetzt
- """
- if os.path.split(object)[1][0]=="." or os.path.split(object)[1] in OSASExcludedFiles:
- return None
- elif isImageFolderGuess(object):
- return 'OSAS_imageFolder'
- elif os.path.split(object)[1]=="index.meta":
- return 'OSAS_metaDataFile'
- elif os.path.isdir(object):
- return 'OSAS_dir'
- elif os.path.isfile(object):
- return 'OSAS_file'
-
-def toList(fields):
- """Einzelfeld in Liste umwandeln
- @param fields: String oder Array
- @return: gibt liste zurueck
-
- """
- if type(fields)==StringType:
- return [fields]
- else:
- return fields
-
-
-def localDate():
- """gives formatted local date"""
- return strftime("%d.%m.%Y",localtime())
-
-
diff -r 40508e672841 -r b3428e281ee2 OSAS_metadata.py
--- a/OSAS_metadata.py Mon Aug 20 20:14:45 2012 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,658 +0,0 @@
-""" Classes for managing metadata"""
-
-from OFS.SimpleItem import SimpleItem
-from Globals import InitializeClass,package_home
-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
-#TODO: get rid of this
-import OSAS_helpers
-import logging
-
-#ersetzt logging
-def logger(txt,method,txt2):
- """logging"""
- logging.info(txt+ txt2)
-
-
-import string
-try:
- from xml.xpath import Evaluate
-except:
- from Ft.Xml.XPath import Evaluate
-import xmlrpclib
-
-from types import *
-
-class OSAS_MetadataMapping(SimpleItem):
- """Einfaches Mapping Object"""
-
- meta_type="OSAS_MetadataMapping__neu"
-
- def readFieldsFromParent(self):
- """read all elements from root"""
-
- return self.aq_parent.fieldList
-
- def __init__(self,id,title,arglist):
- """init
- @param id: id
- @param title: title fuer zope navigation
- @param arglist: dictionary mit Namen der zugelassenen generische Metadaten als key und Tripel als Werte (human readable, tag version,explanation
- """
- self.id=id
- self.title=title
- for fieldName in arglist.keys():
- setattr(self,"md_"+fieldName,arglist[fieldName])
-
-
- manage_options = SimpleItem.manage_options+(
- {'label':'Main Config','action':'changeMetadataMappingForm'},
- )
-
-
- def showSetXML(self,RESPONSE=None):
- """prints out the mapping as XML"""
- ret=""""""%self.title
- for fieldName in self.readFieldsFromParent():
- entry=getattr(self,"md_"+fieldName)
- if entry[2]=="": # no explanation of this field
- ret+=""""""%(fieldName,entry[0],entry[1])
- else:
- ret+="""%s"""%(fieldName,entry[0],entry[1],entry[2])
- ret+=""
-
- if not RESPONSE:
- return ret
- else:
- self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
- return ret
-
- def getValue(self,fieldName):
- """get md value
- @param fieldName: Bezeichnung des gesuchten Metadatums
- @retunr: Value des Metadatums"""
-
- ret= getattr(self,"md_"+fieldName,(None,None,None,None,None))
- if len(ret)!= 4: # alte MD haben keine info ueber optional/required und listen werte
- ret=ret+("","")
- return ret
-
-
- def isEmptyValue(self,fieldName):
- """teste ob fielname in diesem Metadatenschema definiert ist"""
- field=getattr(self,"md_"+fieldName,'')
- if field[1]=='':
- return 0
- else:
- return 1
-
- def generateMappingHash(self):
- """erzeugen des dictionaries: generisches Feld -> Definition in diesem Schema"""
- hash={}
- for field in self.fieldList:
- hash[field]=getattr(self,"md_"+field,'')
- return hash
-
-
-
- def changeMetadataMappingForm(self):
- """change"""
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeMetadataMapping.zpt')).__of__(self)
- return pt()
-
- def changeMetadataMapping(self,titleOfObject,RESPONSE=None):
- """change"""
-
- self.title=titleOfObject
- arglist=self.REQUEST.form
-
- for fieldName in self.readFieldsFromParent():
- setattr(self,"md_"+fieldName,(arglist[fieldName],arglist['label_'+fieldName],arglist['explanation_'+fieldName],arglist['status_'+fieldName],arglist['values_'+fieldName]))
-
-
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
-
- manage_workspace=changeMetadataMappingForm
-
-def manage_addMetadataMappingForm(self):
- """interface for adding the OSAS_root"""
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetadataMappingForm.zpt')).__of__(self)
-
- return pt()
-
-def manage_addMetadataMapping(self,idOfObject,titleOfObject,RESPONSE=None):
- """add the OSAS_root"""
-
- argList={}
- for arg in self.fieldList:
- if not (arg in ['idOfObject','titleOfObject']):
- 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)
- self._setObject(idOfObject,newObj)
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
-
-
-
-class OSAS_Metadata(Folder):
- """Foldertype enthaelt methoden zur Halbautomatischen Erstellung von Metadatenfiles"""
- security=ClassSecurityInfo()
-
- def __init__(self,id,shortDescription,description,fields):
- """initialize a new instance"""
- self.id = id
- self.shortDescription =shortDescription #label fuer link auf add page
- self.description=description #description of the method for link page
- self.fieldList=fields.split(",")[0:]
-
- meta_type='OSAS_Metadata__neu'
-
- manage_options = Folder.manage_options+(
- {'label':'Main Config','action':'changeMetadataForm'},
- {'label':'Import XML Schema','action':'importXMLSchemaForm'},
- {'label':'Select Fields for Display','action':'indicateDisplayFieldsForm'},
- )
-
- def showGenericXML(self,RESPONSE=None):
- """show generic fields as XML"""
- ret=""""""%"generic"
- for field in self.fieldList:
- ret+=""""""%field
-
- ret+=""
-
- if not RESPONSE:
- return ret
- else:
- self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
- return ret
-
-
- def showOverviewXML(self,RESPONSE=None,wrapped=False):
- """gives an overview over the Metadata stored in this folder"""
- ret=""
- if wrapped:
- ret+=""""""
- ret+=""""""%self.getId()
- ret+=self.showGenericXML()
- for entry in self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping__neu']):
- ret+=entry[1].showSetXML()
-
- for entry in self.ZopeFind(self,obj_metatypes=['OSAS_Metadata__neu']):
- ret+=entry[1].showOverviewXML()
-
- ret+=""
-
- if wrapped:
- ret+=""""""
- if not RESPONSE:
- return ret
- else:
- RESPONSE.setHeader('Content-Type','text/xml')
- return ret
-
- def generateMappingList(self):
- """Erzeuge Mapping"""
- mapping={}
-
- for dict in self.__dict__:
- #print dict
- obj=getattr(self,dict)
- if hasattr(obj,'meta_type'):
- logging.debug("generateMappungList read type:"+repr(obj.meta_type))
- if ((obj.meta_type=="OSAS_MetadataMapping__neu") or (obj.meta_type=="MetadataMapping")): #metadatamapping is the newer type
- logging.debug("generateMappungListadded:"+repr(obj.getId()))
- mapping[obj.getId()]=obj.generateMappingHash()
-
- return mapping
-
- def generateMappingForType(self,type,clean="yes"):
- """erzeuge spezifisches Mapping"""
-
- hash=self.generateMappingList()
- logging.debug("generateMappingForType:"+type)
- for key in hash.keys():
- logging.debug("generateMappingForType comparing:"+key.lower()+type.lower())
- if (key.lower() == type.lower()):
- if clean=="yes":
- temp={}
- for x in hash[key].keys():
- if not hash[key][x]=="":
- temp[x]=hash[key][x]
- return temp
- else:
-
- return hash[key]
-
- return {}
-
- def getFieldList(self):
- """erzeuge string aus fields"""
- try:
- return string.join(self.fieldList,",")
- except:
- return ""
-
- security.declarePublic('getFields')
- def getFields(self):
- """ausgabe der Felder"""
- return self.fieldList
-
- def getTypeTitle(self,id):
- """Title von ID"""
- try:
- obj=getattr(self,id)
- return obj.title
- except:
- return id
-
- def getType(self,type):
- """gib metadataobject type zurueck"""
-
- for obj in self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping__neu']):
- if obj[0]==type:
- return obj
- return (self.id,self)
-
-
-
- def getStoredTypes(self):
- """Gebe gespeicherte typen zurueck"""
-
- types=[]
-
- for obj in self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping__neu']):
- if obj[1].title=="":
- title=obj[1].id
- else:
- title=obj[1].title
- types.append((obj[1].id, title, obj[1]))
-
- return types
-
- def indicateDisplayFieldsForm(self):
- """form zur Makierung der Felder die in der Browserumgebung angezeigt werden"""
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','indicateDisplayFieldsForm.zpt')).__of__(self)
- return pt()
-
- def indicateDisplayFields(self,displayFields,RESPONSE=None):
- """set Displayfields
- @param displayFields: Liste von Felder die im Browserenvironment angezeigt werden
- """
- self.displayFields=OSAS_helpers.toList(displayFields)
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
-
- def getDisplayFieldsAsStr(self,indexMeta):
- ret=[]
- try:
- if indexMeta and not (indexMeta==""):
- dom=xml.dom.pulldom.parseString(indexMeta)
-
- for (event,node) in dom:
-
- 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))
- except:
- """nothing"""
-
- return "; ".join(ret)
- else:
- return ""
- except:
- return ""
- def getDisplayFieldsAsStrOLD(self,indexMeta):
- """Gebe display fields als string zurueck
- @param path: Pfad zum Object
- """
- ret=[]
- try:
- dom=xml.dom.minidom.parseString(indexMeta)
- except:
- logger("OSAS_metadata (getDisplayFieldsAsStr)",logging.INFO,"Cannot parse: %s"%indexMeta)
- try:
- bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
- except:
- return ""
- try:
- type=bib.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(bib.getElementsByTagName(mapping[field][0])[0].childNodes))
- except:
- """nothing"""
-
- return "; ".join(ret)
-
- security.declarePublic('changeMetadataForm')
- def changeMetadataForm(self):
- """Main configuration"""
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeMetadata.zpt')).__of__(self)
- return pt()
-
- security.declarePublic('changeMetadata')
- def changeMetadata(self,shortDescription,description,fields,RESPONSE=None):
- """Change Metadata"""
- self.shortDescription=shortDescription
- self.description=description
- self.fieldList=fields.split(",")[0:]
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
-
- security.declarePublic('index_html')
-
- def importXMLSchemaForm(self):
- """form"""
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importXMLSchemaForm.zpt')).__of__(self)
- return pt()
-
-
- def importXMLSchema(self,file,RESPONSE=None):
- """import xmlschema, Metadatenschema wird eingelesen und entsprechende Metadatenmappings angelegt."""
-
- dom=xml.dom.minidom.parse(file)
- sets=dom.getElementsByTagName('set')
- #erster schritt: anlegen der fieldlist
- for set in sets:
- if set.getAttribute('name')=='generic':
- list=[]
- for entry in set.getElementsByTagName('entry'):
- list.append(entry.getAttribute('genericName'))
- self.fieldList=list[0:]
-
- #zweiter schritt: anlegen der mapping
- for set in sets:
- id=set.getAttribute('name').encode('utf-8')
- list=[]
- argList={}
- for entry in set.getElementsByTagName('entry'):
- genericName=entry.getAttribute('genericName')
- tag=entry.getAttribute('tag')
- label=entry.getAttribute('label')
- description=OSAS_helpers.getText(entry.childNodes)
- argList[genericName]=(tag,label,description)
- self._setObject(id,OSAS_MetadataMapping(id,id,argList))
- if RESPONSE:
- RESPONSE.write("Wrote: %s"%id)
-
-
- def createMetadataFragment(self,type,path,prefix="",presets={}):
- """fragment"""
- self.REQUEST.SESSION['MDF_type']=type
- self.REQUEST.SESSION['MDF_path']=path
- self.REQUEST.SESSION['MDF_prefix']=prefix
- self.REQUEST.SESSION['MDF_presets']=presets
-
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetadataForm_fragment.zpt')).__of__(self)
- return pt()
-
- def createMetadataForm(self,type="",path=""):
- """createMetadataForm"""
- self.REQUEST.SESSION['MDF_type']=type
- self.REQUEST.SESSION['MDF_path']=path
-
-
- 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')
-
- server=xmlrpclib.Server(self.serverUrl)
- if newdoc:
- if not actualNode: actualNode=newdoc
- dom=newdoc
- else:
- documentStr=server.getFile(indexFile)
-
- if documentStr:
-
- newdoc=xml.dom.minidom.parseString(documentStr)
- dom=newdoc.documentElement
- actualNode=dom
-
-
- else:
-
- impl=xml.dom.minidom.getDOMImplementation()
- newdoc=None
-
-
- if self.containerTag=="":
- containerTag="doc"
- else:
- containerTag=self.containerTag
-
- create=None
- if MDF_xpathStart=="":
- if not newdoc:
- newdoc=impl.createDocument(None,containerTag,None)
- dom=newdoc.documentElement
- actualNode=dom
- else:
-
- #try to find xpath
- if MDF_identifyFields:
- query=[]
- for field in MDF_identifyFields:
-
- query.append("""(%s="%s")"""%(field,form[MDF_prefix+"MD_"+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:
- #existiert nicht dann neue erzeugen
-
- if len(Evaluate(MDF_xpathStart,dom))>0:
-
- create=True
-
- splitted=MDF_xpathStart.split("/")
- base=""
- for element in splitted:
-
- if not (element=="") and not (element==containerTag):
- base="/".join([base,element])
-
- if not newdoc:
- newdoc=impl.createDocument(None,element,None)
- actualNode=newdoc.documentElement
- dom=actualNode
- else:
- changed=None
-
- if not (MDF_addPath==base):
-
-
- for childNode in actualNode.childNodes:
- if getattr(childNode,'tagName','')==element:
- actualNode=childNode
- changed=1
-
- if (os.path.normpath("/".join(["",containerTag,base]))==MDF_xpathStart) and create:
- actualNode=actualNode.parentNode
- changed=None
-
- if not changed:
- namenode=newdoc.createElement(element)
-
- actualNode.appendChild(namenode)
- actualNode=namenode
-
-
-
-
- for name in self.REQUEST.form.keys():
- length=len(MDF_prefix)
- if MDF_type and not (MDF_type == ""):
- actualNode.setAttribute("type",MDF_type)
- if name[0:3+length]==MDF_prefix+"MD_":
- tagName=name[3+length:]
-
- #CHECK if element exists
- for childNode in actualNode.childNodes:
- if getattr(childNode,'tagName','')==tagName:
- actualNode.removeChild(childNode).unlink()
-
- namenode=newdoc.createElement(tagName)
- namenodetext=newdoc.createTextNode(self.REQUEST.form[name])
- namenode.appendChild(namenodetext)
- actualNode.appendChild(namenode)
-
- ret=newdoc.toxml(encoding='utf-8')
- zLOG.LOG("OSAS_metadata (writeMetadata)",zLOG.INFO,"write: %s"%ret)
-
-
- server.writeMetaDataFile(indexFile,ret)
-
-
- return newdoc,actualNode
-
- def writeMetadataFile(self,MDF_path,MDF_type,MDF_xpathStart="",newdoc=None,actualNode=None):
- """writeMetaFile"""
-
- return self.writeMetadata(MDF_path,MDF_type,self.REQUEST.form,MDF_xpathStart=MDF_xpathStart,newdoc=newdoc,actualNode=actualNode)
-
-
- def isEmptyValue(self,fieldName):
- """im generischen fall stets falsch"""
- return 1
-
- def getValue(self,fieldName):
- """im generischen fall gleich fieldname"""
- return fieldName,fieldName,"","",""
-
- def getList(self,list):
- """return list"""
-
- if list=="":
- return None
- listsplit=[i.rstrip() for i in list.split("\n")]
- return listsplit
-
- def showHelp(self,refType,genericTag):
- """helptext"""
- for reference in self.ZopeFind(self):
- if reference[1].title==refType:
- text=getattr(reference[1],'md_'+genericTag)[2]
- return text
- return "NO EXPLANATION"
-
- def showHelpTag(self,url,reftype,item):
- """gen javascript for showhelp"""
- url2=url+'/showHelp?refType=%s&genericTag=%s'%(reftype,item)
- ret="""javascript:wd=window.open(\'%s\',\'Help\',\'width=300,height=250\');void(\'\');wd.focus();"""%url2
- return ret
-
-
-def manage_addMetadataForm(self):
- """interface for adding the OSAS_add_Metadata"""
- pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetadataForm.zpt')).__of__(self)
- return pt()
-
-def manage_addMetadata(self,id,shortDescription,description,fields,RESPONSE=None):
- """add the OSAS_root"""
- newObj=OSAS_Metadata(id,shortDescription,description,fields)
- self.Destination()._setObject(id,newObj)
- if RESPONSE is not None:
- RESPONSE.redirect('manage_main')
-
-
-