package eu.dnetlib.dhp.broker.oa.matchers.simple; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.lang3.tuple.Pair; import eu.dnetlib.dhp.broker.model.Topic; import eu.dnetlib.dhp.broker.oa.matchers.UpdateMatcher; import eu.dnetlib.dhp.broker.oa.util.ConversionUtils; import eu.dnetlib.dhp.broker.oa.util.UpdateInfo; import eu.dnetlib.dhp.broker.oa.util.aggregators.withRels.ResultWithRelations; import eu.dnetlib.dhp.schema.oaf.Qualifier; import eu.dnetlib.dhp.schema.oaf.StructuredProperty; import eu.dnetlib.pace.config.DedupConfig; public class EnrichMissingSubject extends UpdateMatcher> { public EnrichMissingSubject() { super(true); } @Override protected List>> findUpdates(final ResultWithRelations source, final ResultWithRelations target, final DedupConfig dedupConfig) { final Set existingTypes = target .getResult() .getSubject() .stream() .map(StructuredProperty::getQualifier) .map(Qualifier::getClassid) .collect(Collectors.toSet()); return source .getResult() .getPid() .stream() .filter(pid -> !existingTypes.contains(pid.getQualifier().getClassid())) .map(ConversionUtils::oafSubjectToPair) .map(i -> generateUpdateInfo(i, source, target, dedupConfig)) .collect(Collectors.toList()); } public UpdateInfo> generateUpdateInfo(final Pair highlightValue, final ResultWithRelations source, final ResultWithRelations target, final DedupConfig dedupConfig) { return new UpdateInfo<>( Topic.fromPath("ENRICH/MISSING/SUBJECT/" + highlightValue.getLeft()), highlightValue, source, target, (p, pair) -> p.getSubjects().add(pair.getRight()), pair -> pair.getLeft() + "::" + pair.getRight(), dedupConfig); } }