package eu.dnetlib.iis.wf.citationmatching.direct.converter;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.collections.MapUtils;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import eu.dnetlib.iis.citationmatching.direct.schemas.DocumentMetadata;
import eu.dnetlib.iis.citationmatching.direct.schemas.ReferenceMetadata;
import eu.dnetlib.iis.transformers.metadatamerger.schemas.ExtractedDocumentMetadataMergedWithOriginal;
/**
* Converter of {@link ExtractedDocumentMetadataMergedWithOriginal} object
* to {@link DocumentMetadata} object
*
* @author madryk
*
*/
public class DocumentToDirectCitationMetadataConverter implements Serializable {
private static final long serialVersionUID = 1L;
//------------------------ LOGIC --------------------------
/**
* Converts {@link ExtractedDocumentMetadataMergedWithOriginal} to {@link DocumentMetadata}
*/
public DocumentMetadata convert(ExtractedDocumentMetadataMergedWithOriginal document) {
Preconditions.checkNotNull(document);
List<ReferenceMetadata> citationReferencesMetadata = convertReferences(document.getReferences());
return new DocumentMetadata(document.getId(), document.getExternalIdentifiers(), document.getPublicationTypeName(),
citationReferencesMetadata);
}
//------------------------ PRIVATE --------------------------
private List<ReferenceMetadata> convertReferences(List<eu.dnetlib.iis.metadataextraction.schemas.ReferenceMetadata> documentReferences) {
List<ReferenceMetadata> citationReferencesMetadata = Lists.newArrayList();
if (documentReferences != null) {
for (eu.dnetlib.iis.metadataextraction.schemas.ReferenceMetadata documentReference : documentReferences) {
ReferenceMetadata citationReferenceMetadata = convertReference(documentReference);
if (citationReferenceMetadata != null) {
citationReferencesMetadata.add(citationReferenceMetadata);
}
}
}
return citationReferencesMetadata;
}
private ReferenceMetadata convertReference(eu.dnetlib.iis.metadataextraction.schemas.ReferenceMetadata documentReference) {
if (MapUtils.isEmpty(documentReference.getBasicMetadata().getExternalIds())) {
return null;
}
return new eu.dnetlib.iis.citationmatching.direct.schemas.ReferenceMetadata(
documentReference.getPosition(),
documentReference.getBasicMetadata().getExternalIds());
}
}