-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathElispotRunAntigenTable.java
More file actions
127 lines (116 loc) · 5.19 KB
/
ElispotRunAntigenTable.java
File metadata and controls
127 lines (116 loc) · 5.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
* Copyright (c) 2011-2019 LabKey Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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;
import org.labkey.api.exp.api.ExpProtocol;
import org.labkey.api.exp.api.StorageProvisioner;
import org.labkey.api.exp.property.Domain;
import org.labkey.api.query.ExprColumn;
import org.labkey.api.query.FieldKey;
import org.labkey.api.query.LookupForeignKey;
import org.labkey.api.assay.AbstractAssayProvider;
import org.labkey.api.assay.AssayProvider;
import org.labkey.api.assay.AssaySchema;
import org.labkey.elispot.ElispotAssayProvider;
import org.labkey.elispot.ElispotDataHandler;
import java.util.ArrayList;
import java.util.List;
/**
* User: klum
* Date: Jan 27, 2011
* Time: 1:45:11 PM
*/
public class ElispotRunAntigenTable extends PlateBasedAssayRunDataTable
{
public ElispotRunAntigenTable(final AssaySchema schema, ContainerFilter cf, final Domain domain, ExpProtocol protocol)
{
super(schema, StorageProvisioner.createTableInfo(domain), cf, protocol);
setDescription("Contains one row per well for the \"" + protocol.getName() + "\" ELISpot assay design.");
setName("Antigen");
this.setPublic(false);
// Add column for AntigenStats heading
SQLFragment sql = new SQLFragment("CASE WHEN AntigenName IS NULL OR AntigenName = AntigenWellgroupName THEN AntigenWellgroupName ELSE ");
if (getSqlDialect().isPostgreSQL())
sql.append("AntigenName || ' (' || SUBSTRING(AntigenWellgroupName, 9) || ')' END");
else
sql.append("CONCAT(AntigenName, ' (', REPLACE(AntigenWellgroupName, 'Antigen ', ''), ')') END");
ExprColumn antigenHeading = new ExprColumn(this, "AntigenHeading", sql, JdbcType.VARCHAR, getColumn("AntigenWellgroupName"), getColumn("AntigenName"));
antigenHeading.setHidden(true);
addColumn(antigenHeading);
}
@Override
public List<FieldKey> getDefaultVisibleColumns()
{
List<FieldKey> fieldKeys = new ArrayList<>();
fieldKeys.add(FieldKey.fromString(ElispotDataHandler.WELLGROUP_PROPERTY_NAME));
fieldKeys.add(FieldKey.fromString(ElispotDataHandler.ANTIGEN_WELLGROUP_PROPERTY_NAME));
fieldKeys.add(FieldKey.fromString("Mean"));
fieldKeys.add(FieldKey.fromString("Median"));
fieldKeys.add(FieldKey.fromParts("RunId"));
fieldKeys.add(FieldKey.fromParts("SpecimenLsid", "Property", "ParticipantId"));
return fieldKeys;
}
@Override
protected ColumnInfo resolveColumn(String name)
{
ColumnInfo result = super.resolveColumn(name);
if ("Properties".equalsIgnoreCase(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.
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, false);
return new ElispotRunAntigenTable(_userSchema, getLookupContainerFilter(), domain, _protocol);
}
};
fk.setPrefixColumnCaption(false);
wrapped.setFk(fk);
result = wrapped;
}
return result;
}
@Override
protected void addPropertyColumns(final AssaySchema schema, final ExpProtocol protocol, final AssayProvider provider, List<FieldKey> visibleColumns)
{
for (ColumnInfo column : _rootTable.getColumns())
{
if ("RunId".equalsIgnoreCase(column.getName()))
{
continue;
}
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()))
wrapColumn.setFormat("###0.0");
}
}
@Override
protected boolean hasMaterialSpecimenPropertyColumnDecorator()
{
return false;
}
}