diff --git a/api/src/org/labkey/api/exp/api/ExpProtocol.java b/api/src/org/labkey/api/exp/api/ExpProtocol.java index eb633711b42..41d5b91af3f 100644 --- a/api/src/org/labkey/api/exp/api/ExpProtocol.java +++ b/api/src/org/labkey/api/exp/api/ExpProtocol.java @@ -99,7 +99,7 @@ enum Status String getContact(); List getChildProtocols(); - List getBatches(); + List getBatches(@Nullable Container c); void setEntityId(String entityId); String getEntityId(); diff --git a/assay/src/org/labkey/assay/AssayManager.java b/assay/src/org/labkey/assay/AssayManager.java index 1fa842571d8..4d0302e937d 100644 --- a/assay/src/org/labkey/assay/AssayManager.java +++ b/assay/src/org/labkey/assay/AssayManager.java @@ -378,10 +378,16 @@ public AssaySchema createSchema(User user, Container container, @Nullable Contai @Override public @NotNull List getAssayProtocols(Container container) + { + return getAssayProtocols(container, false); + } + + private @NotNull List getAssayProtocols(Container container, boolean currentOnly) { List allProtocols = new ArrayList<>(); - for (Container containerInScope : container.getContainersFor(ContainerType.DataType.protocol)) + Collection containerScopes = currentOnly ? List.of(container) : container.getContainersFor(ContainerType.DataType.protocol); + for (Container containerInScope : containerScopes) { List ids = PROTOCOL_CACHE.get(containerInScope); allProtocols.addAll(ids); @@ -622,14 +628,14 @@ public ExpExperiment findBatch(ExpRun run) } /** - * Creates a single document per assay design/folder combo, with some simple assay info (name, description), plus - * the names and comments from all the runs. + * Creates a single document per assay design, with some simple assay info (name, description). + * Note: the document for an assay protocol will just be associated with the protocol's container */ @Override public void indexAssays(SearchService.TaskIndexingQueue queue) { - List protocols = getAssayProtocols(queue.getContainer()); - + // GitHub Issue 895: for the assay protocol search document just user the current container's protocols + List protocols = getAssayProtocols(queue.getContainer(), true); for (ExpProtocol protocol : protocols) indexAssay(queue, protocol); } @@ -661,22 +667,6 @@ public void indexAssay(SearchService.TaskIndexingQueue queue, ExpProtocol protoc m.put(SearchService.PROPERTY.keywordsMed.toString(), keywords); m.put(SearchService.PROPERTY.categories.toString(), ASSAY_CATEGORY.getName()); - ExperimentService.get().getExpRuns(c, protocol, null) - .forEach(run -> { - StringBuilder runKeywords = new StringBuilder(); - - runKeywords.append(" "); - runKeywords.append(run.getName()); - - if (null != run.getComments()) - { - runKeywords.append(" "); - runKeywords.append(run.getComments()); - } - - body.append(runKeywords); - }); - String docId = protocol.getDocumentId(); WebdavResource r = new SimpleDocumentResource(new Path(docId), docId, c.getEntityId(), "text/plain", body.toString(), assayBeginURL, createdBy, created, modifiedBy, modified, m); queue.addResource(r); @@ -728,7 +718,7 @@ private void indexAssayBatches(SearchService.TaskIndexingQueue queue, ExpProtoco { if (shouldIndexProtocolBatches(protocol)) { - for (ExpExperiment batch : protocol.getBatches()) + for (ExpExperiment batch : protocol.getBatches(queue.getContainer())) { if (modifiedSince == null || modifiedSince.before(batch.getModified())) indexAssayBatch(queue, batch); diff --git a/experiment/src/org/labkey/experiment/api/ExpProtocolImpl.java b/experiment/src/org/labkey/experiment/api/ExpProtocolImpl.java index 82f611ce76d..6b8a209c0bf 100644 --- a/experiment/src/org/labkey/experiment/api/ExpProtocolImpl.java +++ b/experiment/src/org/labkey/experiment/api/ExpProtocolImpl.java @@ -21,7 +21,6 @@ import org.labkey.api.assay.AssayProvider; import org.labkey.api.data.Container; import org.labkey.api.data.ContainerManager; -import org.labkey.api.data.Filter; import org.labkey.api.data.SQLFragment; import org.labkey.api.data.SimpleFilter; import org.labkey.api.data.SqlSelector; @@ -329,9 +328,12 @@ public List getChildProtocols() } @Override - public List getBatches() + public List getBatches(@Nullable Container c) { - Filter filter = new SimpleFilter(FieldKey.fromParts("BatchProtocolId"), getRowId()); + SimpleFilter filter = new SimpleFilter(FieldKey.fromParts("BatchProtocolId"), getRowId()); + // GitHub Issue 895: add param option to get just the assay batches for a specific container + if (c != null) + filter.addCondition(FieldKey.fromParts("container"), c); return ExpExperimentImpl.fromExperiments(new TableSelector(ExperimentServiceImpl.get().getTinfoExperiment(), filter, null).getArray(Experiment.class)); } diff --git a/experiment/src/org/labkey/experiment/api/ExperimentServiceImpl.java b/experiment/src/org/labkey/experiment/api/ExperimentServiceImpl.java index 0758c8a156b..401357afcc1 100644 --- a/experiment/src/org/labkey/experiment/api/ExperimentServiceImpl.java +++ b/experiment/src/org/labkey/experiment/api/ExperimentServiceImpl.java @@ -4528,7 +4528,7 @@ public void deleteProtocolByRowIds(Container c, User user, @Nullable String audi for (ExpProtocol protocolToDelete : expProtocols) { - for (ExpExperiment batch : protocolToDelete.getBatches()) + for (ExpExperiment batch : protocolToDelete.getBatches(null)) { batch.delete(user); }