diff --git a/goci-core/goci-repository/src/main/java/uk/ac/ebi/spot/goci/repository/DiseaseTraitRepository.java b/goci-core/goci-repository/src/main/java/uk/ac/ebi/spot/goci/repository/DiseaseTraitRepository.java index 1ad07631d8..28e5f2136b 100644 --- a/goci-core/goci-repository/src/main/java/uk/ac/ebi/spot/goci/repository/DiseaseTraitRepository.java +++ b/goci-core/goci-repository/src/main/java/uk/ac/ebi/spot/goci/repository/DiseaseTraitRepository.java @@ -61,4 +61,12 @@ Page findByStudiesPublicationIdPubmedId( "group by dt.id order by count(dt.id) desc") List getDiseaseTraitCounts(); + //findByStudiesIdAndStudiesHousekeepingCatalogPublishDateIsNotNullAndStudiesHousekeepingCatalogUnpublishDateIsNull + @RestResource(exported = false) + @Query("select t from DiseaseTrait t join t.studies s join s.housekeeping h where h.catalogPublishDate is null " + + "and h.catalogUnpublishDate is not null and s.id = :studyId") + List findBackgroundTraitByStudyId( + Long studyId); + + } diff --git a/goci-core/goci-repository/src/main/java/uk/ac/ebi/spot/goci/repository/EfoTraitRepository.java b/goci-core/goci-repository/src/main/java/uk/ac/ebi/spot/goci/repository/EfoTraitRepository.java index 9226c0f2f0..5a2a74b46a 100644 --- a/goci-core/goci-repository/src/main/java/uk/ac/ebi/spot/goci/repository/EfoTraitRepository.java +++ b/goci-core/goci-repository/src/main/java/uk/ac/ebi/spot/goci/repository/EfoTraitRepository.java @@ -62,5 +62,11 @@ Page findByStudiesIdAndStudiesHousekeepingCatalogPublishDateIsNotNullA @RestResource(exported = false) Page findByStudiesPublicationIdPubmedId(String pumbedId, Pageable pageable); + //findByStudiesIdAndStudiesHousekeepingCatalogPublishDateIsNotNullAndStudiesHousekeepingCatalogUnpublishDateIsNull + @RestResource(exported = false) + @Query("select t from EfoTrait t join t.studies s join s.housekeeping h where h.catalogPublishDate is null " + + "and h.catalogUnpublishDate is not null and s.id = :studyId") + List findMappedBackgroundTraitByStudyId( + Long studyId); } diff --git a/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/AssociationService.java b/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/AssociationService.java index db54cb5be2..7200c08d71 100644 --- a/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/AssociationService.java +++ b/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/AssociationService.java @@ -187,6 +187,8 @@ public void loadAssociatedData(Association association) { int traitCount = association.getEfoTraits().size(); //Study study = studyService.fetchOne(association.getStudy()); Study study = association.getStudy(); + study.getBackgroundTrait().getTrait(); + study.getMappedBackgroundTraits().size(); AtomicInteger reportedGeneCount = new AtomicInteger(); Collection snps = new HashSet<>(); Collection proxySnps = new HashSet<>(); diff --git a/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/StudyService.java b/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/StudyService.java index d209f5f3cf..6fa3e2f5d3 100644 --- a/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/StudyService.java +++ b/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/StudyService.java @@ -214,6 +214,12 @@ public void loadAssociatedData(Study study) { int efoTraitCount = study.getEfoTraits().size(); int associationCount = study.getAssociations().size(); int ancestryCount = study.getAncestries().size(); + if(study.getBackgroundTrait() != null) { + study.getBackgroundTrait().getTrait(); + } + if(study.getMappedBackgroundTraits() != null) { + study.getMappedBackgroundTraits().size(); + } study.getAncestries().forEach( ancestry -> { @@ -272,6 +278,8 @@ public void deepLoadAssociatedData(Study study) { int associationCount = study.getAssociations().size(); // int snpCount = study.getSingleNucleotidePolymorphisms().size(); int platformCount = study.getPlatforms().size(); + study.getMappedBackgroundTraits().size(); + study.getBackgroundTrait().getTrait(); int ancestryCount = study.getAncestries().size(); @@ -329,6 +337,8 @@ public void deepLoadAssociatedData(Study study) { for (Association association : study.getAssociations()) { int lociCount = association.getLoci().size(); int associationEfoTraitCount = association.getEfoTraits().size(); + study.getBackgroundTrait().getTrait(); + study.getMappedBackgroundTraits().size(); getLog().trace("Association '" + association.getId() + "' is linked to " + lociCount + " loci and " + associationEfoTraitCount + "efo traits."); for (Locus locus : association.getLoci()) { diff --git a/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/TraitService.java b/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/TraitService.java index 3362d882a6..52f0f401d9 100644 --- a/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/TraitService.java +++ b/goci-core/goci-service/src/main/java/uk/ac/ebi/spot/goci/service/TraitService.java @@ -34,11 +34,20 @@ public Collection findReportedTraitByStudyId(Long studyId) { studyId); } + public Collection findBackgroundTraitByStudyId(Long studyId) { + return diseaseTraitRepository.findBackgroundTraitByStudyId( + studyId); + } + public Collection findReportedTraitByAssociationId(Long associationId) { return diseaseTraitRepository.findByStudiesAssociationsIdAndStudiesHousekeepingCatalogPublishDateIsNotNullAndStudiesHousekeepingCatalogUnpublishDateIsNull( associationId); } + public Collection findMappedBackgroundTraitByStudyId(Long studyId) { + return efoTraitRepository.findMappedBackgroundTraitByStudyId(studyId); + } + public Collection findMappedTraitByStudyId(Long studyId) { return efoTraitRepository.findByStudiesIdAndStudiesHousekeepingCatalogPublishDateIsNotNullAndStudiesHousekeepingCatalogUnpublishDateIsNull( studyId); diff --git a/goci-interfaces/goci-solr/src/main/resources/solr/solr/gwas/conf/schema.xml b/goci-interfaces/goci-solr/src/main/resources/solr/solr/gwas/conf/schema.xml index 54bbd1b579..df6d28e5fb 100644 --- a/goci-interfaces/goci-solr/src/main/resources/solr/solr/gwas/conf/schema.xml +++ b/goci-interfaces/goci-solr/src/main/resources/solr/solr/gwas/conf/schema.xml @@ -184,10 +184,13 @@ + + + @@ -397,8 +400,11 @@ + + + diff --git a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/model/AssociationDocument.java b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/model/AssociationDocument.java index 109c5949af..bab9ef878c 100644 --- a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/model/AssociationDocument.java +++ b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/model/AssociationDocument.java @@ -105,6 +105,13 @@ public class AssociationDocument extends OntologyEnabledDocument { @Field("mappedLabel") private Collection mappedLabels; @Field("mappedUri") private Collection mappedUris; + // embedded DiseaseTrait info + @Field("backgroundTraitName") private Collection backgroundTraitNames; + + // embedded EfoTrait info + @Field("backgroundEfoLabel") private Collection backgroundEfoLabels; + @Field("backgroundEfoUri") private Collection backgroundEfoUris; + public AssociationDocument(Association association) { super(association); this.riskFrequency = association.getRiskFrequency(); @@ -152,6 +159,11 @@ public AssociationDocument(Association association) { this.mappedLabels = new LinkedHashSet<>(); this.mappedUris = new LinkedHashSet<>(); + this.backgroundTraitNames = new LinkedHashSet<>(); + + this.backgroundEfoLabels = new LinkedHashSet<>(); + this.backgroundEfoUris = new LinkedHashSet<>(); + this.ancestralGroups = new LinkedHashSet<>(); this.countriesOfOrigin = new LinkedHashSet<>(); this.countriesOfRecruitment = new LinkedHashSet<>(); @@ -351,6 +363,18 @@ public void addMappedUri(String mappedUri) { this.mappedUris.add(mappedUri); } + public void addBackgroundTraitName(String traitName) { + this.backgroundTraitNames.add(traitName); + } + + public void addBackgroundEfoLabel(String mappedLabel) { + this.backgroundEfoLabels.add(mappedLabel); + } + + public void addBackgroundEfoUri(String mappedUri) { + this.backgroundEfoUris.add(mappedUri); + } + public void addStudyId(String studyId) { this.studyIds.add(studyId); } diff --git a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/model/StudyDocument.java b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/model/StudyDocument.java index a29ba2c2c4..cd826342b0 100644 --- a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/model/StudyDocument.java +++ b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/model/StudyDocument.java @@ -76,6 +76,13 @@ public class StudyDocument extends OntologyEnabledDocument { @Field("mappedLabel") private Collection mappedLabels; @Field("mappedUri") private Collection mappedUris; + // embedded DiseaseTrait info + @Field("backgroundTraitName") private Collection backgroundTraitNames; + + // embedded EfoTrait info + @Field("backgroundEfoLabel") private Collection backgroundEfoLabels; + @Field("backgroundEfoUri") private Collection backgroundEfoUris; + public StudyDocument(Study study) { super(study); this.pubmedId = study.getPublicationId().getPubmedId(); @@ -146,6 +153,11 @@ public StudyDocument(Study study) { this.mappedLabels = new LinkedHashSet<>(); this.mappedUris = new LinkedHashSet<>(); + + this.backgroundTraitNames = new LinkedHashSet<>(); + + this.backgroundEfoLabels = new LinkedHashSet<>(); + this.backgroundEfoUris = new LinkedHashSet<>(); } public String getPubmedId() { @@ -273,6 +285,18 @@ public void addMappedUri(String mappedUri) { this.mappedUris.add(mappedUri); } + public void addBackgroundTraitName(String traitName) { + this.backgroundTraitNames.add(traitName); + } + + public void addBackgroundEfoLabel(String mappedLabel) { + this.backgroundEfoLabels.add(mappedLabel); + } + + public void addBackgroundEfoUri(String mappedUri) { + this.backgroundEfoUris.add(mappedUri); + } + public Collection getAncestralGroups() { return ancestralGroups; } diff --git a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/AssociationEnrichmentService.java b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/AssociationEnrichmentService.java index e4fb796119..ad083194d1 100644 --- a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/AssociationEnrichmentService.java +++ b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/AssociationEnrichmentService.java @@ -2,10 +2,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import uk.ac.ebi.spot.goci.model.AssociationDocument; -import uk.ac.ebi.spot.goci.model.DiseaseTraitDocument; -import uk.ac.ebi.spot.goci.model.EfoDocument; -import uk.ac.ebi.spot.goci.model.StudyDocument; +import uk.ac.ebi.spot.goci.model.*; /** * Javadocs go here! @@ -14,7 +11,7 @@ * @date 13/02/15 */ @Service -public class AssociationEnrichmentService implements DocumentEnrichmentService { +public class AssociationEnrichmentService implements DocumentEnrichmentService { private final DiseaseTraitDocumentCache diseaseTraitCache; private final StudyDocumentCache studyCache; private StudyService studyService; @@ -36,7 +33,7 @@ public AssociationEnrichmentService(StudyService studyService, TraitService trai return 2; } - @Override public void doEnrichment(AssociationDocument document) { + @Override public void doEnrichment(AssociationDocument document, Association association) { long id = Long.valueOf(document.getId().split(":")[1]); studyService.findByAssociationId(id).forEach( diff --git a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/DocumentEnrichmentService.java b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/DocumentEnrichmentService.java index afb300ad88..41c3d8ebea 100644 --- a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/DocumentEnrichmentService.java +++ b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/DocumentEnrichmentService.java @@ -9,7 +9,7 @@ * @author Tony Burdett * @date 19/01/15 */ -public interface DocumentEnrichmentService { +public interface DocumentEnrichmentService { /** * The priority of a document enrichment service indicates the order in which enrichments will be run, lowest value * first. This enables enrichment chaining. @@ -18,5 +18,5 @@ public interface DocumentEnrichmentService { */ int getPriority(); - void doEnrichment(D document); + void doEnrichment(D document, T dbObject); } diff --git a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/ObjectConverter.java b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/ObjectConverter.java index dc658a808d..bec9c3ab91 100644 --- a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/ObjectConverter.java +++ b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/ObjectConverter.java @@ -63,7 +63,7 @@ public > D convert(O object, Class documentType) { return des1.getPriority() - des2.getPriority(); } }) - .forEach(documentEnrichmentService -> documentEnrichmentService.doEnrichment(document)); + .forEach(documentEnrichmentService -> documentEnrichmentService.doEnrichment(document, object)); // and return return document; diff --git a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/OntologyExpansionService.java b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/OntologyExpansionService.java index 35b95358dc..ba3e4af2fb 100644 --- a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/OntologyExpansionService.java +++ b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/OntologyExpansionService.java @@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import uk.ac.ebi.spot.goci.model.DiseaseTrait; import uk.ac.ebi.spot.goci.model.OntologyEnabledDocument; import uk.ac.ebi.spot.goci.ontology.owl.OntologyLoader; @@ -18,7 +19,7 @@ * @date 19/01/15 */ @Service -public class OntologyExpansionService implements DocumentEnrichmentService> { +public class OntologyExpansionService implements DocumentEnrichmentService, Object> { private OntologyLoader ontologyLoader; private final Logger log = LoggerFactory.getLogger(getClass()); @@ -36,7 +37,7 @@ public OntologyExpansionService(OntologyLoader ontologyLoader) { return 4; } - @Override public void doEnrichment(OntologyEnabledDocument document) { + @Override public void doEnrichment(OntologyEnabledDocument document, Object o) { // improve trait document with parent and child terms etc here for (String traitUriString : document.getTraitUris()) { traitUriString = traitUriString.trim(); diff --git a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/StudyEnrichmentService.java b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/StudyEnrichmentService.java index c3ff3f3639..a8cd7ffad4 100644 --- a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/StudyEnrichmentService.java +++ b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/StudyEnrichmentService.java @@ -2,11 +2,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import uk.ac.ebi.spot.goci.model.Association; -import uk.ac.ebi.spot.goci.model.AssociationDocument; -import uk.ac.ebi.spot.goci.model.DiseaseTraitDocument; -import uk.ac.ebi.spot.goci.model.EfoDocument; -import uk.ac.ebi.spot.goci.model.StudyDocument; +import uk.ac.ebi.spot.goci.model.*; import java.util.Collection; @@ -17,7 +13,7 @@ * @date 13/02/15 */ @Service -public class StudyEnrichmentService implements DocumentEnrichmentService { +public class StudyEnrichmentService implements DocumentEnrichmentService { private final EfoDocumentCache efoCache; private final DiseaseTraitDocumentCache diseaseTraitCache; private final StudyDocumentCache studyDocumentCache; @@ -39,19 +35,24 @@ public StudyEnrichmentService(AssociationService associationService, return 1; } - @Override public void doEnrichment(StudyDocument document) { + @Override public void doEnrichment(StudyDocument document, Study study) { long id = Long.valueOf(document.getId().split(":")[1]); - if(!studyDocumentCache.hasDocument(id)){ - studyDocumentCache.addDocument(id, document); - } +// if(!studyDocumentCache.hasDocument(id)){ +// studyDocumentCache.addDocument(id, document); +// } - Collection associations = associationService.findPublishedAssociationsByStudyId(id); + Collection associations = study.getAssociations(); document.setAssociationCount(associations.size()); associations.forEach(association -> document.embed(new AssociationDocument(association))); - traitService.findReportedTraitByStudyId(id).forEach( - trait -> document.embed(diseaseTraitCache.getDocument(trait.getTrait()))); - traitService.findMappedTraitByStudyId(id).forEach( + document.embed(diseaseTraitCache.getDocument(study.getDiseaseTrait().getTrait())); + study.getEfoTraits().forEach( trait -> document.embed(efoCache.getDocument(trait.getTrait()))); + document.addBackgroundTraitName(study.getBackgroundTrait().getTrait()); + study.getMappedBackgroundTraits().forEach(efoTrait -> { + document.addBackgroundEfoLabel(efoTrait.getTrait()); + document.addBackgroundEfoUri(efoTrait.getUri()); + } + ); } } diff --git a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/TraitEnrichmentService.java b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/TraitEnrichmentService.java index 4d059daab4..dda2c78b64 100644 --- a/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/TraitEnrichmentService.java +++ b/goci-tools/goci-solr-indexer/src/main/java/uk/ac/ebi/spot/goci/service/TraitEnrichmentService.java @@ -2,11 +2,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import uk.ac.ebi.spot.goci.model.AssociationDocument; -import uk.ac.ebi.spot.goci.model.DiseaseTraitDocument; -import uk.ac.ebi.spot.goci.model.EfoDocument; -import uk.ac.ebi.spot.goci.model.EfoTrait; -import uk.ac.ebi.spot.goci.model.StudyDocument; +import uk.ac.ebi.spot.goci.model.*; import java.util.HashSet; import java.util.Set; @@ -18,7 +14,7 @@ * @date 13/02/15 */ @Service -public class TraitEnrichmentService implements DocumentEnrichmentService { +public class TraitEnrichmentService implements DocumentEnrichmentService { private final EfoDocumentCache efoCache; private StudyService studyService; private AssociationService associationService; @@ -38,7 +34,7 @@ public TraitEnrichmentService(StudyService studyService, return 3; } - @Override public void doEnrichment(DiseaseTraitDocument document) { + @Override public void doEnrichment(DiseaseTraitDocument document, DiseaseTrait diseaseTrait) { long id = Long.valueOf(document.getId().split(":")[1]); // Comment this part if you want to exclude the DiseaseTrait Doc Enrichment studyService.findByDiseaseTraitId(id).forEach(