# $URL$
# $Id$
drilldownFieldNames = {
'drilldown.norm.date.year': {'en':'Year', 'nl':'Jaar'},
'drilldown.norm.date.decennium': {'en':'Decennium', 'nl':'Decennium'},
'drilldown.norm.date.centennium': {'en':'Centennium', 'nl':'Centennium'},
'drilldown.norm.name.oneinitial': {'en':'Name', 'nl':'Naam'},
'drilldown.norm.name.lastname': {'en':'Top 10 Names', 'nl':'Top 10 Namen'},
'drilldown.meta.repository.id': {'en':'Repository', 'nl':'Repository'},
'drilldown.meta.repository.repositoryGroupId': {'en':'Source', 'nl':'Bron'},
'drilldown.mods.classification': {'en':'Classification', 'nl':'Classificatie'},
'drilldown.mods.genre': {'en':'Genre', 'nl':'Genre'},
'drilldown.mods.language.languageTerm': {'en':'Language', 'nl':'Taal'},
'drilldown.mods.relatedItem.titleInfo.title': {'en':'Journal/series', 'nl':'Tijdschrift/reeks'},
'drilldown.mods.subject.topic': {'en':'Subject', 'nl':'Onderwerp'}
}
drilldownFields = [
#####
##### TP: (field, number, sorted)
##### number == 0: all items?
('drilldown.mods.genre', 0, True),
('drilldown.mods.subject.topic', 10, True),
#####
#('drilldown.mods.name.namePart', 20, False),
#('drilldown.norm.name.oneinitial', 20, False),
#('drilldown.meta.repository.id', 10, False),
('drilldown.meta.repository.repositoryGroupId', 10, True),
('drilldown.mods.classification', 10, True),
('drilldown.mods.language.languageTerm', 10, True),
('drilldown.mods.relatedItem.titleInfo.title', 10, True)
]
drilldownFieldsNoMultiLevel = []
drilldownFieldsNoMultiLevel.extend(drilldownFields)
drilldownFieldsNoMultiLevel.insert(0, ('drilldown.norm.name.lastname', 10, False))
drilldownFieldsNoMultiLevel.insert(0, ('drilldown.norm.date.centennium', 10, False))
groupName = {
'ir-uvt-nl': {'en': 'Tilburg University Repository', 'nl': 'Tilburg University Repository'},
'kuleuven-be': {'en': 'EO: KU Leuven', 'nl': 'EO: KU Leuven'},
'lse-ac-uk': {'en': 'EO: London School of Economics', 'nl': 'EO: London School of Economics'},
'opc-uvt-nl': {'en': 'Catalogue', 'nl': 'Catalogus'},
'repec-org': {'en': 'RePEc', 'nl': 'RePEc'},
'repub-eur-nl': {'en': 'EO: Erasmus University Rotterdam', 'nl': 'EO: Erasmus Universiteit Rotterdam'},
'tilburguniversity-nl': {'en': 'EO: Tilburg University', 'nl': 'EO: Universiteit van Tilburg'},
'ulb-ac-be': {'en': 'EO: Universite Libre de Bruxelles', 'nl': 'EO: Universite Libre de Bruxelles'},
'unimaas-nl': {'en': 'EO: Maastricht University', 'nl': 'EO: Universiteit Maastricht'},
}
space = " "
def fieldAndTermSplit(fieldAndTerm):
return fieldAndTerm.split(':', 1)
def fieldAndTermJoin(field, term):
return '%s:%s' % (field, term)
def shrink(aString, maxLength=160):
if len(aString) > maxLength:
return aString[:maxLength] + '...'
return aString
def createDrilldownQuery(drilldownArgs, httpQuery):
newArguments = [('query', httpQuery)]
for existing in drilldownArgs:
newArguments.append(('drilldown', existing))
return urlencode(newArguments)
def displayLabel(label):
return '
%s
' % label
def displayTerm(term, fieldName, language, maxLength=25):
if fieldName == 'drilldown.mods.genre': term = term.replace('info:eu-repo/semantics/', '')
elif (fieldName == 'drilldown.meta.repository.repositoryGroupId'):
term = groupName.get(term, {'en':term, 'nl':term})[language]
return shrink(term, maxLength)
def displayDrilldownFields(total, bitMatrixRow, httpQuery, arguments, language):
yield '\n' + space + ' '
if total < 500000:
####### TP: result set is not too large, multilevel results will be calculated
multilevelResults = any.multiLevelDrilldown(bitMatrixRow, ['date', 'author'])
for (fieldName, levelField), termCounts in multilevelResults:
label = drilldownFieldNames.get(levelField, {'en':levelField, 'nl':levelField})[language]
yield '\n' + space + ' %s' % displayLabel(label)
yield '\n' + space + '
'
for term, count in termCounts:
drilldownArgs = set(arguments.get('drilldown', []) + [fieldAndTermJoin(levelField, term)])
query = createDrilldownQuery(drilldownArgs, httpQuery)
yield '\n' + space + ' - %s: %s
' % (query, escapeHtml(term), displayTerm(term, fieldName, language), count)
yield '\n' + space + '
'
fields = drilldownFields
else:
####### TP: result set is too large, only one level of the multilevel facests will be calculated.
fields = drilldownFieldsNoMultiLevel
# fields = drilldownFields
drilldownResults = any.drilldown(bitMatrixRow, fields)
drilldownResultsAsDict = dict(drilldownResults)
for fieldName, number, sorted in fields:
termCounts = drilldownResultsAsDict.get(fieldName,[])
label = drilldownFieldNames.get(fieldName, {'en':fieldName, 'nl':fieldName})[language]
if termCounts == []:
continue
yield '\n' + space + ' %s' % displayLabel(label)
yield '\n' + space + '
'
for term, count in termCounts:
drilldownArgs = set(arguments.get('drilldown', []) + [fieldAndTermJoin(fieldName, term)])
query = createDrilldownQuery(drilldownArgs, httpQuery)
yield '\n' + space + ' - %s: %s
' % (query, escapeHtml(term), displayTerm(term, fieldName, language), count)
yield '\n' + space + '
'
yield """
%(space)s
%(space)s """ % {'space': space}
#def main(hits, httpQuery, arguments, path='', *args, **kwargs):
def main(total, bitMatrixRow, httpQuery, arguments, path='', *args, **kwargs):
language = path.startswith('/en/') and 'en' or 'nl'
yield '\n' + space + ''
selectedFacets = arguments.get('drilldown', [])
if selectedFacets:
yield '\n' + space + '
'
yield '\n' + space + '
%s
' % {'nl':'Geselecteerde facetten', 'en':'Selected Facets'}[language]
yield '\n
'
for drilldownItem in selectedFacets:
fieldName, value = fieldAndTermSplit(drilldownItem)
drilldownArgs = set(selectedFacets)
drilldownArgs.remove(drilldownItem)
label = drilldownFieldNames.get(fieldName, {'en':fieldName, 'nl':fieldName})[language]
query = createDrilldownQuery(drilldownArgs, httpQuery)
yield '\n' + space + ' - [-] %s: %s
' % (query, escapeHtml(value), label, escapeHtml( displayTerm(value, fieldName, language)))
yield """
%(space)s
%(space)s
%(space)s """ % {'space': space}
if total > 0:
yield displayDrilldownFields(total, bitMatrixRow, httpQuery, arguments, language)