# HG changeset patch # User casties # Date 1311620355 -7200 # Node ID e4bae49e657b1428cd600b0dc70764a8c0abca19 # Parent 9f9d9be26e53acd338477ebf3d86895c46feab4f more renovation diff -r 9f9d9be26e53 -r e4bae49e657b MetaData.py --- a/MetaData.py Mon Jul 25 16:50:48 2011 +0200 +++ b/MetaData.py Mon Jul 25 20:59:15 2011 +0200 @@ -39,6 +39,20 @@ bt = bt.strip().replace(' ', '-').lower() return bt +def getBibdataFromDom(dom): + """returns dict with all elements from bib-tag""" + bibinfo = {} + bib = dom.find(".//meta/bib") + if bib is not None: + # put type in @type + type = bib.get('type') + bibinfo['@type'] = normalizedBibtype(type) + # put all subelements in dict + for e in bib: + bibinfo[e.tag] = getText(e) + + return bibinfo + def toString(list): ret=u"" @@ -76,19 +90,6 @@ return ret -def getBibdataFromDom(dom): - """returns dict with all elements from bib-tag""" - bibinfo = {} - bib = dom.find(".//meta/bib") - if bib is not None: - # put type in @type - type = bib.get('type') - bibinfo['@type'] = normalizedBibtype(type) - # put all subelements in dict - for e in bib: - bibinfo[e.tag] = getText(e) - - return bibinfo @@ -272,9 +273,8 @@ return ret - def getStdMappedHash(self, bibdata): - """returns dict with metadata from bibdata mapped according to standard mapping""" - mdHash={} + def getBibFields(self, bibdata): + """returns dict with metadata description for bibdata""" bibtype = bibdata['@type'] # get mapping from main/meta/bib try: @@ -283,17 +283,12 @@ logging.error("getStdMappedHash: no mapping for type: %s"%bibtype) return mdHash - mds = mapping.generateMappingHash() # Hole das Mapping generisches Feld --> Feld im entsprechenden Typ + # get field descriptions + bibFields = mapping.getFields.copy() + # add field list + bibFields['@fieldList'] = mapping.getFieldList() - for field in mds.keys(): - # get mapped field name - mf = mds[field][0] - if not mf: - continue - logging.debug("mapping: %s = %s"%(field,mf)) - mdHash[field] = bibdata.get(mf, '') - - return mdHash + return bibFields def getFormatted(self, template, path=None, dom=None, bibdata=None): @@ -324,10 +319,10 @@ logging.error("getFormatted: no generic template either: %s"%(template)) return "" - # put mapped data in mdHash - mdHash = self.getStdMappedHash(bibdata) + # put bib field descriptions in mdHash + bibFields = self.getBibFields(bibdata) - return tp(stdmd=mdHash, md=bibdata) + return tp(bibFields=bibFields, md=bibdata) def getFormattedMetaData(self, path=None, dom=None, bibdata=None): @@ -395,25 +390,3 @@ if RESPONSE is not None: RESPONSE.redirect('manage_main') -class MetaDataMapping(OSAS_MetadataMapping): - meta_type="MetadataMapping" - -def manage_addMetaDataMappingForm(self): - """interface for adding the OSAS_root""" - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetadataMappingForm.zpt')).__of__(self) - - return pt() - -def manage_addMetaDataMapping(self,idOfObject,titleOfObject,RESPONSE=None): - """add the OSAS_root""" - - argList={} - for arg in self.fieldList: - if not (arg in ['idOfObject','titleOfObject']): - argList[arg]=(self.REQUEST.form[arg],self.REQUEST.form['label_'+arg],self.REQUEST.form['explanation_'+arg],self.REQUEST.form['status_'+arg],self.REQUEST.form['values_'+arg]) - - newObj=MetaDataMapping(idOfObject,titleOfObject,argList) - self._setObject(idOfObject,newObj) - if RESPONSE is not None: - RESPONSE.redirect('manage_main') - diff -r 9f9d9be26e53 -r e4bae49e657b MetaDataMapping.py --- a/MetaDataMapping.py Mon Jul 25 16:50:48 2011 +0200 +++ b/MetaDataMapping.py Mon Jul 25 20:59:15 2011 +0200 @@ -1,4 +1,5 @@ from OFS.Folder import Folder +from OFS.SimpleItem import SimpleItem from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Globals import package_home from AccessControl import ClassSecurityInfo @@ -18,13 +19,16 @@ #from Products.OSA_system2.OSAS_metadata import OSAS_Metadata,OSAS_MetadataMapping from OSAS_metadata import OSAS_MetadataMapping +from SrvTxtUtils import getAt + class MetaDataMapping(OSAS_MetadataMapping): """Metadata mapping object representing a fixed set of sub-elements.""" meta_type="MetadataMapping" manage_options = SimpleItem.manage_options+( - {'label':'Main Config','action':'changeMetadataMappingForm'}, + {'label':'Main Config','action':'manage_changeMetaDataMappingForm'}, + {'label':'Field order','action':'manage_changeFieldOrderForm'}, ) fields = {} @@ -33,7 +37,7 @@ fieldList = [] """list of element names in preferred order""" - def __init__(self,id,title,fields): + def __init__(self,id,title,fields,fieldList=None): """init @param id: id @param title: title fuer zope navigation @@ -44,21 +48,108 @@ for fieldName in fields.keys(): self.fields[fieldName] = fields[fieldName] - + if fieldList is not None: + self.fieldList = fieldList + else: + # create fieldList + self.fieldList = fields.keys() + + + def getFields(self): + """returns dict of field names and field description dicts""" + return fields + + def getFieldList(self): + """returns ordered list of fields""" + return fieldList + + + + + + + + + # convenience method + def getAt(self, array, idx, default=None): + """returns element from array or default""" + return getAt(array, idx, default) + ## editing forms and methods + manage_changeFieldOrderForm = PageTemplateFile('zpt/changeFieldOrder', globals()) + + def manage_changeFieldOrder(self, fieldList=None, RESPONSE=None): + """change the order of fields""" + if fieldList is not None: + newFieldList = [] + for f in fieldList.split(','): + newFieldList.append(f.strip()) + + # check + if len(newFieldList) != len(self.fields.keys()): + raise ValueError("Incorrect length of new field list!") + + for f in newFieldList: + if f not in self.fields: + raise ValueError("Unknown field '%s'!"%f) + + self.fieldList = newFieldList + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + + manage_changeMetaDataMappingForm = PageTemplateFile('zpt/changeMetadataMapping', globals()) + + def manage_changeMetaDataMapping(self,titleOfObject,RESPONSE=None): + """change the MetapdataMapping""" + fields={} + fieldList=[] + for idx in range(0,20): + tag = self.REQUEST.form.get('field_'+str(idx), None) + if tag: + desc = {'tag': tag} + desc['label'] = self.REQUEST.form.get('label_'+str(idx), None) + desc['explanation'] = self.REQUEST.form.get('explanation_'+str(idx), None) + desc['status'] = self.REQUEST.form.get('status_'+str(idx), None) + desc['valuelist'] = self.REQUEST.form.get('valuelist_'+str(idx), None) + desc['dcmap'] = self.REQUEST.form.get('dcmap'+str(idx), None) + logging.debug("changeMetaDataMapping: desc=%s"%repr(desc)) + fields[tag] = desc + fieldList.append(tag) + #(self.REQUEST.form[arg],self.REQUEST.form['label_'+arg],self.REQUEST.form['explanation_'+arg],self.REQUEST.form['status_'+arg],self.REQUEST.form['values_'+arg]) + + # replace data with new + self.title = titleOfObject + self.fields = fields + self.fieldList = fieldList + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + manage_addMetaDataMappingForm = PageTemplateFile('zpt/addMetadataMappingForm', globals()) def manage_addMetaDataMapping(self,idOfObject,titleOfObject,RESPONSE=None): """add the MetapdataMapping""" - argList={} - for arg in self.fieldList: - if not (arg in ['idOfObject','titleOfObject']): - argList[arg]=(self.REQUEST.form[arg],self.REQUEST.form['label_'+arg],self.REQUEST.form['explanation_'+arg],self.REQUEST.form['status_'+arg],self.REQUEST.form['values_'+arg]) + fields={} + fieldList=[] + for idx in range(1,20): + tag = self.REQUEST.form.get('field_'+str(idx), None) + if tag: + desc = {'tag': tag} + desc['label'] = self.REQUEST.form.get('label_'+str(idx), None) + desc['explanation'] = self.REQUEST.form.get('explanation_'+str(idx), None) + desc['status'] = self.REQUEST.form.get('status_'+str(idx), None) + desc['valuelist'] = self.REQUEST.form.get('valuelist_'+str(idx), None) + desc['dcmap'] = self.REQUEST.form.get('dcmap'+str(idx), None) + logging.debug("addMetaDataMapping: desc=%s"%repr(desc)) + fields[tag] = desc + fieldList.append(tag) + #(self.REQUEST.form[arg],self.REQUEST.form['label_'+arg],self.REQUEST.form['explanation_'+arg],self.REQUEST.form['status_'+arg],self.REQUEST.form['values_'+arg]) - newObj=MetaDataMapping(idOfObject,titleOfObject,argList) + newObj=MetaDataMapping(idOfObject,titleOfObject,fields,fieldList) self._setObject(idOfObject,newObj) if RESPONSE is not None: RESPONSE.redirect('manage_main') diff -r 9f9d9be26e53 -r e4bae49e657b SrvTxtUtils.py --- a/SrvTxtUtils.py Mon Jul 25 16:50:48 2011 +0200 +++ b/SrvTxtUtils.py Mon Jul 25 20:59:15 2011 +0200 @@ -6,7 +6,7 @@ import logging -srvTxtUtilsVersion = "1.0" +srvTxtUtilsVersion = "1.1" def getInt(number, default=0): """returns always an int (0 in case of problems)""" @@ -15,6 +15,13 @@ except: return int(default) +def getAt(array, idx, default=None): + """returns element idx from array or default (in case of problems)""" + try: + return array[idx] + except: + return default + def getText(node): """returns all text content of a node and its subnodes""" if node is None: diff -r 9f9d9be26e53 -r e4bae49e657b zpt/addMetadataMappingForm.zpt --- a/zpt/addMetadataMappingForm.zpt Mon Jul 25 16:50:48 2011 +0200 +++ b/zpt/addMetadataMappingForm.zpt Mon Jul 25 20:59:15 2011 +0200 @@ -1,57 +1,45 @@ - - -

