Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
c84add7
checkpoint for immutable TableInfo (set ContainerFilter at construct …
labkey-matthewb Apr 4, 2019
0624e85
build custom/external modules
labkey-matthewb Apr 8, 2019
ae0288a
interface ColumnInfo
labkey-matthewb Apr 11, 2019
11b8904
_expSchema.getRunsTable(true)
labkey-matthewb Apr 11, 2019
8449752
Remove dependencies.txt files -- shouldn't be committed
labkey-adam Apr 22, 2019
49e5ac5
merge from trunk
labkey-matthewb Apr 23, 2019
7614813
Merge remote-tracking branch 'origin/develop' into immutable_tableinfo
labkey-matthewb Apr 23, 2019
1b7a0f7
flow schema use createTable(CF)
labkey-matthewb Apr 23, 2019
38a529f
call correct super method
labkey-matthewb Apr 23, 2019
46cccfb
CustomAnnotationSchema
labkey-matthewb Apr 24, 2019
f24df54
SamplesSchema
labkey-matthewb Apr 24, 2019
4b27aef
Luminex NPE
labkey-matthewb Apr 25, 2019
2a63698
fix usages of createTable(name)
labkey-matthewb Apr 29, 2019
3c8a2e1
NabAssay fixes : container filter
labkey-klum Apr 29, 2019
4d5489c
TableInfo is locked: Peptides
labkey-matthewb Apr 30, 2019
0c16025
ProteinUserSchema.createTable()
labkey-matthewb Apr 30, 2019
262655b
Merge remote-tracking branch 'origin/develop' into immutable_tableinfo
labkey-matthewb May 1, 2019
d15a551
mutable table for ProteinSearchView
labkey-matthewb May 2, 2019
4243134
MicroarrayUserSchema
labkey-matthewb May 2, 2019
7db3b76
MS1Schema
labkey-matthewb May 2, 2019
0d57dac
Stop calling deprecated SimpleTable constructor
labkey-adam May 3, 2019
d1d560a
remove usage of DelegatingContainerFilter
labkey-matthewb May 3, 2019
c87cccc
fixes for luminex and NAb assays, clean up deprecated methods without…
labkey-klum May 3, 2019
b30b2d8
@Overrides
labkey-adam May 3, 2019
ea129d1
Merge remote-tracking branch 'origin/immutable_tableinfo' into immuta…
labkey-adam May 3, 2019
c6a9bc7
Override ContainerFilter version of createDataTable()
labkey-adam May 3, 2019
c7f34b7
Add @Override annotations
labkey-adam May 4, 2019
af98030
Merge from develop (#20)
labkey-adam May 6, 2019
b20d579
Don't need DelegatingContainerFilter
labkey-matthewb May 7, 2019
48f48f8
ExpSchema.getDatasTable(forWrite)
labkey-matthewb May 13, 2019
0028281
Merge remote-tracking branch 'origin/develop' into immutable_tableinfo
labkey-matthewb May 15, 2019
2e706b4
cleanup comments
labkey-matthewb May 15, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions TODO_ContainerFilter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
remove interface ContainerFilterable (migrate method to protected methods e.g. on FilteredTable)

remove class DelegatingContainerFilter

test ContainerFilter for ExperimentService.get().createQCFlagsTable

SpecimenForeignKey calls to getSpecimenTableInfo(null)

Find classes that override:
- UserSchema.createTable(String name)
- AssayProtocolSchema.createProviderTable(String name)
- AssayProtocolSchema.createDataTable(boolean includeCopiedToStudyColumns)
- AssayProtocolSchema.createRunsTable()
- AssayResultTable.AssayResultTable(AssayProtocolSchema schema, boolean includeCopiedToStudyColumns)

convert schemas: ms2, study, annoucements, flow

Find classes that use constructor
- SimpleTable(SchemaType schema, TableInfo table)

Who is still depending on AbstractExpSchema.setupTable(T table) to set containerFilter???

LineageTableInfo

More clean up of QueryForeignKey (Builder?)
More clean up of PdLookupForeignKey (.create()?)

QueryDefinitionImpl.getTable() remove usage of deprecated method w/o ContainerFilter

Issues.AllIssuesTable
IsuesTable.RelatedIssues lookup uses setFk() on locked table

search for "TODO ContainerFilter"

Check subclasses of LookupForeignKey. getLookupTableInfo() should use getLookupContainerFilter()

update MultiValuedForeignKey to take CF, check usages of passed in FK to make sure they are configured with CF

Check that subclasses of QueryView initialize ContainerFilter when they construct TableInfo

How does setting effectiveContainer (when != source container) on QFK affect the ContainerFilter? If effectiveContainer != sourceContainer
maybe it should have the same effect as setting lookupContainer? see for instance, ExperimentsTable in oconnorexperiments



OTHER BIGGER IDEAS
* separate ContainerFilter factory e.g. CurrentContainer(?) from ContainerFilter bound instance e.g. "CurrentContainer("/home")
* Make ColumnInfo and ColumnRenderProperties read-only interfaces and AbstactColumnInfo the constrctable implementation
5 changes: 3 additions & 2 deletions elisa/src/org/labkey/elisa/ElisaProtocolSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerFilter;
import org.labkey.api.exp.api.ExpProtocol;
import org.labkey.api.query.FilteredTable;
import org.labkey.api.security.User;
Expand All @@ -36,8 +37,8 @@ public ElisaProtocolSchema(User user, Container container, @NotNull ElisaAssayPr
}

@Override
public FilteredTable createDataTable(boolean includeCopiedToStudyColumns)
public FilteredTable createDataTable(ContainerFilter cf, boolean includeCopiedToStudyColumns)
{
return new ElisaResultsTable(this, includeCopiedToStudyColumns);
return new ElisaResultsTable(this, cf, includeCopiedToStudyColumns);
}
}
12 changes: 7 additions & 5 deletions elisa/src/org/labkey/elisa/query/ElisaResultsTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
*/
package org.labkey.elisa.query;

import org.labkey.api.data.BaseColumnInfo;
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.ContainerFilter;
import org.labkey.api.data.TableInfo;
import org.labkey.api.exp.api.ExpSampleSet;
import org.labkey.api.exp.api.ExperimentService;
Expand All @@ -41,9 +43,9 @@
*/
public class ElisaResultsTable extends AssayResultTable
{
public ElisaResultsTable(final AssayProtocolSchema schema, boolean includeCopiedToStudyColumns)
public ElisaResultsTable(final AssayProtocolSchema schema, ContainerFilter cf, boolean includeCopiedToStudyColumns)
{
super(schema, includeCopiedToStudyColumns);
super(schema, cf, includeCopiedToStudyColumns);

List<FieldKey> visibleColumns = new ArrayList<>();

Expand All @@ -60,19 +62,19 @@ public ElisaResultsTable(final AssayProtocolSchema schema, boolean includeCopied
}

// add a lookup to the material table
ColumnInfo specimenColumn = _columnMap.get(ElisaDataHandler.ELISA_INPUT_MATERIAL_DATA_PROPERTY);
BaseColumnInfo specimenColumn = (BaseColumnInfo)_columnMap.get(ElisaDataHandler.ELISA_INPUT_MATERIAL_DATA_PROPERTY);
specimenColumn.setFk(new LookupForeignKey("LSID")
{
public TableInfo getLookupTableInfo()
{
ExpMaterialTable materials = ExperimentService.get().createMaterialTable(ExpSchema.TableType.Materials.toString(), schema);
ExpMaterialTable materials = ExperimentService.get().createMaterialTable(ExpSchema.TableType.Materials.toString(), schema, cf);
// Make sure we are filtering to the same set of containers
materials.setContainerFilter(getContainerFilter());
if (sampleSet != null)
{
materials.setSampleSet(sampleSet, true);
}
ColumnInfo propertyCol = materials.addColumn(ExpMaterialTable.Column.Property);
var propertyCol = materials.addColumn(ExpMaterialTable.Column.Property);
if (propertyCol.getFk() instanceof PropertyForeignKey)
{
((PropertyForeignKey)propertyCol.getFk()).addDecorator(new SpecimenPropertyColumnDecorator(_provider, _protocol, schema));
Expand Down
16 changes: 10 additions & 6 deletions elispotassay/src/org/labkey/elispot/ElispotProtocolSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.labkey.api.data.ActionButton;
import org.labkey.api.data.ButtonBar;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerFilter;
import org.labkey.api.data.CrosstabMember;
import org.labkey.api.data.DataRegion;
import org.labkey.api.data.TableInfo;
Expand Down Expand Up @@ -67,6 +68,7 @@ public ElispotAssayProvider getProvider()
return (ElispotAssayProvider)super.getProvider();
}

@Override
public Set<String> getTableNames()
{
Set<String> names = super.getTableNames();
Expand All @@ -75,26 +77,27 @@ public Set<String> getTableNames()
return names;
}

public TableInfo createProviderTable(String name)
@Override
public TableInfo createProviderTable(String name, ContainerFilter cf)
{
if (name.equalsIgnoreCase(ANTIGEN_TABLE_NAME))
{
Domain domain = AbstractAssayProvider.getDomainByPrefix(getProtocol(), ElispotAssayProvider.ASSAY_DOMAIN_ANTIGEN_WELLGROUP);
if (null != domain)
return new ElispotRunAntigenTable(this, domain, getProtocol());
return new ElispotRunAntigenTable(this, cf, domain, getProtocol());
}
else if (name.equalsIgnoreCase(ANTIGEN_STATS_TABLE_NAME))
{
return ElispotAntigenCrosstabTable.create((ElispotRunAntigenTable) createProviderTable(ANTIGEN_TABLE_NAME), getProtocol(), this);
return ElispotAntigenCrosstabTable.create((ElispotRunAntigenTable) createProviderTable(ANTIGEN_TABLE_NAME, cf), getProtocol(), this);
}

return super.createProviderTable(name);
return super.createProviderTable(name, cf);
}

@Override
public ElispotRunDataTable createDataTable(boolean includeCopiedToStudyColumns)
public ElispotRunDataTable createDataTable(ContainerFilter cf, boolean includeCopiedToStudyColumns)
{
ElispotRunDataTable table = new ElispotRunDataTable(this, getProtocol());
ElispotRunDataTable table = new ElispotRunDataTable(this, cf, getProtocol());
if (includeCopiedToStudyColumns)
{
addCopiedToStudyColumns(table, true);
Expand All @@ -116,6 +119,7 @@ public ElispotResultsQueryView(ExpProtocol protocol, ViewContext context, QueryS
super(protocol, context, settings);
}

@Override
public DataView createDataView()
{
DataView view = super.createDataView();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerFilter;
import org.labkey.api.data.EnumTableInfo;
import org.labkey.api.data.TableInfo;
import org.labkey.api.security.User;
Expand Down Expand Up @@ -53,7 +54,7 @@ public Set<String> getTableNames()
}

@Override
public TableInfo createTable(String name)
public TableInfo createTable(String name, ContainerFilter cf)
{
if (name.equalsIgnoreCase(ELISPOT_PLATE_READER_TABLE))
{
Expand All @@ -69,6 +70,6 @@ public String getValue(ElispotAssayProvider.PlateReaderType e)

return result;
}
return super.createTable(name);
return super.createTable(name, cf);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.api.data.AggregateColumnInfo;
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.BaseColumnInfo;
import org.labkey.api.data.ContainerFilter;
import org.labkey.api.data.CrosstabDimension;
import org.labkey.api.data.CrosstabMeasure;
Expand Down Expand Up @@ -110,12 +110,13 @@ public ElispotAntigenCrosstabTable(CrosstabSettings crosstabSettings, ArrayList<
{
super(crosstabSettings, members);
_nonBasePropertyNames = nonBasePropertyNames;
getColumn("InstanceCount").setHidden(true);
getColumn("Run").setHidden(true);
getColumn("SpecimenLsid").setHidden(true);
getMutableColumn("InstanceCount").setHidden(true);
getMutableColumn("Run").setHidden(true);
getMutableColumn("SpecimenLsid").setHidden(true);
setTitle("AntigenStats");
}

@NotNull
@Override
public ContainerFilter getContainerFilter()
{
Expand Down Expand Up @@ -153,7 +154,7 @@ public Sort getDefaultSort()
}

@Override
protected ColumnInfo createMemberMeasureCol(@Nullable CrosstabMember member, CrosstabMeasure measure)
protected BaseColumnInfo createMemberMeasureCol(@Nullable CrosstabMember member, CrosstabMeasure measure)
{
AggregateColumnInfo column = (AggregateColumnInfo)super.createMemberMeasureCol(member, measure);
column.setCrosstabColumnDimension(measure.getSourceColumn().getFieldKey());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package org.labkey.elispot.query;

import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.ContainerFilter;
import org.labkey.api.data.JdbcType;
import org.labkey.api.data.SQLFragment;
import org.labkey.api.data.TableInfo;
Expand All @@ -41,9 +42,9 @@
*/
public class ElispotRunAntigenTable extends PlateBasedAssayRunDataTable
{
public ElispotRunAntigenTable(final AssaySchema schema, final Domain domain, ExpProtocol protocol)
public ElispotRunAntigenTable(final AssaySchema schema, ContainerFilter cf, final Domain domain, ExpProtocol protocol)
{
super(schema, StorageProvisioner.createTableInfo(domain), protocol);
super(schema, StorageProvisioner.createTableInfo(domain), cf, protocol);
setDescription("Contains one row per well for the \"" + protocol.getName() + "\" ELISpot assay design.");
setTitle("Antigen");
this.setPublic(false);
Expand All @@ -55,7 +56,7 @@ public ElispotRunAntigenTable(final AssaySchema schema, final Domain domain, Exp
else
sql.append("CONCAT(AntigenName, ' (', REPLACE(AntigenWellgroupName, 'Antigen ', ''), ')') END");

ColumnInfo antigenHeading = new ExprColumn(this, "AntigenHeading", sql, JdbcType.VARCHAR, getColumn("AntigenWellgroupName"), getColumn("AntigenName"));
ExprColumn antigenHeading = new ExprColumn(this, "AntigenHeading", sql, JdbcType.VARCHAR, getColumn("AntigenWellgroupName"), getColumn("AntigenName"));
antigenHeading.setHidden(true);
addColumn(antigenHeading);
}
Expand All @@ -82,19 +83,20 @@ protected ColumnInfo resolveColumn(String name)
{
// Hook up a column that joins back to this table so that the columns formerly under the Properties
// node can still be queried there.
result = wrapColumn("Properties", getRealTable().getColumn("ObjectId"));
result.setIsUnselectable(true);
LookupForeignKey fk = new LookupForeignKey("ObjectId")
var wrapped = wrapColumn("Properties", getRealTable().getColumn("ObjectId"));
wrapped.setIsUnselectable(true);
LookupForeignKey fk = new LookupForeignKey(getContainerFilter(), "ObjectId", null)
{
@Override
public TableInfo getLookupTableInfo()
{
Domain domain = AbstractAssayProvider.getDomainByPrefix(_protocol, ElispotAssayProvider.ASSAY_DOMAIN_ANTIGEN_WELLGROUP);
return new ElispotRunAntigenTable(_userSchema, domain, _protocol);
return new ElispotRunAntigenTable(_userSchema, getLookupContainerFilter(), domain, _protocol);
}
};
fk.setPrefixColumnCaption(false);
result.setFk(fk);
wrapped.setFk(fk);
result = wrapped;
}

return result;
Expand All @@ -109,7 +111,7 @@ protected void addPropertyColumns(final AssaySchema schema, final ExpProtocol pr
{
continue;
}
ColumnInfo wrapColumn = addWrapColumn(column);
var wrapColumn = addWrapColumn(column);
if ("AntigenLsid".equalsIgnoreCase(column.getName()) || "SpecimenLsid".equalsIgnoreCase(column.getName()))
wrapColumn.setHidden(true);
else if ("Mean".equalsIgnoreCase(column.getName()) || "Median".equalsIgnoreCase(column.getName()))
Expand Down
31 changes: 17 additions & 14 deletions elispotassay/src/org/labkey/elispot/query/ElispotRunDataTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import org.jetbrains.annotations.NotNull;
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.ContainerFilter;
import org.labkey.api.data.DataColumn;
import org.labkey.api.data.DisplayColumn;
import org.labkey.api.data.DisplayColumnFactory;
Expand Down Expand Up @@ -49,19 +50,19 @@
*/
public class ElispotRunDataTable extends PlateBasedAssayRunDataTable
{
public ElispotRunDataTable(final AssaySchema schema, final ExpProtocol protocol)
public ElispotRunDataTable(final AssaySchema schema, ContainerFilter cf, final ExpProtocol protocol)
{
this(schema, ElispotManager.getTableInfoElispotRunData(), protocol);
this(schema, ElispotManager.getTableInfoElispotRunData(), cf, protocol);
}

public ElispotRunDataTable(final AssaySchema schema, TableInfo table, final ExpProtocol protocol)
public ElispotRunDataTable(final AssaySchema schema, TableInfo table, ContainerFilter cf, final ExpProtocol protocol)
{
super(schema, table, protocol);
super(schema, table, cf, protocol);

setDescription("Contains one row per sample for the \"" + protocol.getName() + "\" ELISpot assay design.");

// display column for spot counts
ColumnInfo col = getColumn(FieldKey.fromParts(ElispotDataHandler.SFU_PROPERTY_NAME));
var col = getMutableColumn(FieldKey.fromParts(ElispotDataHandler.SFU_PROPERTY_NAME));
if (col != null)
{
col.setDisplayColumnFactory(new DisplayColumnFactory()
Expand All @@ -75,7 +76,7 @@ public DisplayColumn createRenderer(ColumnInfo colInfo)
}

// display column for spot size
ColumnInfo spotSizeCol = getColumn(FieldKey.fromParts(ElispotDataHandler.SPOT_SIZE_PROPERTY_NAME));
var spotSizeCol = getMutableColumn(FieldKey.fromParts(ElispotDataHandler.SPOT_SIZE_PROPERTY_NAME));
if (spotSizeCol != null)
{
spotSizeCol.setDisplayColumnFactory(new DisplayColumnFactory()
Expand All @@ -98,7 +99,7 @@ protected void addPropertyColumns(final AssaySchema schema, final ExpProtocol pr
{
continue; // already added or added below
}
ColumnInfo wrapColumn = addWrapColumn(column);
var wrapColumn = addWrapColumn(column);
if ("ObjectUri".equalsIgnoreCase(column.getName()) || "RowId".equalsIgnoreCase(column.getName()))
wrapColumn.setHidden(true);
}
Expand All @@ -114,13 +115,14 @@ protected void addPropertyColumns(final AssaySchema schema, final ExpProtocol pr
}
}

ColumnInfo antigenLsidColumn = getColumn("AntigenLsid");
var antigenLsidColumn = getMutableColumn("AntigenLsid");
antigenLsidColumn.setLabel("Antigen");
antigenLsidColumn.setFk(new LookupForeignKey(null, "AntigenName")
antigenLsidColumn.setFk(new LookupForeignKey( (String)null, "AntigenName")
{
@Override
public TableInfo getLookupTableInfo()
{
// TODO ContainerFilter
return ElispotManager.getTableInfoElispotAntigen(_protocol);
}
});
Expand All @@ -136,18 +138,19 @@ protected ColumnInfo resolveColumn(String name)
{
// Hook up a column that joins back to this table so that the columns formerly under the Properties
// node can still be queried there.
result = wrapColumn("Properties", getRealTable().getColumn("ObjectId"));
result.setIsUnselectable(true);
LookupForeignKey fk = new LookupForeignKey("ObjectId")
var wrapped = wrapColumn("Properties", getRealTable().getColumn("ObjectId"));
wrapped.setIsUnselectable(true);
LookupForeignKey fk = new LookupForeignKey(getContainerFilter(), "ObjectId", null)
{
@Override
public TableInfo getLookupTableInfo()
{
return new ElispotRunDataTable(_userSchema, _protocol);
return new ElispotRunDataTable(_userSchema, getLookupContainerFilter(), _protocol);
}
};
fk.setPrefixColumnCaption(false);
result.setFk(fk);
wrapped.setFk(fk);
result = wrapped;
}

return result;
Expand Down
Loading