Skip to content

Commit 57607da

Browse files
committed
Set the container filter for auto-linking samples from product folders. Implement server side getContainerFilterForFolder method.
1 parent 8d24e54 commit 57607da

3 files changed

Lines changed: 67 additions & 7 deletions

File tree

api/src/org/labkey/api/query/QueryService.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,38 @@
1616

1717
package org.labkey.api.query;
1818

19+
import jakarta.servlet.http.HttpSession;
1920
import org.apache.commons.collections4.SetValuedMap;
2021
import org.jetbrains.annotations.NotNull;
2122
import org.jetbrains.annotations.Nullable;
2223
import org.json.JSONObject;
2324
import org.labkey.api.audit.AuditHandler;
2425
import org.labkey.api.audit.DetailedAuditTypeEvent;
26+
import org.labkey.api.data.ColumnHeaderType;
27+
import org.labkey.api.data.ColumnInfo;
28+
import org.labkey.api.data.CompareType;
29+
import org.labkey.api.data.Container;
30+
import org.labkey.api.data.ContainerFilter;
31+
import org.labkey.api.data.DbSchema;
32+
import org.labkey.api.data.DisplayColumn;
33+
import org.labkey.api.data.Filter;
34+
import org.labkey.api.data.JdbcType;
35+
import org.labkey.api.data.MethodInfo;
36+
import org.labkey.api.data.MutableColumnInfo;
37+
import org.labkey.api.data.ParameterDescription;
38+
import org.labkey.api.data.ParameterDescriptionImpl;
39+
import org.labkey.api.data.QueryLogging;
40+
import org.labkey.api.data.Results;
41+
import org.labkey.api.data.SQLFragment;
42+
import org.labkey.api.data.Sort;
43+
import org.labkey.api.data.SqlSelector;
44+
import org.labkey.api.data.TableInfo;
45+
import org.labkey.api.data.TableSelector;
46+
import org.labkey.api.data.dialect.SqlDialect;
2547
import org.labkey.api.gwt.client.model.GWTPropertyDescriptor;
48+
import org.labkey.api.module.Module;
2649
import org.labkey.api.pipeline.PipelineJob;
2750
import org.labkey.api.query.column.ColumnInfoTransformer;
28-
import org.labkey.api.data.*;
29-
import org.labkey.api.data.dialect.SqlDialect;
30-
import org.labkey.api.module.Module;
3151
import org.labkey.api.query.column.ConceptURIColumnInfoTransformer;
3252
import org.labkey.api.query.snapshot.QuerySnapshotDefinition;
3353
import org.labkey.api.security.User;
@@ -41,7 +61,6 @@
4161
import org.labkey.data.xml.TableType;
4262
import org.springframework.web.servlet.mvc.Controller;
4363

44-
import jakarta.servlet.http.HttpSession;
4564
import java.io.IOException;
4665
import java.sql.ResultSet;
4766
import java.sql.SQLException;
@@ -653,6 +672,13 @@ default MutableColumnInfo applyColumnTransformer(MutableColumnInfo col)
653672
@Nullable
654673
ContainerFilter getContainerFilterForLookups(Container container, User user);
655674

675+
/**
676+
* Provides the configured ContainerFilter to utilize when requesting data that is being read
677+
* within a folder context. Equivalent to the client side function in @labkey/components
678+
*/
679+
@Nullable
680+
ContainerFilter getContainerFilterForFolder(Container container, User user);
681+
656682

657683
interface SelectBuilder
658684
{

query/src/org/labkey/query/QueryServiceImpl.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3516,6 +3516,40 @@ public ContainerFilter getContainerFilterForLookups(Container container, User us
35163516
return type.create(container, user);
35173517
}
35183518

3519+
@Override
3520+
@Nullable
3521+
public ContainerFilter getContainerFilterForFolder(Container container, User user)
3522+
{
3523+
// Check to see if product folders support is enabled.
3524+
if (container == null || !container.isProductFoldersEnabled())
3525+
return null;
3526+
3527+
if (isProductFoldersDataListingScopedToProject())
3528+
{
3529+
// When requesting data from a top-level folder context the ContainerFilter filters
3530+
// "down" the folder hierarchy for data.
3531+
if (container.isProject())
3532+
{
3533+
if (isProductFoldersAllFolderScopeEnabled())
3534+
return ContainerFilter.Type.AllInProjectPlusShared.create(container, user);
3535+
return ContainerFilter.Type.CurrentAndSubfoldersPlusShared.create(container, user);
3536+
}
3537+
3538+
// When listing data in a folder scope return data scoped to the current
3539+
// folder when the experimental feature is enabled.
3540+
return ContainerFilter.Type.Current.create(container, user);
3541+
}
3542+
3543+
// When requesting data from a top-level folder context the ContainerFilter filters
3544+
// "down" the folder hierarchy for data.
3545+
if (container.isProject())
3546+
return ContainerFilter.Type.CurrentAndSubfoldersPlusShared.create(container, user);
3547+
3548+
// When requesting data from a sub-folder context the ContainerFilter filters
3549+
// "up" the folder hierarchy for data.
3550+
return ContainerFilter.Type.CurrentPlusProjectAndShared.create(container, user);
3551+
}
3552+
35193553
@Override
35203554
@Nullable
35213555
public ContainerFilter.Type getContainerFilterTypeForLookups(Container container)

study/src/org/labkey/study/assay/StudyPublishManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,10 +1126,10 @@ public void autoLinkDerivedSamples(ExpSampleType sampleType, List<Long> keys, Co
11261126
qs.setQueryName(sampleType.getName());
11271127
qs.setBaseFilter(new SimpleFilter().addInClause(FieldKey.fromParts("RowId"), keys));
11281128

1129-
// issue 901 : lineage sourced subject or timepoint information are not resolving in cross folder configurations
1130-
ContainerFilter.Type cf = QueryService.get().getContainerFilterTypeForLookups(container);
1129+
// issue GH901 : lineage sourced subject or timepoint information are not resolving in cross folder configurations
1130+
ContainerFilter cf = QueryService.get().getContainerFilterForFolder(container, user);
11311131
if (cf != null)
1132-
qs.setContainerFilterName(cf.name());
1132+
qs.setContainerFilterName(cf.getType().name());
11331133

11341134
Map<StudyPublishService.LinkToStudyKeys, FieldKey> fieldKeyMap = StudyPublishService.get().getSamplePublishFieldKeys(user, container, sampleType, qs);
11351135
UserSchema userSchema = QueryService.get().getUserSchema(user, container, SamplesSchema.SCHEMA_NAME);

0 commit comments

Comments
 (0)