Annotation of OSAS/OSA_system/OSAS_metadata.py, revision 1.9

1.1       dwinter     1: # Classen zur Produktion von Metataden
                      2: 
                      3: # Classes for displaying, browsing and organizing the archive
                      4: 
                      5: import addFolder
                      6: import OSAS_add # methods for adding metadata and/or files
                      7: 
                      8: from Globals import InitializeClass
                      9: from Globals import Persistent
                     10: from OFS.Folder import Folder
                     11: from OFS.SimpleItem import SimpleItem
                     12: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                     13: from Products.PageTemplates.PageTemplate import PageTemplate
                     14: from OFS.Traversable import Traversable
                     15: from OFS.Cache import Cacheable
                     16: from OFS.History import Historical, html_diff
                     17: from Shared.DC.Scripts.Script import Script, BindingsUI
                     18: from OFS.PropertyManager import PropertyManager
                     19: from ExtensionClass import Base
                     20: from Acquisition import Implicit
1.5       dwinter    21: import string
                     22: from AccessControl import ClassSecurityInfo
                     23: 
                     24: 
                     25: class OSAS_MetadataMapping(SimpleItem):
                     26:     """Einfaches Mapping Object"""
                     27: 
                     28:     meta_type="OSAS_MetadataMapping"
                     29: 
                     30:     def readFieldsFromParent(self):
                     31:         """read all elements from root"""
1.6       dwinter    32:         #print self.getId()
1.5       dwinter    33:         return self.aq_parent.fieldList
                     34:     
1.6       dwinter    35:     def __init__(self,id,title,arglist,fieldList):
1.5       dwinter    36:         """init"""
                     37:         self.id=id
                     38:         self.title=title
                     39:         self.fields=[]
                     40:         
1.6       dwinter    41:         for fieldName in fieldList:
1.5       dwinter    42:             setattr(self,"md_"+fieldName,arglist[fieldName])
                     43:             self.fields.append(arglist[fieldName])
                     44:             
                     45:     manage_options = SimpleItem.manage_options+(
                     46:         {'label':'Main Config','action':'change_OSAS_MappingForm'},
                     47:         )
                     48: 
1.9     ! dwinter    49: 
        !            50:     def showSetXML(self,RESPONSE=None):
        !            51:         """prints out the mapping as XML"""
        !            52:         ret="""<set name="%s">"""%self.title
        !            53:         for fieldName in self.readFieldsFromParent():
        !            54:             entry=getattr(self,"md_"+fieldName)
        !            55:             if entry[2]=="": # no explanation of this field
        !            56:                 ret+="""<entry genericName="%s" tag="%s" label="%s"/>"""%(fieldName,entry[0],entry[1])
        !            57:             else:
        !            58:                 ret+="""<entry genericName="%s" tag="%s" label="%s">%s</entry>"""%(fieldName,entry[0],entry[1],entry[2])
        !            59:         ret+="</set>"
        !            60: 
        !            61:         if not RESPONSE:
        !            62:             return ret
        !            63:         else:
        !            64:             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
        !            65:             return ret
        !            66: 
1.5       dwinter    67:     def getValue(self,fieldName):
                     68:         """get md value"""
1.7       dwinter    69: 
1.5       dwinter    70:         try:
                     71:             return getattr(self,"md_"+fieldName)
                     72:         except:
1.7       dwinter    73:             return (None,None,None)
1.8       dwinter    74: 
                     75:     def isEmptyValue(self,fieldName):
                     76:         """empty"""
                     77:         try:
                     78:             field=getattr(self,"md_"+fieldName)
                     79:             if field[1]=='':
                     80:                 return 0
                     81:             else:
                     82:                 return 1
                     83:         except:
                     84:             return 0
1.5       dwinter    85:         
                     86:     def generateMappingHash(self):
                     87:         """erzeugen des Hash"""
                     88:         hash={}
                     89:         for field in self.fieldList:
                     90:             hash[field]=getattr(self,"md_"+field)
                     91:         return hash
                     92: 
                     93:        
                     94:     
                     95:     def change_OSAS_MappingForm(self):
                     96:         """change"""
                     97:         pt=PageTemplateFile('Products/OSA_system/zpt/ChangeOSAS_MetadataMapping.zpt').__of__(self)
                     98:         return pt()
                     99:     
                    100:     def change_OSAS_Mapping(self,titleOfObject,RESPONSE=None):
                    101:         """change"""
