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