--- OSAS/OSA_system/OSAS_metadata.py 2003/10/11 16:44:23 1.3 +++ OSAS/OSA_system/OSAS_metadata.py 2005/11/29 13:54:50 1.11 @@ -5,8 +5,8 @@ import addFolder import OSAS_add # methods for adding metadata and/or files -from Globals import InitializeClass -from Globals import Persistent +from Globals import InitializeClass,Persistent,package_home + from OFS.Folder import Folder from OFS.SimpleItem import SimpleItem from Products.PageTemplates.PageTemplateFile import PageTemplateFile @@ -18,20 +18,135 @@ from Shared.DC.Scripts.Script import Scr from OFS.PropertyManager import PropertyManager from ExtensionClass import Base from Acquisition import Implicit - +import string +import os from AccessControl import ClassSecurityInfo +class OSAS_MetadataMapping(SimpleItem): + """Einfaches Mapping Object""" + + meta_type="OSAS_MetadataMapping" + + def readFieldsFromParent(self): + """read all elements from root""" + #print self.getId() + return self.aq_parent.fieldList + + def __init__(self,id,title,arglist,fieldList): + """init""" + self.id=id + self.title=title + self.fields=[] + + for fieldName in fieldList: + setattr(self,"md_"+fieldName,arglist[fieldName]) + self.fields.append(arglist[fieldName]) + + manage_options = SimpleItem.manage_options+( + {'label':'Main Config','action':'change_OSAS_MappingForm'}, + ) + + + 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""" + + try: + return getattr(self,"md_"+fieldName) + except: + return (None,None,None) + + def isEmptyValue(self,fieldName): + """empty""" + try: + field=getattr(self,"md_"+fieldName) + if field[1]=='': + return 0 + else: + return 1 + except: + return 0 + + def generateMappingHash(self): + """erzeugen des Hash""" + hash={} + for field in self.fieldList: + hash[field]=getattr(self,"md_"+field,'') + return hash + + + + def change_OSAS_MappingForm(self): + """change""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeOSAS_MetadataMapping.zpt')).__of__(self) + return pt() + + def change_OSAS_Mapping(self,titleOfObject,RESPONSE=None): + """change""" + + self.title=titleOfObject + arglist=self.REQUEST.form + self.fields=[] + + + for fieldName in self.readFieldsFromParent(): + + setattr(self,"md_"+fieldName,(arglist[fieldName],arglist['label_'+fieldName],arglist['explanation_'+fieldName])) + self.fields.append(arglist[fieldName]) + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + +def manage_addOSAS_MetadataMappingForm(self): + """interface for adding the OSAS_root""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_MetadataMapping.zpt')).__of__(self) + return pt() + +def manage_addOSAS_MetadataMapping(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]) + + newObj=OSAS_MetadataMapping(idOfObject,titleOfObject,argList,self.fieldList) + self._setObject(idOfObject,newObj) + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + + class OSAS_add_Metadata(Folder): """Foldertype enthält methoden zur Halbautomatischen Erstellung von Metadatenfiles""" security=ClassSecurityInfo() - def __init__(self,id,linklabel,description): + def __init__(self,id,linklabel,description,fields): """initialize a new instance""" self.id = id self.linklabel =linklabel #label fuer link auf add page self.description=description #description of the method for link page + self.fieldList=fields.split(",")[0:] meta_type='OSAS_add_Metadata' @@ -39,26 +154,115 @@ class OSAS_add_Metadata(Folder): {'label':'Main Config','action':'add_Metadata_config'}, ) + 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): + """gives an overview over the Metadata stored in this folder""" + ret=""""""%self.getId() + ret+=self.showGenericXML() + for entry in self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping']): + ret+=entry[1].showSetXML() + + ret+="" + + if not RESPONSE: + return ret + else: + self.REQUEST.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'): + if obj.meta_type=="OSAS_MetadataMapping": + 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""" + try: + return string.join(self.fieldList,",") + except: + return "" + + 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 zurück""" + + types=[] + for dict in self.__dict__: + + obj=getattr(self,dict) + if hasattr(obj,'meta_type'): + if obj.meta_type=="OSAS_MetadataMapping": + #print obj + if obj.title=="": + title=obj.id + else: + title=obj.title + types.append((obj.id,title)) + return types security.declarePublic('add_Metadata_config') def add_Metadata_config(self): """Main configuration""" - pt=PageTemplateFile('Products/OSA_system/ChangeOSAS_addMetadata.zpt').__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeOSAS_addMetadata.zpt')).__of__(self) return pt() security.declarePublic('change_OSAS_addMetadata') - def change_OSAS_addMetadata(self,linklabel,description,RESPONSE=None): + def change_OSAS_addMetadata(self,linklabel,description,fields,RESPONSE=None): """Change Metadata""" self.linklabel=linklabel self.description=description - + self.fieldList=fields.split(",")[0:] if RESPONSE is not None: RESPONSE.redirect('manage_main') security.declarePublic('index_html') def index_html(self): - """stantard aufruf""" + """standard aufruf""" return OSAS_add.add(self,no_upload=0) @@ -74,15 +278,18 @@ class OSAS_add_Metadata(Folder): def add6(self): """write new index.meta file""" return OSAS_add.add6(self) + + + def manage_AddOSAS_add_MetadataForm(self): """interface for adding the OSAS_add_Metadata""" - pt=PageTemplateFile('Products/OSA_system/AddOSAS_metadata.zpt').__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_metadata.zpt')).__of__(self) return pt() -def manage_AddOSAS_add_Metadata(self,id,linklabel,description,RESPONSE=None): +def manage_AddOSAS_add_Metadata(self,id,linklabel,description,fields,RESPONSE=None): """add the OSAS_root""" - newObj=OSAS_add_Metadata(id,linklabel,description) + newObj=OSAS_add_Metadata(id,linklabel,description,fields) self.Destination()._setObject(id,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main')