1.1       dwinter   102: 
1.5       dwinter   103:         self.title=titleOfObject
                    104:         arglist=self.REQUEST.form
                    105:         self.fields=[]
                    106:         
                    107:         
                    108:         for fieldName in self.readFieldsFromParent():
                    109: 
1.6       dwinter   110:             setattr(self,"md_"+fieldName,(arglist[fieldName],arglist['label_'+fieldName],arglist['explanation_'+fieldName]))
1.5       dwinter   111:             self.fields.append(arglist[fieldName])
                    112:             
                    113:         if RESPONSE is not None:
                    114:             RESPONSE.redirect('manage_main')
                    115: 
                    116:     
                    117: 
                    118: def manage_addOSAS_MetadataMappingForm(self):
                    119:     """interface for adding the OSAS_root"""
                    120:     pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_MetadataMapping.zpt').__of__(self)
                    121:     return pt()
                    122: 
                    123: def manage_addOSAS_MetadataMapping(self,idOfObject,titleOfObject,RESPONSE=None):
                    124:     """add the OSAS_root"""
                    125:     
                    126:     argList={}
1.6       dwinter   127:     for arg in self.fieldList:
1.5       dwinter   128:         if not (arg in ['idOfObject','titleOfObject']):
1.6       dwinter   129:             argList[arg]=(self.REQUEST.form[arg],self.REQUEST.form['label_'+arg],self.REQUEST.form['explanation_'+arg])
                    130:             
                    131:     newObj=OSAS_MetadataMapping(idOfObject,titleOfObject,argList,self.fieldList)
1.5       dwinter   132:     self._setObject(idOfObject,newObj)
                    133:     if RESPONSE is not None:
                    134:         RESPONSE.redirect('manage_main')
1.1       dwinter   135: 
1.5       dwinter   136:    
1.1       dwinter   137: 
                    138: 
                    139: class OSAS_add_Metadata(Folder):
                    140:     """Foldertype enthält methoden zur Halbautomatischen Erstellung von Metadatenfiles"""
                    141:     security=ClassSecurityInfo()
                    142:     
1.5       dwinter   143:     def __init__(self,id,linklabel,description,fields):
1.1       dwinter   144:         """initialize a new instance"""
                    145:         self.id = id
                    146:         self.linklabel =linklabel #label fuer link auf add page
                    147:         self.description=description #description of the method for link page
1.5       dwinter   148:         self.fieldList=fields.split(",")[0:]
1.1       dwinter   149:         
                    150:     meta_type='OSAS_add_Metadata'
                    151: 
                    152:     manage_options = Folder.manage_options+(
                    153:         {'label':'Main Config','action':'add_Metadata_config'},
                    154:         )
                    155: 
1.9     ! dwinter   156:     def showGenericXML(self,RESPONSE=None):
        !           157:         """show generic fields as XML"""
        !           158:         ret="""<set name="%s">"""%"generic"
        !           159:         for field in self.fieldList:
        !           160:             ret+="""<entry genericName="%s"/>"""%field
        !           161: 
        !           162:         ret+="</set>"
        !           163:         
        !           164:         if not RESPONSE:
        !           165:             return ret
        !           166:         else:
        !           167:             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
        !           168:             return ret
        !           169:     def showOverviewXML(self,RESPONSE):
        !           170:         """gives an overview over the Metadata stored in this folder"""
        !           171:         ret="""<metadata name="%s">"""%self.getId()
        !           172:         ret+=self.showGenericXML()
        !           173:         for entry in self.ZopeFind(self,obj_metatypes=['OSAS_MetadataMapping']):
        !           174:             ret+=entry[1].showSetXML()
        !           175: 
        !           176:         ret+="</metadata>"
        !           177: 
        !           178:         if not RESPONSE:
        !           179:             return ret
        !           180:         else:
        !           181:             self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
        !           182:             return ret
        !           183:         
