forked from bimberlabinternal/LabDevKitModules
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAbstractTableCustomizer.java
More file actions
96 lines (82 loc) · 3.56 KB
/
AbstractTableCustomizer.java
File metadata and controls
96 lines (82 loc) · 3.56 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
/*
* Copyright (c) 2014-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.api.ldk.table;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.labkey.api.data.AbstractTableInfo;
import org.labkey.api.data.Container;
import org.labkey.api.data.SQLFragment;
import org.labkey.api.data.TableCustomizer;
import org.labkey.api.data.TableInfo;
import org.labkey.api.query.DefaultSchema;
import org.labkey.api.query.UserSchema;
import org.labkey.api.study.DatasetTable;
import java.util.HashMap;
import java.util.Map;
/**
* User: bimber
* Date: 1/8/14
* Time: 11:06 AM
*/
abstract public class AbstractTableCustomizer implements TableCustomizer
{
protected static final Logger _log = LogManager.getLogger(AbstractTableCustomizer.class);
/**
* Rely on DefaultSchema's caching of schema creation, and just track the minimum number of DefaultSchemas to
* resolve the requested collection of target containers
*/
private final Map<Container, DefaultSchema> _defaultSchemas = new HashMap<>();
public UserSchema getUserSchema(AbstractTableInfo ti, String name)
{
Container targetContainer = ti.getUserSchema().getContainer();
return getUserSchema(ti, name, targetContainer);
}
public UserSchema getUserSchema(AbstractTableInfo ti, String name, Container targetContainer)
{
assert targetContainer != null : "No container provided";
// Stash the DefaultSchema for the current table if we don't already have it
_defaultSchemas.computeIfAbsent(ti.getUserSchema().getContainer(), (key) -> ti.getUserSchema().getDefaultSchema());
DefaultSchema targetedDefaultSchema = _defaultSchemas.computeIfAbsent(targetContainer, (key) -> DefaultSchema.get(ti.getUserSchema().getUser(), targetContainer));
return targetedDefaultSchema.getUserSchema(name);
}
public TableInfo getTableInfo(AbstractTableInfo ti, String schemaName, String queryName)
{
return getTableInfo(ti, schemaName, queryName, ti.getUserSchema().getContainer());
}
public TableInfo getTableInfo(AbstractTableInfo ti, String schemaName, String queryName, Container targetContainer)
{
assert targetContainer != null : "No container provided";
UserSchema us = getUserSchema(ti, schemaName, targetContainer);
if (us == null)
return null;
return us.getTable(queryName);
}
protected SQLFragment getNewlineSql(TableInfo ti)
{
return new SQLFragment(getChr(ti) + "(10)");
}
protected String getChr(TableInfo ti)
{
return ti.getSqlDialect().isPostgreSQL() ? "chr" : "char";
}
protected boolean matches(TableInfo ti, String schema, String query)
{
if (ti instanceof DatasetTable)
return ti.getSchema().getName().equalsIgnoreCase(schema) && (ti.getName().equalsIgnoreCase(query) || ti.getTitle().equalsIgnoreCase(query));
else
return ti.getSchema().getName().equalsIgnoreCase(schema) && ti.getName().equalsIgnoreCase(query);
}
}