File:  [Repository] / ZSQLExtend / ZSQLMetaData.py
Revision 1.4: download - view: text, annotated - select for diffs - revision graph
Mon Sep 3 13:06:11 2012 UTC (11 years, 8 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
ohne osas
ohne amara

#objekte zur erzeugung und verwaltung von metadaten

from OFS.Folder import Folder
from Globals import Persistent
from Acquisition import Implicit
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Products.PageTemplates.PageTemplate import PageTemplate
from OFS.SimpleItem import SimpleItem

import string


class ZSQLMetadataMapping(SimpleItem):
    """Einfaches Mapping Object"""

    meta_type="ZSQLMetadataMapping"

    def readFieldsFromParent(self):
        """read all elements from root"""
        return self.ac_parent.fields
    
    def __init__(self,id,title,arglist):
        """init"""
        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':'change_ZSQLMappingForm'},
        )

    def getValue(self,fieldName):
        """get md value"""
        try:
            return getattr(self,"md_"+fieldName)
        except:
            return ""
        
    def generateMappingHash(self):
        """erzeugen des Hash"""
        hash={}
        for field in self.fieldList:
            hash[field]=getattr(self,"md_"+field)
        return hash

   
    
    def change_ZSQLMappingForm(self):
        """change"""
        pt=PageTemplateFile('Products/ZSQLExtend/ChangeZSQLMetadataMapping.zpt').__of__(self)
        return pt()
    
    def change_ZSQLMapping(self,titleOfObject,RESPONSE=None):
        """change"""

        self.title=titleOfObject
        arglist=self.REQUEST.form
        for fieldName in arglist.keys():
            setattr(self,"md_"+fieldName,arglist[fieldName])

        if RESPONSE is not None:
            RESPONSE.redirect('manage_main')

    

def manage_addZSQLMetadataMappingForm(self):
    """interface for adding the Metadatamapping"""
    pt=PageTemplateFile('Products/ZSQLExtend/AddZSQLMetadataMapping.zpt').__of__(self)
    return pt()

def manage_addZSQLMetadataMapping(self,idOfObject,titleOfObject,RESPONSE=None):
    """add the Metadatampapping"""
    
    argList={}
    for arg in self.REQUEST.form.keys():
        if not (arg in ['idOfObject','titleOfObject']):
            argList[arg]=self.REQUEST.form[arg]
        
    newObj=ZSQLMetadataMapping(idOfObject,titleOfObject,argList)
    self._setObject(idOfObject,newObj)
    if RESPONSE is not None:
        RESPONSE.redirect('manage_main')

   
class ZSQLMetadataMappingRoot(Persistent, Implicit, Folder):
    """Root ordner fuer Metadaten set"""

    meta_type='ZSQLMetadataMappingRoot'

    def __init__(self,id,title,fields):
        self.id=id
        self.title=title
        
        self.fieldList=fields.split(",")[0:]

    
    manage_options = Folder.manage_options+(
        {'label':'Main Config','action':'change_ZSQLMappingRootForm'},
        )


    def generateMappingList(self):
        """Erzeuge Mapping"""
        mapping={}
        for dict in self.__dict__:
            #print dict
            obj=getattr(self,dict)
            if hasattr(obj,'meta_type'):
                if obj.meta_type=="ZSQLMetadataMapping":
                    mapping[obj.getId()]=obj.generateMappingHash()
        return mapping
    
    def generateMappingForType(self,type,clean="yes"):
        """erzeuge spezifisches Mapping"""
        hash=self.generateMappingList()
        if hash.has_key(type):
            if clean=="yes":
                temp={}
                for x in hash[type].keys():
                    if not hash[type][x]=="":
                        temp[x]=hash[type][x]
                return temp
            else:
                return hash[type]
        
        else:
            return {}

    def getFieldList(self):
        """erzeuge string aus fields"""
        return string.join(self.fieldList,",")

    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 getStoredTypes(self):
        """Gebe gespeicherte typen zurueck"""
        
        types=[]
        for dict in self.__dict__:
            
            obj=getattr(self,dict)
            if hasattr(obj,'meta_type'):
                if obj.meta_type=="ZSQLMetadataMapping":
                    #print obj
                    if obj.title=="":
                        title=obj.id
                    else:
                        title=obj.title
                    types.append((obj.id,title))
        return types
    
    def change_ZSQLMappingRootForm(self):
        """change"""
        pt=PageTemplateFile('Products/ZSQLExtend/ChangeZSQLMetadataMappingRoot.zpt').__of__(self)
        return pt()


    def change_ZSQLMetadataMapping(self,title,fields,RESPONSE=None):
        """change entries"""
        self.title=title
        self.fieldList=fields.split(",")[0:]

        if RESPONSE is not None:
            RESPONSE.redirect('manage_main')

    

def manage_addZSQLMetadataMappingRootForm(self):
    """interface for adding the OSAS_root"""
    pt=PageTemplateFile('Products/ZSQLExtend/AddZSQLMetadataMappingRoot.zpt').__of__(self)
    return pt()

def manage_addZSQLMetadataMappingRoot(self,id,title,fields,RESPONSE=None):
    """add the mapping root"""
    newObj=ZSQLMetadataMappingRoot(id,title,fields)
    self._setObject(id,newObj)
    if RESPONSE is not None:
        RESPONSE.redirect('manage_main')

    

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