annotate MetaDataMapping.py @ 14:281d223aa361

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