package eu.dnetlib.iis.collapsers.basic; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import eu.dnetlib.iis.common.citations.schemas.Citation; import eu.dnetlib.iis.common.citations.schemas.CitationEntry; /** * Collapses {@link Citation} records by position field by merging all fields * taking confidenceLevel into account when handling destinationDocumentId. * * It is expected sourceDocumentId is the same for all {@link Citation} objects. * * @author mhorst */ public class GenericCitationCollapser extends SimpleCollapser { @Override protected List collapseNonEmpty(List objects) { Map> citationsByPositionMap = new HashMap>(); for (Citation citation : objects) { List list = citationsByPositionMap.get(citation.getEntry().getPosition()); if (list==null) { citationsByPositionMap.put(citation.getEntry().getPosition(), list = new ArrayList()); } list.add(citation); } List results = new ArrayList(citationsByPositionMap.size()); for (List citationsByPosition : citationsByPositionMap.values()) { results.add(collapseForPosition(citationsByPosition)); } return results; } /** * Collapses citations for the same sourceDocumentId and position. * @param objects * @return collapsed citation or null when nothing to collapse */ Citation collapseForPosition(List objects) { if (objects==null || objects.size()==0) { return null; } else if (objects.size()==1) { return objects.get(0); } else { Citation resultCandidate = objects.get(0); for (int i=1; i0) { existingCitation.getEntry().setRawText(newCitationEntry.getRawText()); } } return existingCitation; } }