diff --git a/agr_indexer/src/main/java/org/alliancegenome/indexer/config/IndexerConfig.java b/agr_indexer/src/main/java/org/alliancegenome/indexer/config/IndexerConfig.java index 346e69e1d..f912d58c2 100644 --- a/agr_indexer/src/main/java/org/alliancegenome/indexer/config/IndexerConfig.java +++ b/agr_indexer/src/main/java/org/alliancegenome/indexer/config/IndexerConfig.java @@ -6,13 +6,7 @@ import org.alliancegenome.indexer.indexers.GeneIndexer; import org.alliancegenome.indexer.indexers.GoIndexer; import org.alliancegenome.indexer.indexers.ModelIndexer; -import org.alliancegenome.indexer.indexers.curation.DiseaseAnnotationCurationIndexer; -import org.alliancegenome.indexer.indexers.curation.GeneExpressionAnnotationIndexer; -import org.alliancegenome.indexer.indexers.curation.GeneGeneticInteractionCurationIndexer; -import org.alliancegenome.indexer.indexers.curation.GeneMolecularInteractionCurationIndexer; -import org.alliancegenome.indexer.indexers.curation.GeneToGeneParalogyIndexer; -import org.alliancegenome.indexer.indexers.curation.PhenotypeAnnotationCurationIndexer; -import org.alliancegenome.indexer.indexers.curation.ReleaseInfoIndexer; +import org.alliancegenome.indexer.indexers.curation.*; public enum IndexerConfig { @@ -27,6 +21,7 @@ public enum IndexerConfig { // Curation Indexers DiseaseAnnotationIndexer("diseaseAnnotation", DiseaseAnnotationCurationIndexer.class, 1, 1500, 1500, 2, 1), GeneExpressionAnnotationIndexer("geneExpressionAnnotation", GeneExpressionAnnotationIndexer.class, 4, 1500, 1500, 2, 1), + GeneExpressionExperimentIndexer("geneExpressionExperiment", GeneExpressionExperimentIndexer.class, 4, 1500, 1500, 2, 1), GeneGeneticInteractionIndexers("geneGeneticInteraction", GeneGeneticInteractionCurationIndexer.class, 4, 1500, 1500, 2, 1), GeneMolecularInteractionIndexers("geneMolecularInteraction", GeneMolecularInteractionCurationIndexer.class, 4, 1500, 1500, 2, 1), ParalogyIndexer("paralogy", GeneToGeneParalogyIndexer.class, 4, 5000, 5000, 8, 1), diff --git a/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/GeneExpressionExperimentIndexer.java b/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/GeneExpressionExperimentIndexer.java new file mode 100644 index 000000000..527a36d68 --- /dev/null +++ b/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/GeneExpressionExperimentIndexer.java @@ -0,0 +1,76 @@ +package org.alliancegenome.indexer.indexers.curation; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.alliancegenome.api.entity.GeneExpressionExperimentDocument; +import org.alliancegenome.curation_api.model.entities.GeneExpressionExperiment; +import org.alliancegenome.curation_api.response.SearchResponse; +import org.alliancegenome.indexer.RestConfig; +import org.alliancegenome.indexer.config.IndexerConfig; +import org.alliancegenome.indexer.indexers.Indexer; +import org.alliancegenome.indexer.indexers.curation.service.GeneExpressionExperimentService; +import org.apache.commons.collections.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.LinkedBlockingDeque; + +@Slf4j +public class GeneExpressionExperimentIndexer extends Indexer { + GeneExpressionExperimentService geneExpressionExperimentService; + + public GeneExpressionExperimentIndexer(IndexerConfig indexerConfig) { + super(indexerConfig); + } + + @Override + protected void index() { + geneExpressionExperimentService = new GeneExpressionExperimentService(); + try { + SearchResponse response = geneExpressionExperimentService.getGeneExpressionExperiments(0, 0); + log.info("GeneExpressionExperiment count: " + response.getTotalResults()); + int totalPages = (int) (response.getTotalResults() / indexerConfig.getBufferSize()); + LinkedBlockingDeque queue = new LinkedBlockingDeque<>(); + for (int i = 0; i <= totalPages; i++) { + queue.add(String.valueOf(i)); + } + initiateThreading(queue); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + @Override + protected void startSingleThread(LinkedBlockingDeque queue) { + while (true) { + try { + if (queue.isEmpty()) { + return; + } + + String page = queue.takeFirst(); + log.debug(queue.size() + " pages to process " + Thread.currentThread().getName() + " starting page: " + page); + SearchResponse response = geneExpressionExperimentService.getGeneExpressionExperiments(Integer.valueOf(page), indexerConfig.getBufferSize()); + if (response == null || CollectionUtils.isEmpty(response.getResults())) { + return; + } + List documentsToIndex = new ArrayList<>(); + for (GeneExpressionExperiment gee : response.getResults()) { + GeneExpressionExperimentDocument geneExpressionExperimentDocument = new GeneExpressionExperimentDocument(); + geneExpressionExperimentDocument.setGeneExpressionExperiment(gee); + documentsToIndex.add(geneExpressionExperimentDocument); + } + indexDocuments(documentsToIndex); + } catch (Exception e) { + log.error("Error while indexing...", e); + System.exit(-1); + return; + } + } + } + + @Override + protected ObjectMapper customizeObjectMapper(ObjectMapper objectMapper) { + return RestConfig.config.getJacksonObjectMapperFactory().createObjectMapper(); + } +} diff --git a/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/interfaces/GeneExpressionExperimentInterface.java b/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/interfaces/GeneExpressionExperimentInterface.java new file mode 100644 index 000000000..22512083c --- /dev/null +++ b/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/interfaces/GeneExpressionExperimentInterface.java @@ -0,0 +1,24 @@ +package org.alliancegenome.indexer.indexers.curation.interfaces; + +import com.fasterxml.jackson.annotation.JsonView; +import jakarta.ws.rs.*; +import org.alliancegenome.curation_api.model.entities.GeneExpressionExperiment; +import org.alliancegenome.curation_api.response.SearchResponse; +import org.alliancegenome.curation_api.view.View; + +import java.util.HashMap; + +@Path("/gene-expression-experiment") +@Produces({"application/json"}) +@Consumes({"application/json"}) + +public interface GeneExpressionExperimentInterface { + @POST + @Path("/findForPublic") + @JsonView({View.ForPublic.class}) + SearchResponse findForPublic( + @DefaultValue("0") @QueryParam("page") Integer page, + @DefaultValue("10") @QueryParam("limit") Integer limit, + HashMap params + ); +} diff --git a/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/service/GeneExpressionExperimentService.java b/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/service/GeneExpressionExperimentService.java new file mode 100644 index 000000000..05d52d485 --- /dev/null +++ b/agr_indexer/src/main/java/org/alliancegenome/indexer/indexers/curation/service/GeneExpressionExperimentService.java @@ -0,0 +1,21 @@ +package org.alliancegenome.indexer.indexers.curation.service; + +import org.alliancegenome.core.config.ConfigHelper; +import org.alliancegenome.curation_api.model.entities.GeneExpressionExperiment; +import org.alliancegenome.curation_api.response.SearchResponse; +import org.alliancegenome.indexer.RestConfig; +import org.alliancegenome.indexer.indexers.curation.interfaces.GeneExpressionExperimentInterface; +import si.mazi.rescu.RestProxyFactory; + +import java.util.HashMap; + +public class GeneExpressionExperimentService { + private GeneExpressionExperimentInterface geneExpressionExperimentClient = RestProxyFactory.createProxy(GeneExpressionExperimentInterface.class, ConfigHelper.getCurationApiUrl(), RestConfig.config); + + public SearchResponse getGeneExpressionExperiments(Integer page, Integer limit) { + HashMap params = new HashMap<>(); + params.put("internal", false); + params.put("obsolete", false); + return geneExpressionExperimentClient.findForPublic(page, limit, params); + } +} diff --git a/agr_java_core/src/main/java/org/alliancegenome/api/entity/GeneExpressionExperimentDocument.java b/agr_java_core/src/main/java/org/alliancegenome/api/entity/GeneExpressionExperimentDocument.java new file mode 100644 index 000000000..231bc7b40 --- /dev/null +++ b/agr_java_core/src/main/java/org/alliancegenome/api/entity/GeneExpressionExperimentDocument.java @@ -0,0 +1,19 @@ +package org.alliancegenome.api.entity; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.alliancegenome.curation_api.model.entities.GeneExpressionExperiment; +import org.alliancegenome.es.index.ESDocument; + +@Data +@EqualsAndHashCode(callSuper = true) +public class GeneExpressionExperimentDocument extends ESDocument { + + String category = "gene_expression_experiment"; + GeneExpressionExperiment geneExpressionExperiment; + + @Override + public String getType() { + return category; + } +}