labo-components
Version:
628 lines (593 loc) • 25.2 kB
JavaScript
import CollectionConfig from './CollectionConfig';
import RegexUtil from '../../util/RegexUtil';
import SearchAPI from '../../api/SearchAPI';
import NISV_GTAA_WIKIDATA from './entities/NISV_GTAA_WIKIDATA';
export default class NISVCatalogueConfig extends CollectionConfig {
constructor(clientId, user, collectionId, collectionMetadata) {
super(clientId, user, collectionId, collectionMetadata);
this.FORBIDDEN_FACETS = [
//filter out carrier times & IDs
"bg:carriers.bg:carrier.bg:carrier-endposition.keyword",
"bg:carriers.bg:carrier.bg:carrier-startposition",
"bg:carriers.bg:carrier.bg:carrierid",
"bg:carriers.bg:carrier.bg:carrierreference",
"bg:carriers.bg:carrier.bg:dmguid",
"bg:carriers.bg:carrier.bg:sorting",
"bg:carriers.bg:carrier.bg:endoncarrier",
"bg:carriers.bg:carrier.bg:endtime.keyword",
"bg:carriers.bg:carrier.bg:externalreference.keyword",
"bg:carriers.bg:carrier.bg:parentcarrierid.keyword",
"bg:carriers.bg:carrier.bg:starttime.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:sorting",
"bga:segment.bg:carriers.bg:carrier.bg:sorting.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:starttime.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:carrier-endposition",
"bga:segment.bg:carriers.bg:carrier.bg:carrier-startposition",
"bga:segment.bg:carriers.bg:carrier.bg:carrierid",
"bga:segment.bg:carriers.bg:carrier.bg:carrierreference",
"bga:segment.bg:carriers.bg:carrier.bg:dmguid",
"bga:segment.bg:carriers.bg:carrier.bg:endtime.keyword",
//filter out all these titles
"bg:maintitles.bg:title.keyword",
"bga:segment.bg:maintitles.bg:title.keyword",
"bg:subtitles.bg:title.keyword",
"bga:segment.bg:subtitles.bg:title.keyword",
"bg:publications.bg:publication.bg:title.keyword",
"bga:season.bg:subtitles.bg:title.keyword",
"bga:series.bg:maintitles.bg:title.keyword",
//filter out time/date/number fields
"bg:publications.bg:publication.bg:starttimestamp.keyword",
"bga:segment.bg:recordings.bg:recording.bg:dateprecision",
//filter out all the transcript fields
"bg:transcripts.bg:transcript.@annotation.keyword",
"bg:transcripts.bg:transcript.@endtime.keyword",
"bg:transcripts.bg:transcript.@label.keyword",
"bg:transcripts.bg:transcript.@rights.keyword",
"bg:transcripts.bg:transcript.@sequencenumber.keyword",
"bg:transcripts.bg:transcript.@source.keyword",
"bg:transcripts.bg:transcript.@starttime.keyword",
"bg:transcripts.bg:transcript.bg:text.keyword",
"bga:segment.bg:transcripts.bg:transcript.@annotation.keyword",
"bga:segment.bg:transcripts.bg:transcript.@endtime.keyword",
"bga:segment.bg:transcripts.bg:transcript.@label.keyword",
"bga:segment.bg:transcripts.bg:transcript.@rights.keyword",
"bga:segment.bg:transcripts.bg:transcript.@source.keyword",
"bga:segment.bg:transcripts.bg:transcript.@starttime.keyword",
"bga:segment.bg:transcripts.bg:transcript.bg:text.keyword",
//filter out these big text fields
"bg:used-archivematerials.bg:used-archivematerial.keyword",
"bga:segment.bg:museum-summary.keyword",
"bga:series.bg:museum-summary.keyword",
"bga:segment.bg:museum-description.keyword",
"layer__asr.wordTimes.keyword"
];
this.ALLOWED_FACETS = [
"bg:availablecollections.bg:collection",
"bg:carriers.bg:carrier.bg:archivestatus.keyword",
"bg:carriers.bg:carrier.bg:audiotype.keyword",
"bg:carriers.bg:carrier.bg:carrierclass.keyword",
"bg:carriers.bg:carrier.bg:carriertype.keyword",
"bg:carriers.bg:carrier.bg:depotstatus",
"bg:carriers.bg:carrier.bg:format.keyword",
"bg:carriers.bg:carrier.bg:location.keyword",
"bg:carriers.bg:carrier.bg:metrage.keyword",
"bg:carriers.bg:carrier.bg:origin.keyword",
"bg:carriers.bg:carrier.bg:repository",
"bg:carriers.bg:carrier.bg:storageunit",
"bg:casts.bg:cast.bg:character.keyword",
"bg:casts.bg:cast.bg:clarification.keyword",
"bg:casts.bg:cast.bg:name.keyword",
"bg:catalog.keyword",
"bg:clearingstatus.keyword",
"bg:context.bg:awards.keyword",
"bg:context.bg:colour",
"bg:context.bg:composition.keyword",
"bg:context.bg:context.keyword",
"bg:context.bg:occasion.keyword",
"bg:context.bg:silent.keyword",
"bg:contractors.bg:contractor.bg:name.keyword",
"bg:creators.bg:creator.bg:clarification.keyword",
"bg:creators.bg:creator.bg:name.keyword",
"bg:creators.bg:creator.bg:roles.bg:role.keyword",
"bg:deprecatedkeyword.bg:keyword.keyword",
"bg:executives.bg:executive.bg:clarification.keyword",
"bg:executives.bg:executive.bg:name.keyword",
"bg:executives.bg:executive.bg:role.keyword",
"bg:funders.bg:funder.bg:name.keyword",
"bg:genres.bg:genre.keyword",
"bg:keywords.bg:keyword.keyword",
"bg:languages.bg:language.bg:language",
"bg:languages.bg:language.bg:use",
"bg:links.bg:link.keyword",
"bg:locations.bg:location.keyword",
"bg:museum-annotation.keyword",
"bg:museum-genres.bg:genre.keyword",
"bg:museum-keywords.bg:keyword.keyword",
"bg:museum-locations.bg:location.keyword",
"bg:museum-names.bg:name.keyword",
"bg:museum-personnames.bg:personname.keyword",
"bg:museum-themes.bg:theme.keyword",
"bg:musicstyles.bg:musicstyle.keyword",
"bg:names.bg:name.keyword",
"bg:nationalities.bg:nationality.bg:country.keyword",
"bg:nationalities.bg:nationality.bg:role.keyword",
"bg:originalCreators.bg:creator.bg:clarification.keyword",
"bg:originalCreators.bg:creator.bg:name.keyword",
"bg:originalCreators.bg:creator.bg:role.keyword",
"bg:part.keyword",
"bg:personnames.bg:personname.keyword",
"bg:producers.bg:producer.bg:name.keyword",
"bg:productioncountries.bg:country.keyword",
"bg:publications.bg:publication.bg:broadcasters.bg:broadcaster",
"bg:publications.bg:publication.bg:broadcastnorm.keyword",
"bg:publications.bg:publication.bg:dateprecision.keyword",
"bg:publications.bg:publication.bg:distributionchannel",
"bg:publications.bg:publication.bg:distributionformat.keyword",
"bg:publications.bg:publication.bg:frequency.keyword",
"bg:publications.bg:publication.bg:live.keyword",
"bg:publications.bg:publication.bg:networks.bg:network",
"bg:publications.bg:publication.bg:publication-annotation.keyword",
"bg:publications.bg:publication.bg:rebroadcast.keyword",
"bg:publications.bg:publication.bg:timecodestandard.keyword",
"bg:publications.bg:publication.bg:type",
"bg:publications.bg:publication.bg:ugstatus",
"bg:publications.bg:publication.bg:weeknumber.keyword",
"bg:qualification.bg:block.keyword",
"bg:qualification.bg:license.keyword",
"bg:qualification.bg:rights.keyword",
"bg:qualification.bg:source.keyword",
"bg:recordinglocations.bg:location",
"bg:recordings.bg:recording.bg:withaudience.keyword",
"bg:sourcecatalog",
"bg:speakers.bg:speaker.bg:name.keyword",
"bg:speakers.bg:speaker.bg:role.keyword",
"bg:sponsors.bg:sponsor.bg:name.keyword",
"bg:targetgroups.bg:targetgroup.keyword",
"bg:themes.bg:theme.keyword",
"bga:season.bg:casts.bg:cast.bg:character.keyword",
"bga:season.bg:casts.bg:cast.bg:clarification.keyword",
"bga:season.bg:casts.bg:cast.bg:name.keyword",
"bga:season.bg:context.bg:awards.keyword",
"bga:season.bg:context.bg:colour.keyword",
"bga:season.bg:context.bg:context.keyword",
"bga:season.bg:context.bg:occasion.keyword",
"bga:season.bg:contractors.bg:contractor.bg:name.keyword",
"bga:season.bg:creators.bg:creator.bg:clarification.keyword",
"bga:season.bg:creators.bg:creator.bg:name.keyword",
"bga:season.bg:creators.bg:creator.bg:roles.bg:role.keyword",
"bga:season.bg:executives.bg:executive.bg:clarification.keyword",
"bga:season.bg:executives.bg:executive.bg:name.keyword",
"bga:season.bg:executives.bg:executive.bg:role.keyword",
"bga:season.bg:funders.bg:funder.bg:name.keyword",
"bga:season.bg:genres.bg:genre.keyword",
"bga:season.bg:keywords.bg:keyword.keyword",
"bga:season.bg:languages.bg:language.bg:language",
"bga:season.bg:languages.bg:language.bg:use.keyword",
"bga:season.bg:links.bg:link.keyword",
"bga:season.bg:locations.bg:location.keyword",
"bga:season.bg:maintitles.bg:title.keyword",
"bga:season.bg:names.bg:name.keyword",
"bga:season.bg:personnames.bg:personname.keyword",
"bga:season.bg:producers.bg:producer.bg:name.keyword",
"bga:season.bg:productioncountries.bg:country.keyword",
"bga:season.bg:qualification.bg:block.keyword",
"bga:season.bg:qualification.bg:license.keyword",
"bga:season.bg:qualification.bg:rights.keyword",
"bga:season.bg:qualification.bg:source.keyword",
"bga:season.bg:recordinglocations.bg:location.keyword",
"bga:season.bg:recordings.bg:recording.bg:withaudience.keyword",
"bga:season.bg:speakers.bg:speaker.bg:name.keyword",
"bga:season.bg:speakers.bg:speaker.bg:role.keyword",
"bga:season.bg:sponsors.bg:sponsor.bg:name.keyword",
"bga:season.bg:targetgroups.bg:targetgroup.keyword",
"bga:segment.bg:availablecollections.bg:collection.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:archivestatus.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:audiotype.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:carrierclass",
"bga:segment.bg:carriers.bg:carrier.bg:carriertype",
"bga:segment.bg:carriers.bg:carrier.bg:depotstatus",
"bga:segment.bg:carriers.bg:carrier.bg:format",
"bga:segment.bg:carriers.bg:carrier.bg:location.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:metrage.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:origin.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:parentcarrierid.keyword",
"bga:segment.bg:carriers.bg:carrier.bg:repository",
"bga:segment.bg:carriers.bg:carrier.bg:storageunit",
"bga:segment.bg:casts.bg:cast.bg:character.keyword",
"bga:segment.bg:casts.bg:cast.bg:clarification.keyword",
"bga:segment.bg:casts.bg:cast.bg:name.keyword",
"bga:segment.bg:clearingstatus.keyword",
"bga:segment.bg:context.bg:awards.keyword",
"bga:segment.bg:context.bg:colour.keyword",
"bga:segment.bg:context.bg:composition.keyword",
"bga:segment.bg:context.bg:context.keyword",
"bga:segment.bg:context.bg:occasion.keyword",
"bga:segment.bg:context.bg:silent.keyword",
"bga:segment.bg:contractors.bg:contractor.bg:name.keyword",
"bga:segment.bg:creators.bg:creator.bg:clarification.keyword",
"bga:segment.bg:creators.bg:creator.bg:name.keyword",
"bga:segment.bg:creators.bg:creator.bg:roles.bg:role.keyword",
"bga:segment.bg:deprecatedkeyword.bg:keyword.keyword",
"bga:segment.bg:executives.bg:executive.bg:clarification.keyword",
"bga:segment.bg:executives.bg:executive.bg:name.keyword",
"bga:segment.bg:executives.bg:executive.bg:role.keyword",
"bga:segment.bg:funders.bg:funder.bg:name.keyword",
"bga:segment.bg:genres.bg:genre.keyword",
"bga:segment.bg:keywords.bg:keyword.keyword",
"bga:segment.bg:languages.bg:language.bg:language",
"bga:segment.bg:languages.bg:language.bg:use.keyword",
"bga:segment.bg:links.bg:link.keyword",
"bga:segment.bg:locations.bg:location.keyword",
"bga:segment.bg:museum-annotation.keyword",
"bga:segment.bg:museum-languageid.keyword",
"bga:segment.bg:museum-locations.bg:location.keyword",
"bga:segment.bg:musicstyles.bg:musicstyle.keyword",
"bga:segment.bg:names.bg:name.keyword",
"bga:segment.bg:nationalities.bg:nationality.bg:country.keyword",
"bga:segment.bg:nationalities.bg:nationality.bg:role.keyword",
"bga:segment.bg:originalCreators.bg:creator.bg:clarification.keyword",
"bga:segment.bg:originalCreators.bg:creator.bg:name.keyword",
"bga:segment.bg:originalCreators.bg:creator.bg:role.keyword",
"bga:segment.bg:personnames.bg:personname.keyword",
"bga:segment.bg:producers.bg:producer.bg:name.keyword",
"bga:segment.bg:qualification.bg:block.keyword",
"bga:segment.bg:qualification.bg:license.keyword",
"bga:segment.bg:qualification.bg:rights.keyword",
"bga:segment.bg:qualification.bg:source.keyword",
"bga:segment.bg:recordinglocations.bg:location.keyword",
"bga:segment.bg:recordings.bg:recording.bg:withaudience.keyword",
"bga:segment.bg:sourcecatalog",
"bga:segment.bg:speakers.bg:speaker.bg:name.keyword",
"bga:segment.bg:speakers.bg:speaker.bg:role.keyword",
"bga:segment.bg:sponsors.bg:sponsor.bg:name.keyword",
"bga:segment.bg:themes.bg:theme.keyword",
"bga:segment.bg:type.keyword",
"bga:series.bg:casts.bg:cast.bg:character.keyword",
"bga:series.bg:casts.bg:cast.bg:clarification.keyword",
"bga:series.bg:casts.bg:cast.bg:name.keyword",
"bga:series.bg:catalog.keyword",
"bga:series.bg:context.bg:awards.keyword",
"bga:series.bg:context.bg:composition.keyword",
"bga:series.bg:context.bg:context.keyword",
"bga:series.bg:context.bg:occasion.keyword",
"bga:series.bg:contractors.bg:contractor.bg:name.keyword",
"bga:series.bg:creators.bg:creator.bg:clarification.keyword",
"bga:series.bg:creators.bg:creator.bg:name.keyword",
"bga:series.bg:creators.bg:creator.bg:roles.bg:role.keyword",
"bga:series.bg:distributionchannel",
"bga:series.bg:executives.bg:executive.bg:clarification.keyword",
"bga:series.bg:executives.bg:executive.bg:name.keyword",
"bga:series.bg:executives.bg:executive.bg:role.keyword",
"bga:series.bg:funders.bg:funder.bg:name.keyword",
"bga:series.bg:genres.bg:genre.keyword",
"bga:series.bg:keywords.bg:keyword.keyword",
"bga:series.bg:links.bg:link.keyword",
"bga:series.bg:locations.bg:location.keyword",
"bga:series.bg:museum-genres.bg:genre.keyword",
"bga:series.bg:musicstyles.bg:musicstyle.keyword",
"bga:series.bg:names.bg:name.keyword",
"bga:series.bg:originalCreators.bg:creator.bg:clarification.keyword",
"bga:series.bg:originalCreators.bg:creator.bg:name.keyword",
"bga:series.bg:originalCreators.bg:creator.bg:role.keyword",
"bga:series.bg:personnames.bg:personname.keyword",
"bga:series.bg:producers.bg:producer.bg:name.keyword",
"bga:series.bg:productioncountries.bg:country.keyword",
"bga:series.bg:qualification.bg:block.keyword",
"bga:series.bg:qualification.bg:license.keyword",
"bga:series.bg:qualification.bg:rights.keyword",
"bga:series.bg:qualification.bg:source.keyword",
"bga:series.bg:recordinglocations.bg:location.keyword",
"bga:series.bg:recordings.bg:recording.bg:withaudience.keyword",
"bga:series.bg:speakers.bg:speaker.bg:name.keyword",
"bga:series.bg:speakers.bg:speaker.bg:role.keyword",
"bga:series.bg:sponsors.bg:sponsor.bg:name.keyword",
"bga:series.bg:targetgroups.bg:targetgroup.keyword",
"mediaType"
];
}
getFacetSelectionList = allowHeavyFacets => {
const kwFields = super.getFacetSelectionList(allowHeavyFacets) || [];
return allowHeavyFacets ? kwFields : kwFields.filter(kw => this.FORBIDDEN_FACETS.indexOf(kw.value) == -1);
};
getNamespace = () => 'http://av.beeldengeluid.nl/';
//the type varies for B&G
getCollectionMediaTypes = () => [];
//used to prevent graphs to blow up in case the minimum date is really low (because of incorrect data)
getMinimumYear = () => 1875;
getMaximumYear = () => 2018;
//override so the annotation layer indices are ignored
getCollectionIndices = () => [this.getCollectionId()];
//this means the resource viewer needs to request access to the content before it can show them
requiresPlayoutAccess = () => true;
getAnonymousUserRestrictions = () => ({
prohibitThumbnails : false, // show thumbnails in search results
prohibitPlayout : true // playing content
});
hideOffAirContent = () => true;
getPreferredDateField = () => 'bg:publications.bg:publication.bg:sortdate';
// if there's a ; we assume multiple dates, so we split the string into an array and remove any extra spaces (trim)
getFormattedDates = date => {
if(date && typeof(date) === 'string') {
const formatDateString = str => { const d = str.trim().split('-'); return d[2] + '-' + d[1] + '-' + d[0]; }
if(date.indexOf(';') !== -1) {
return date.split(';').map(formatDateString);
} else {
return [formatDateString(date)];
}
}
return null;
};
//gets the fields for showing highlights in search snippets, in order of preference
/*getPreferredHighlightFields = () => [
'layer__asr.words',
'bg:description',
'bg:summary',
'bg:title',
'bg:museum-summary',
'bg:museum-description',
'bg:keyword',
'bg:name',
'bg:personname',
'bg:location',
'bg:used-archivematerial'
];*/
getForbiddenHighlightFields = () => ["bg:carriers", "bg:publications", "bg:context", "dcterms:isPartOf"];
getFieldsToExclude = () => [
'layer__asr',
'bga:season.bg:transcripts',
'bg:transcripts',
'bga:segment.bg:transcripts'
];
//fields for ES highlighting
getHighlightFields = () => [
'layer__asr.words', //TODO extend with other fields that are currently excluded
'bga:season.bg:transcripts',
'bga:segment.bg:transcripts',
'bg:transcripts',
'bg:description',
'bg:title',
'bg:museum-summary',
'bg:museum-description',
'bg:summary',
'bg:used-archivematerial',
'*.bg:description',
'*.bg:summary',
'*.bg:title',
'*.bg:keyword',
'*.bg:name',
'*.bg:personname',
'*.bg:location'
];
getFacets = () => [
{
field: 'mediaType',
title : 'mediaType',
id : 'mediaType',
type : 'string'
},
{
field: 'bg:publications.bg:publication.bg:broadcasters.bg:broadcaster',
title : 'Broadcaster',
id : 'broadcaster',
type : 'string'
},
{
field: 'bga:series.bg:genres.bg:genre.keyword',
title : 'Genre (series)',
id : 'genre',
type : 'string'
},
{
field: 'bg:keywords.bg:keyword.keyword',
title : 'Keyword',
id : 'keyword',
type : 'string'
}
];
getNestedSearchLayers = () => [{
path : 'layer__asr',
fields : [
'layer__asr.words'
]
}];
getMetadataFieldCategories = () => [
{
id : 'titles',
label : 'Titles',
fields : [
'bga:series.bg:maintitles.bg:title',
'bga:season.bg:maintitles.bg:title',
'bga:segment.bg:maintitles.bg:title',
'bg:maintitles.bg:title'
]
},
{
id : 'descriptions',
label : 'Descriptions',
fields : [
'bg:summary',
'bg:description',
'bga:segment.bg:description',
'bg:museum-description',
'bga:series.bg:museum-description',
'bga:segment.bg:museum-description'
]
},
{
id : 'subtitles',
label : 'Keywords from Subtitles',
fields : [
'bg:transcripts.bg:transcript.bg:text',
'bga:segment.bg:transcripts.bg:transcript.bg:text'
]
},
{
id: 'subject',
label: 'Subject keywords',
fields: [
'bg:keywords.bg:keyword',
'bga:season.bg:keywords.bg:keyword',
'bga:segment.bg:keywords.bg:keyword',
'bga:series.bg:keywords.bg:keyword'
]
},
{
id: 'person',
label: 'Persons - all',
fields: [
'bg:cast.bg:name',
'bga:series.bg:cast.bg:name',
'bga:season.bg:cast.bg:name',
'bga:segment.bg:cast.bg:name',
'bg:creators.bg:creator.bg:name',
'bga:series.bg:creators.bg:creator.bg:name',
'bga:season.bg:creators.bg:creator.bg:name',
'bga:segment.bg:creators.bg:creator.bg:name',
'bg:originalCreators.bg:creator.bg:name',
'bga:series.bg:originalCreators.bg:creator.bg:name',
'bga:season.bg:originalCreators.bg:creator.bg:name',
'bga:segment.bg:originalCreators.bg:creator.bg:name',
'bg:executives.bg:executive.bg:name',
'bga:series.bg:executives.bg:executive.bg:name',
'bga:season.bg:executives.bg:executive.bg:name',
'bga:segment.bg:executives.bg:executive.bg:name',
'bg:speakers.bg:speaker.bg:name',
'bga:series.bg:speakers.bg:speaker.bg:name',
'bga:season.bg:speakers.bg:speaker.bg:name',
'bga:segment.bg:speakers.bg:speaker.bg:name',
'bg:personnames.bg:personname',
'bga:series.bg:personnames.bg:personname',
'bga:season.bg:personnames.bg:personname',
'bga:segment.bg:personnames.bg:personname',
]
},
{
id: 'production-person',
label: 'Persons - production',
fields: [
'bg:cast.bg:name',
'bga:series.bg:cast.bg:name',
'bga:season.bg:cast.bg:name',
'bga:segment.bg:cast.bg:name',
'bg:creators.bg:creator.bg:name',
'bga:series.bg:creators.bg:creator.bg:name',
'bga:season.bg:creators.bg:creator.bg:name',
'bga:segment.bg:creators.bg:creator.bg:name',
'bg:originalCreators.bg:creator.bg:name',
'bga:series.bg:originalCreators.bg:creator.bg:name',
'bga:season.bg:originalCreators.bg:creator.bg:name',
'bga:segment.bg:originalCreators.bg:creator.bg:name',
'bg:executives.bg:executive.bg:name',
'bga:series.bg:executives.bg:executive.bg:name',
'bga:season.bg:executives.bg:executive.bg:name',
'bga:segment.bg:executives.bg:executive.bg:name',
]
},
{
id: 'guest-person',
label: 'Persons - guests',
fields: [
'bg:speakers.bg:speaker.bg:name',
'bga:series.bg:speakers.bg:speaker.bg:name',
'bga:season.bg:speakers.bg:speaker.bg:name',
'bga:segment.bg:speakers.bg:speaker.bg:name',
]
},
{
id: 'discussed-person',
label: 'Persons - subject of discussion',
fields: [
'bg:personnames.bg:personname',
'bga:series.bg:personnames.bg:personname',
'bga:season.bg:personnames.bg:personname',
'bga:segment.bg:personnames.bg:personname',
]
},
{
id : 'asr',
label : 'Speech transcripts (ASR)',
nestedPath : 'layer__asr',
enrichment : true,
fields : [
'layer__asr.words'
]
}
];
getEntityConfig = () => ({
person : { //currently only person entities are supported
autocompleteConfig : {
'fieldClusters' : ["person", "production-person", "guest-person", "discussed-person"], //for which field category clusters autocomplete is offered
'autocompleteVocabulary' : 'gtaa-persons', //vocabulary to use for auto-complete
'autocompleteParams' : { //assumes the searchAPI.autocomplete is used
'ConceptScheme' : 'http://data.beeldengeluid.nl/gtaa/Persoonsnamen', //any other parameters
'Fields': [
'@graph.skos:prefLabel.@value',
'@graph.skos:altLabel.@value',
'@graph.skos:hiddenLabel.@value'
],
'Method': 'match',
'Lang': 'nl'
}
},
fetchEntityDetails : (entityUri, callback) => {
SearchAPI.grlc(
'BENG-PERSON-LD',
'getPersonDataForGTAAId',
{gtaa: entityUri}, //TODO make sure the calling code abstracts the gtaa ID to entity ID
NISV_GTAA_WIKIDATA.formatPersonDetails,
callback
);
},
fetchEntitiesInResource : (resourceUri, callback) => {
SearchAPI.grlc(
'BENG-LD',
'getPersonsAndRolesForProgramAndParts',
{resource: resourceUri}, //TODO make sure the calling code abstracts the gtaa ID to entity ID
NISV_GTAA_WIKIDATA.formatPersonsInResource,
callback
);
}
}
});
//gets the item's URI in the linked data store
getResourceUri = resource => {
return "http://data.rdlabs.beeldengeluid.nl/resource/program/" + resource["resourceId"].replace("@program", "")
};
getItemDetailData = (result, currentDateField) => result;
//in case the field name cannot be found in the field descriptions
formatIndexFieldName = esFieldName => esFieldName === 'layer__asr.words' ? 'Speech transcript' : esFieldName;
//override to add the level to each field (which will display in the FieldSelector)
//at the same time, exclude the level from the pretty field name
getAllFields = () => {
const fields = super.getAllFields()
fields.forEach(f => {
const tmp = f.id.split('.');
let metadataLayer = 'program';
if (tmp[0].indexOf('bga:') !== -1) {
metadataLayer = tmp[0].substring(tmp[0].indexOf(':') + 1);
}
f.level = metadataLayer;
f.title = this.toPrettyFieldName(f.id, false);
});
return fields
};
usesLayeredModel = () => true;
// Returns the first media object that matches the search term in the ASR transcript
// If a media object is provided, only looks for matches within that media object
findMatchingMediaFragments = (resource, searchTerm, activeMediaObject=null) => {
if(!resource.rawData.layer__asr) return null;
if(!resource.playableContent) return null;
let regex = null;
try {
regex = RegexUtil.generateRegexForSearchTerm(searchTerm);
} catch (err) {
console.debug('invalid regex');
}
const firstMatch = regex ? resource.rawData.layer__asr.find(phrase => {
return phrase.words.search(regex) !== -1 && (
activeMediaObject ? activeMediaObject.assetId === phrase.carrierId : true
);
}) : null;
return firstMatch ? resource.playableContent.find(mo => mo.assetId === firstMatch.carrierId) : null;
};
}