Diff for /OSA_system2/OSAS_metadata.py between versions 1.4 and 1.19

version 1.4, 2005/03/03 20:41:00 version 1.19, 2010/10/11 13:15:37
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 logging
   
   #ersetzt logging
   def logger(txt,method,txt2):
       """logging"""
       logging.info(txt+ txt2)
   
   
 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 83  class OSAS_MetadataMapping(SimpleItem): Line 94  class OSAS_MetadataMapping(SimpleItem):
         """erzeugen des dictionaries: generisches Feld -> Definition in diesem Schema"""          """erzeugen des dictionaries: generisches Feld -> Definition in diesem Schema"""
         hash={}          hash={}
         for field in self.fieldList:          for field in self.fieldList:
             hash[field]=getattr(self,"md_"+field)              hash[field]=getattr(self,"md_"+field,'')
         return hash          return hash
   
                 
Line 106  class OSAS_MetadataMapping(SimpleItem): Line 117  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 131  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 130  def manage_addMetadataMapping(self,idOfO Line 141  def manage_addMetadataMapping(self,idOfO
         
   
 class OSAS_Metadata(Folder):  class OSAS_Metadata(Folder):
     """Foldertype enthält methoden zur Halbautomatischen Erstellung von Metadatenfiles"""      """Foldertype enthaelt methoden zur Halbautomatischen Erstellung von Metadatenfiles"""
     security=ClassSecurityInfo()      security=ClassSecurityInfo()
           
     def __init__(self,id,shortDescription,description,fields):      def __init__(self,id,shortDescription,description,fields):
Line 162  class OSAS_Metadata(Folder): Line 173  class OSAS_Metadata(Folder):
             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')              self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
             return ret              return ret
                   
     def showOverviewXML(self,RESPONSE):    
       def showOverviewXML(self,RESPONSE=None,wrapped=False):
         """gives an overview over the Metadata stored in this folder"""          """gives an overview over the Metadata stored in this folder"""
         ret="""<metadata name="%s">"""%self.getId()          ret=""
           if wrapped:
               ret+="""<metadataExport>"""
           ret+="""<metadata name="%s">"""%self.getId()
         ret+=self.showGenericXML()          ret+=self.showGenericXML()
         for entry in self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping']):          for entry in self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping__neu']):
             ret+=entry[1].showSetXML()              ret+=entry[1].showSetXML()
   
           for entry in self.ZopeFind(self,obj_metatypes=['OSAS_Metadata__neu']):
               ret+=entry[1].showOverviewXML()
   
         ret+="</metadata>"          ret+="</metadata>"
   
           if wrapped:
               ret+="""</metadataExport>"""
         if not RESPONSE:          if not RESPONSE:
             return ret              return ret
         else:          else:
             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')              RESPONSE.setHeader('Content-Type','text/xml')
             return ret              return ret
                   
     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":                  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()                      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):          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":              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 239  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 234  class OSAS_Metadata(Folder): Line 263  class OSAS_Metadata(Folder):
                   
                   
     def getStoredTypes(self):      def getStoredTypes(self):
         """Gebe gespeicherte typen zurück"""          """Gebe gespeicherte typen zurueck"""
                   
         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 291  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 314  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 zurueck
         @param path: Pfad zum Object          @param path: Pfad zum Object
         """          """
         ret=[]          ret=[]
         try:          try:
             dom=xml.dom.minidom.parseString(indexMeta)              dom=xml.dom.minidom.parseString(indexMeta)
         except:          except:
             zLOG.LOG("OSAS_metadata (getDisplayFieldsAsStr)",zLOG.INFO,"Cannot parse: %s"%indexMeta)              logger("OSAS_metadata (getDisplayFieldsAsStr)",logging.INFO,"Cannot parse: %s"%indexMeta)
         try:          try:
             bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]              bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
         except:          except:
Line 384  class OSAS_Metadata(Folder): Line 417  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 527  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 539  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 596  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)
   
Line 532  class OSAS_Metadata(Folder): Line 623  class OSAS_Metadata(Folder):
   
         if list=="":          if list=="":
             return None              return None
         listsplit=list.split("\n")          listsplit=[i.rstrip() for i in list.split("\n")]
         return listsplit          return listsplit
   
     def showHelp(self,refType,genericTag):      def showHelp(self,refType,genericTag):
Line 563  def manage_addMetadata(self,id,shortDesc Line 654  def manage_addMetadata(self,id,shortDesc
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')
   
                           
 InitializeClass(OSAS_Metadata)  

Removed from v.1.4  
changed lines
  Added in v.1.19


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>