use of eu.europeana.metis.schema.jibx.HasQualityAnnotation in project metis-framework by europeana.
the class RdfTierUtils method setTierInternal.
private static void setTierInternal(RDF rdf, Tier tier) throws IndexingException {
// Get the right instance of RdfTier.
final RdfTier rdfTier = tiersByValue.get(tier);
if (rdfTier == null) {
throw new SetupRelatedIndexingException("Cannot find settings for tier value " + tier.getClass());
}
// Determine if there is something to reference and somewhere to add the reference.
final RdfWrapper rdfWrapper = new RdfWrapper(rdf);
final Set<String> aggregationAbouts = rdfWrapper.getAggregations().stream().filter(Objects::nonNull).map(Aggregation::getAbout).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
if (aggregationAbouts.isEmpty()) {
throw new RecordRelatedIndexingException("Cannot find provider aggregation in record.");
}
final EuropeanaAggregationType europeanaAggregation = rdfWrapper.getEuropeanaAggregation().orElseThrow(() -> new RecordRelatedIndexingException("Cannot find Europeana aggregation in record."));
final String choAbout = Optional.ofNullable(europeanaAggregation.getAggregatedCHO()).map(AggregatedCHO::getResource).orElseThrow(() -> new RecordRelatedIndexingException("Cannot find aggregated CHO in Europeana aggregation."));
final String annotationAboutBase = "/item" + choAbout;
// Create the annotation
final QualityAnnotation annotation = new QualityAnnotation();
final Created created = new Created();
created.setString(Instant.now().toString());
annotation.setCreated(created);
annotation.setHasTargetList(aggregationAbouts.stream().map(about -> {
final HasTarget hasTarget = new HasTarget();
hasTarget.setResource(about);
return hasTarget;
}).collect(Collectors.toList()));
final HasBody hasBody = new HasBody();
hasBody.setResource(rdfTier.getUri());
annotation.setHasBody(hasBody);
annotation.setAbout(annotationAboutBase + rdfTier.getAboutSuffix());
// Add the annotation (remove all annotations with the same about)
final Stream<QualityAnnotation> existingAnnotations = rdfWrapper.getQualityAnnotations().stream().filter(existingAnnotation -> !annotation.getAbout().equals(existingAnnotation.getAbout()));
rdf.setQualityAnnotationList(Stream.concat(existingAnnotations, Stream.of(annotation)).collect(Collectors.toList()));
// Add the link to the annotation to the europeana aggregation.
final HasQualityAnnotation link = new HasQualityAnnotation();
link.setResource(annotation.getAbout());
final Stream<HasQualityAnnotation> existingLinks = Optional.ofNullable(europeanaAggregation.getHasQualityAnnotationList()).stream().flatMap(Collection::stream).filter(existingLink -> !link.getResource().equals(existingLink.getResource()));
europeanaAggregation.setHasQualityAnnotationList(Stream.concat(existingLinks, Stream.of(link)).collect(Collectors.toList()));
}
Aggregations