use of eu.europeana.enrichment.api.internal.ProxyFieldType in project metis-framework by europeana.
the class MetisRecordParser method parseReferences.
@Override
public Set<ReferenceTermContext> parseReferences(RDF rdf) {
// Get all direct references (also look in Europeana proxy as it may have been dereferenced - we
// use this below to follow sameAs links).
final List<ProxyType> proxies = Optional.ofNullable(rdf.getProxyList()).stream().flatMap(Collection::stream).filter(Objects::nonNull).collect(Collectors.toList());
final Map<String, Set<ProxyFieldType>> directReferences = new HashMap<>();
for (ProxyFieldType field : ProxyFieldType.values()) {
final Set<String> directLinks = proxies.stream().map(field::extractFieldLinksForEnrichment).flatMap(Set::stream).collect(Collectors.toSet());
for (String directLink : directLinks) {
directReferences.computeIfAbsent(directLink, key -> new HashSet<>()).add(field);
}
}
// Get all sameAs links from the directly referenced contextual entities.
final Map<String, Set<ProxyFieldType>> indirectReferences = new HashMap<>();
final Consumer<AboutType> contextualTypeProcessor = contextualClass -> {
final Set<ProxyFieldType> linkTypes = Optional.ofNullable(directReferences.get(contextualClass.getAbout())).orElseGet(Collections::emptySet);
if (!linkTypes.isEmpty()) {
for (String sameAsLink : getSameAsLinks(contextualClass)) {
indirectReferences.computeIfAbsent(sameAsLink, key -> new HashSet<>()).addAll(linkTypes);
}
}
};
Optional.ofNullable(rdf.getAgentList()).orElseGet(Collections::emptyList).forEach(contextualTypeProcessor);
Optional.ofNullable(rdf.getConceptList()).orElseGet(Collections::emptyList).forEach(contextualTypeProcessor);
Optional.ofNullable(rdf.getPlaceList()).orElseGet(Collections::emptyList).forEach(contextualTypeProcessor);
Optional.ofNullable(rdf.getTimeSpanList()).orElseGet(Collections::emptyList).forEach(contextualTypeProcessor);
// Merge the two maps.
final Map<String, Set<ProxyFieldType>> resultMap = mergeMapInto(directReferences, indirectReferences);
// Clean up the result: no null values. But objects we already have need to
// stay: maybe they are matched using a sameAs link.
resultMap.remove(null);
// Convert and done
final Set<ReferenceTermContext> result = new HashSet<>();
for (Map.Entry<String, Set<ProxyFieldType>> entry : resultMap.entrySet()) {
ReferenceTermContext value;
try {
value = new ReferenceTermContext(new URL(entry.getKey()), entry.getValue());
result.add(value);
} catch (MalformedURLException e) {
LOGGER.debug("Invalid enrichment reference found: {}", entry.getKey());
}
}
return result;
}
use of eu.europeana.enrichment.api.internal.ProxyFieldType in project metis-framework by europeana.
the class RdfEntityUtilsTest method testAppendLinkToEuropeanaProxyAddSameChoiceType.
@Test
void testAppendLinkToEuropeanaProxyAddSameChoiceType() {
Choice choice = new Choice();
Coverage coverage = new Coverage();
Resource resource = new Resource();
resource.setResource("http://differentdummylink.com");
coverage.setResource(resource);
choice.setCoverage(coverage);
List<Choice> choices = new ArrayList<>();
choices.add(choice);
PROXY_EUROPEANA.setChoiceList(choices);
TEST_RDF.setProxyList(Collections.singletonList(PROXY_EUROPEANA));
String link = "http://dummylink.com";
Set<ProxyFieldType> linkTypes = new HashSet<>();
linkTypes.add(ProxyFieldType.DC_COVERAGE);
RdfEntityUtils.appendLinkToEuropeanaProxy(TEST_RDF, link, linkTypes);
assertEquals(2, TEST_RDF.getProxyList().get(0).getChoiceList().size());
assertEquals("http://differentdummylink.com", TEST_RDF.getProxyList().get(0).getChoiceList().get(0).getCoverage().getResource().getResource());
assertEquals(link, TEST_RDF.getProxyList().get(0).getChoiceList().get(1).getCoverage().getResource().getResource());
}
use of eu.europeana.enrichment.api.internal.ProxyFieldType in project metis-framework by europeana.
the class RdfEntityUtilsTest method testAppendLinkToEuropeanaProxyAlreadyExists.
@Test
void testAppendLinkToEuropeanaProxyAlreadyExists() {
String link = "http://dummylink.com";
Choice choice = new Choice();
Coverage coverage = new Coverage();
Resource resource = new Resource();
resource.setResource(link);
coverage.setResource(resource);
choice.setCoverage(coverage);
List<Choice> choices = new ArrayList<>();
choices.add(choice);
PROXY_EUROPEANA.setChoiceList(choices);
TEST_RDF.setProxyList(Collections.singletonList(PROXY_EUROPEANA));
Set<ProxyFieldType> linkTypes = new HashSet<>();
linkTypes.add(ProxyFieldType.DC_COVERAGE);
RdfEntityUtils.appendLinkToEuropeanaProxy(TEST_RDF, link, linkTypes);
assertEquals(1, TEST_RDF.getProxyList().get(0).getChoiceList().size());
assertEquals(link, TEST_RDF.getProxyList().get(0).getChoiceList().get(0).getCoverage().getResource().getResource());
}
use of eu.europeana.enrichment.api.internal.ProxyFieldType in project metis-framework by europeana.
the class EnricherImpl method cleanupPreviousEnrichmentEntities.
@Override
public void cleanupPreviousEnrichmentEntities(RDF rdf) {
final ProxyType europeanaProxy = RdfEntityUtils.getEuropeanaProxy(rdf);
// Find the correct links
final Set<String> europeanaLinks = Arrays.stream(ProxyFieldType.values()).map(proxyFieldType -> proxyFieldType.extractFieldLinksForEnrichment(europeanaProxy)).flatMap(Collection::stream).filter(europeanaLinkPattern.asPredicate()).collect(Collectors.toSet());
RdfEntityUtils.removeMatchingEntities(rdf, europeanaLinks);
}
use of eu.europeana.enrichment.api.internal.ProxyFieldType in project metis-framework by europeana.
the class RdfEntityUtils method appendLinkToEuropeanaProxy.
/**
* Add a link to the specified {@link AboutType} to the EuropeanaProxy.
*
* @param rdf the rdf to append to
* @param link the about value to link
* @param linkTypes the types of the link to add in the europeana proxy.
*/
public static void appendLinkToEuropeanaProxy(RDF rdf, String link, Set<ProxyFieldType> linkTypes) {
final Map<ProxyFieldType, Set<String>> allProxyLinksPerType = getAllProxyLinksPerType(rdf);
final ProxyType europeanaProxy = getEuropeanaProxy(rdf);
for (ProxyFieldType linkType : linkTypes) {
final boolean alreadyExists = Optional.ofNullable(allProxyLinksPerType.get(linkType)).orElseGet(Collections::emptySet).contains(link);
if (!alreadyExists) {
final List<EuropeanaType.Choice> choices = Optional.ofNullable(europeanaProxy.getChoiceList()).orElseGet(ArrayList::new);
choices.add(linkType.createChoice(link));
europeanaProxy.setChoiceList(choices);
}
}
replaceProxy(rdf, europeanaProxy);
}
Aggregations