Mercurial > hg > MetaDataProvider
annotate MetaDataMapping.py @ 14:281d223aa361
attribution works now
author | casties |
---|---|
date | Mon, 01 Aug 2011 19:30:12 +0200 |
parents | eeaad777d3d7 |
children | bd3025a6a6c0 |
rev | line source |
---|---|
0 | 1 from OFS.Folder import Folder |
1 | 2 from OFS.SimpleItem import SimpleItem |
0 | 3 from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
4 from Globals import package_home | |
5 from AccessControl import ClassSecurityInfo | |
6 import os.path | |
7 import urllib | |
8 import logging | |
9 import urlparse | |
10 | |
11 # TODO: which xml toolkit? | |
12 import amara | |
13 import xml.sax.saxutils | |
14 import xml.dom.minidom | |
15 import xml.etree.ElementTree as ET | |
16 | |
17 # TODO: do we need this? | |
18 #from Products.OSA_system2 import OSAS_helpers | |
19 #from Products.OSA_system2.OSAS_metadata import OSAS_Metadata,OSAS_MetadataMapping | |
20 from OSAS_metadata import OSAS_MetadataMapping | |
21 | |
1 | 22 from SrvTxtUtils import getAt |
23 | |
0 | 24 |
3 | 25 MAX_FIELDS = 30 |
26 | |
0 | 27 class MetaDataMapping(OSAS_MetadataMapping): |
28 """Metadata mapping object representing a fixed set of sub-elements.""" | |
29 | |
30 meta_type="MetadataMapping" | |
31 manage_options = SimpleItem.manage_options+( | |
1 | 32 {'label':'Main Config','action':'manage_changeMetaDataMappingForm'}, |
33 {'label':'Field order','action':'manage_changeFieldOrderForm'}, | |
0 | 34 ) |
35 | |
36 fields = {} | |
37 """dict containing element descriptions""" | |
38 | |
39 fieldList = [] | |
8 | 40 """list of field names in preferred order""" |
0 | 41 |
1 | 42 def __init__(self,id,title,fields,fieldList=None): |
0 | 43 """init |
3 | 44 @param id: id (in Zope) |
45 @param title: real element name | |
46 @param fields: dict with field description dicts | |
47 @param fieldList: list of field names in preferred order | |
0 | 48 """ |
49 self.id=id | |
50 self.title=title | |
3 | 51 self.fields = fields.copy() |
0 | 52 |
1 | 53 if fieldList is not None: |
54 self.fieldList = fieldList | |
55 else: | |
56 # create fieldList | |
57 self.fieldList = fields.keys() | |
58 | |
59 | |
60 def getFields(self): | |
61 """returns dict of field names and field description dicts""" | |
3 | 62 return self.fields |
1 | 63 |
64 def getFieldList(self): | |
65 """returns ordered list of fields""" | |
3 | 66 return self.fieldList |
1 | 67 |
68 # convenience method | |
69 def getAt(self, array, idx, default=None): | |
70 """returns element from array or default""" | |
71 return getAt(array, idx, default) | |
0 | 72 |
73 | |
1 | 74 ## editing forms and methods |
0 | 75 |
1 | 76 manage_changeFieldOrderForm = PageTemplateFile('zpt/changeFieldOrder', globals()) |
77 | |
78 def manage_changeFieldOrder(self, fieldList=None, RESPONSE=None): | |
79 """change the order of fields""" | |
80 if fieldList is not None: | |
81 newFieldList = [] | |
82 for f in fieldList.split(','): | |
83 newFieldList.append(f.strip()) | |
84 | |
85 # check | |
86 if len(newFieldList) != len(self.fields.keys()): | |
87 raise ValueError("Incorrect length of new field list!") | |
88 | |
89 for f in newFieldList: | |
90 if f not in self.fields: | |
91 raise ValueError("Unknown field '%s'!"%f) | |
92 | |
93 self.fieldList = newFieldList | |
94 | |
95 if RESPONSE is not None: | |
96 RESPONSE.redirect('manage_main') | |
97 | |
98 manage_changeMetaDataMappingForm = PageTemplateFile('zpt/changeMetadataMapping', globals()) | |
99 | |
100 def manage_changeMetaDataMapping(self,titleOfObject,RESPONSE=None): | |
101 """change the MetapdataMapping""" | |
102 fields={} | |
103 fieldList=[] | |
3 | 104 for idx in range(0, MAX_FIELDS): |
1 | 105 tag = self.REQUEST.form.get('field_'+str(idx), None) |
106 if tag: | |
107 desc = {'tag': tag} | |
108 desc['label'] = self.REQUEST.form.get('label_'+str(idx), None) | |
109 desc['explanation'] = self.REQUEST.form.get('explanation_'+str(idx), None) | |
110 desc['status'] = self.REQUEST.form.get('status_'+str(idx), None) | |
111 desc['valuelist'] = self.REQUEST.form.get('valuelist_'+str(idx), None) | |
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
112 desc['dcmap'] = self.REQUEST.form.get('dcmap_'+str(idx), None) |
1 | 113 logging.debug("changeMetaDataMapping: desc=%s"%repr(desc)) |
114 fields[tag] = desc | |
115 fieldList.append(tag) | |
116 #(self.REQUEST.form[arg],self.REQUEST.form['label_'+arg],self.REQUEST.form['explanation_'+arg],self.REQUEST.form['status_'+arg],self.REQUEST.form['values_'+arg]) | |
117 | |
118 # replace data with new | |
119 self.title = titleOfObject | |
120 self.fields = fields | |
121 self.fieldList = fieldList | |
122 | |
123 if RESPONSE is not None: | |
124 RESPONSE.redirect('manage_main') | |
125 | |
0 | 126 |
9 | 127 def manage_addMetaDataMappingForm(self): |
128 """add MetapdataMapping form""" | |
129 pt = PageTemplateFile('zpt/addMetadataMappingForm', globals()).__of__(self) | |
130 return pt() | |
0 | 131 |
132 def manage_addMetaDataMapping(self,idOfObject,titleOfObject,RESPONSE=None): | |
133 """add the MetapdataMapping""" | |
1 | 134 fields={} |
135 fieldList=[] | |
3 | 136 for idx in range(1, MAX_FIELDS): |
1 | 137 tag = self.REQUEST.form.get('field_'+str(idx), None) |
138 if tag: | |
139 desc = {'tag': tag} | |
140 desc['label'] = self.REQUEST.form.get('label_'+str(idx), None) | |
141 desc['explanation'] = self.REQUEST.form.get('explanation_'+str(idx), None) | |
142 desc['status'] = self.REQUEST.form.get('status_'+str(idx), None) | |
143 desc['valuelist'] = self.REQUEST.form.get('valuelist_'+str(idx), None) | |
144 desc['dcmap'] = self.REQUEST.form.get('dcmap'+str(idx), None) | |
145 logging.debug("addMetaDataMapping: desc=%s"%repr(desc)) | |
146 fields[tag] = desc | |
147 fieldList.append(tag) | |
148 #(self.REQUEST.form[arg],self.REQUEST.form['label_'+arg],self.REQUEST.form['explanation_'+arg],self.REQUEST.form['status_'+arg],self.REQUEST.form['values_'+arg]) | |
0 | 149 |
1 | 150 newObj=MetaDataMapping(idOfObject,titleOfObject,fields,fieldList) |
0 | 151 self._setObject(idOfObject,newObj) |
152 if RESPONSE is not None: | |
153 RESPONSE.redirect('manage_main') | |
154 |