Add a Metadata Mapping

-
- ID:

- Title (=Reference Type):

- - - - - - - - - - - - - - - - - - -
- Tag-Name - - Label - - Explanation - - Optional - - Valuelist -
- - - - - - - - - - - - - -
-

-
- - + +
Header
+

Add a Metadata Mapping

+
+ ID:

+ Title (=Reference Type):

+ + + + + + + + + + + + + + + + + + +
Tag-nameLabelExplanationOptionalValuelistDC-map
+ + + + + + + + + + + +
+
+
diff -r 9f9d9be26e53 -r e4bae49e657b zpt/changeFieldOrder.zpt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zpt/changeFieldOrder.zpt Mon Jul 25 20:59:15 2011 +0200 @@ -0,0 +1,11 @@ +
Header
+ +
Tabs
+ +
+

Fields (tag names) in order of appearance:
+
+ (edit list to change order)

+
+
diff -r 9f9d9be26e53 -r e4bae49e657b zpt/changeMetadata.zpt --- a/zpt/changeMetadata.zpt Mon Jul 25 16:50:48 2011 +0200 +++ b/zpt/changeMetadata.zpt Mon Jul 25 20:59:15 2011 +0200 @@ -1,5 +1,9 @@ - - +
Header
+ +
Tabs
+ +
ShortDescription:

Description:

@@ -20,5 +24,3 @@

- - diff -r 9f9d9be26e53 -r e4bae49e657b zpt/changeMetadataMapping.zpt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zpt/changeMetadataMapping.zpt Mon Jul 25 20:59:15 2011 +0200 @@ -0,0 +1,50 @@ +
Header
+ +
Tabs
+ +
+

Title (=Reference Type):

+ +

(Leave Tag-Name empty to delete field. Add Tag-Name in empty row to add field.)

+ + + + + + + + + + + + + + + + + + + + +
Tag-nameLabelExplanationOptionalValuelistDC-map
+ +
+
+