1.5       dwinter   184:     def generateMappingList(self):
                    185:         """Erzeuge Mapping"""
                    186:         mapping={}
                    187:         for dict in self.__dict__:
                    188:             #print dict
                    189:             obj=getattr(self,dict)
                    190:             if hasattr(obj,'meta_type'):
                    191:                 if obj.meta_type=="OSAS_MetadataMapping":
                    192:                     mapping[obj.getId()]=obj.generateMappingHash()
                    193:         return mapping
                    194:     
                    195:     def generateMappingForType(self,type,clean="yes"):
                    196:         """erzeuge spezifisches Mapping"""
                    197:         hash=self.generateMappingList()
                    198:         if hash.has_key(type):
                    199:             if clean=="yes":
                    200:                 temp={}
                    201:                 for x in hash[type].keys():
                    202:                     if not hash[type][x]=="":
                    203:                         temp[x]=hash[type][x]
                    204:                 return temp
                    205:             else:
                    206:                 return hash[type]
                    207:         
                    208:         else:
                    209:             return {}
                    210: 
                    211:     def getFieldList(self):
                    212:         """erzeuge string aus fields"""
                    213:         try:
                    214:             return string.join(self.fieldList,",")
                    215:         except:
                    216:             return ""
                    217:         
                    218:     def getFields(self):
                    219:         """ausgabe der Felder"""
                    220:         return self.fieldList
                    221: 
                    222:     def getTypeTitle(self,id):
                    223:         """Title von ID"""
                    224:         try:
                    225:             obj=getattr(self,id)
                    226:             return obj.title
                    227:         except:
                    228:             return id
                    229:         
                    230:     def getStoredTypes(self):
                    231:         """Gebe gespeicherte typen zurück"""
                    232:         
                    233:         types=[]
                    234:         for dict in self.__dict__:
                    235:             
                    236:             obj=getattr(self,dict)
                    237:             if hasattr(obj,'meta_type'):
                    238:                 if obj.meta_type=="OSAS_MetadataMapping":
                    239:                     #print obj
                    240:                     if obj.title=="":
                    241:                         title=obj.id
                    242:                     else:
                    243:                         title=obj.title
                    244:                     types.append((obj.id,title))
                    245:         return types
1.1       dwinter   246:     
                    247:     security.declarePublic('add_Metadata_config')
                    248:     def add_Metadata_config(self):
                    249:         """Main configuration"""
1.4       dwinter   250:         pt=PageTemplateFile('Products/OSA_system/zpt/ChangeOSAS_addMetadata.zpt').__of__(self)
1.1       dwinter   251:         return pt()
                    252:     
1.3       dwinter   253:     security.declarePublic('change_OSAS_addMetadata')
1.5       dwinter   254:     def change_OSAS_addMetadata(self,linklabel,description,fields,RESPONSE=None):
1.1       dwinter   255:         """Change Metadata"""
1.3       dwinter   256:         self.linklabel=linklabel
                    257:         self.description=description
1.5       dwinter   258:         self.fieldList=fields.split(",")[0:]
1.1       dwinter   259:         if RESPONSE is not None:
                    260:             RESPONSE.redirect('manage_main')
                    261: 
                    262:     security.declarePublic('index_html')
                    263:     def index_html(self):
1.5       dwinter   264:         """standard aufruf"""
1.1       dwinter   265:         return OSAS_add.add(self,no_upload=0)
                    266: 
                    267: 
                    268:     security.declarePublic('add2')
                    269:     def add2(self):
                    270:         """ anlegen naechster schritt"""
                    271:         return OSAS_add.add2(self)
                    272: 
                    273:     def add3(self):
                    274:         """Foldername"""
                    275:         return OSAS_add.add3(self)
                    276: 
                    277:     def add6(self):
                    278:         """write new index.meta file"""
                    279:         return OSAS_add.add6(self)
1.6       dwinter   280: 
                    281:         
                    282:   
1.1       dwinter   283:     
                    284: def manage_AddOSAS_add_MetadataForm(self):
                    285:     """interface for adding the OSAS_add_Metadata"""
1.4       dwinter   286:     pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_metadata.zpt').__of__(self)
1.1       dwinter   287:     return pt()
                    288: 
1.5       dwinter   289: def manage_AddOSAS_add_Metadata(self,id,linklabel,description,fields,RESPONSE=None):
1.1       dwinter   290:     """add the OSAS_root"""
1.5       dwinter   291:     newObj=OSAS_add_Metadata(id,linklabel,description,fields)
1.1       dwinter   292:     self.Destination()._setObject(id,newObj)
                    293:     if RESPONSE is not None:
                    294:         RESPONSE.redirect('manage_main')
                    295: 
                    296:             
                    297: InitializeClass(OSAS_add_Metadata)
                    298: 

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