diff --git a/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/AlleleSummaryCurationIndexer.java b/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/AlleleSummaryCurationIndexer.java index ef628deab..54d883d62 100644 --- a/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/AlleleSummaryCurationIndexer.java +++ b/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/AlleleSummaryCurationIndexer.java @@ -6,9 +6,11 @@ import org.alliancegenome.core.config.ConfigHelper; import org.alliancegenome.core.variant.converters.AlleleSearchResultConverter; import org.alliancegenome.core.variant.converters.AlleleSequenceSummaryConverter; +import org.alliancegenome.core.variant.converters.AlleleToVariantSummaryConverter; import org.alliancegenome.curation_api.interfaces.document.AlleleDocumentInterface; import org.alliancegenome.curation_api.model.document.es.AlleleSummaryDocument; import org.alliancegenome.curation_api.model.document.es.SequenceSummaryDocument; +import org.alliancegenome.curation_api.model.document.es.VariantSummaryDocument; import org.alliancegenome.es.model.AlleleSearchResultDocument; import org.alliancegenome.curation_api.response.SearchResponse; import org.alliancegenome.curation_api.view.CurationView; @@ -30,6 +32,7 @@ public class AlleleSummaryCurationIndexer extends Indexer { private final AlleleDocumentInterface alleleApi = RestProxyFactory.createProxy(AlleleDocumentInterface.class, ConfigHelper.getCurationApiUrl(), RestConfig.config); private final AlleleSequenceSummaryConverter sequenceSummaryConverter = new AlleleSequenceSummaryConverter(); private final AlleleSearchResultConverter alleleSearchResultConverter = new AlleleSearchResultConverter(); + private final AlleleToVariantSummaryConverter variantSummaryConverter = new AlleleToVariantSummaryConverter(); private List> idBatches; @@ -79,6 +82,7 @@ protected void startSingleThread(LinkedBlockingDeque queue) { // Convert to derived documents first (consumes transport-only fields) List sequenceDocs = sequenceSummaryConverter.convert(response.getResults()); List searchDocs = alleleSearchResultConverter.convert(response.getResults()); + List variantDocs = variantSummaryConverter.convert(response.getResults()); // Strip fields only needed by derived documents before indexing to ES response.getResults().forEach(AlleleSummaryDocument::removeTransportFields); @@ -87,6 +91,7 @@ protected void startSingleThread(LinkedBlockingDeque queue) { indexDocuments(response.getResults()); indexDocuments(sequenceDocs, CurationView.SequenceSummaryDocument.class); indexDocuments(searchDocs); + indexDocuments(variantDocs); } catch (Exception e) { log.error("Error while indexing...", e); ExceptionCatcher.report(e); diff --git a/agr_java_core/src/main/java/org/alliancegenome/core/variant/converters/AlleleToVariantSummaryConverter.java b/agr_java_core/src/main/java/org/alliancegenome/core/variant/converters/AlleleToVariantSummaryConverter.java new file mode 100644 index 000000000..7e9e915af --- /dev/null +++ b/agr_java_core/src/main/java/org/alliancegenome/core/variant/converters/AlleleToVariantSummaryConverter.java @@ -0,0 +1,49 @@ +package org.alliancegenome.core.variant.converters; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import org.alliancegenome.curation_api.model.document.es.AlleleSummaryDocument; +import org.alliancegenome.curation_api.model.document.es.VariantSummaryDocument; +import org.alliancegenome.curation_api.model.entities.Variant; +import org.apache.commons.collections4.CollectionUtils; + +/** + * Converts AlleleSummaryDocument objects into VariantSummaryDocument objects + * for LTP (Low Throughput) variants that come through the curation API allele endpoint. + * Produces one variant_summary document per allele x variant combination. + */ +public class AlleleToVariantSummaryConverter { + + public List convert(List alleleDocs) { + List result = new ArrayList<>(); + + for (AlleleSummaryDocument doc : alleleDocs) { + if (CollectionUtils.isEmpty(doc.getVariantList())) { + continue; + } + + for (Variant variant : doc.getVariantList()) { + if (CollectionUtils.isEmpty(variant.getCuratedVariantGenomicLocations())) { + continue; + } + + VariantSummaryDocument vsd = new VariantSummaryDocument(); + vsd.setAllele(doc.getAllele()); + vsd.setSymbol(doc.getSymbol()); + vsd.setVariantList(List.of(variant)); + vsd.setHasPhenotype(doc.getHasPhenotype() != null && doc.getHasPhenotype()); + vsd.setHasDisease(doc.getHasDisease() != null && doc.getHasDisease()); + + if (doc.getGeneIds() != null) { + vsd.setGeneIds(new HashSet<>(doc.getGeneIds())); + } + + result.add(vsd); + } + } + + return result; + } +}