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