Skip to content

Commit 0638863

Browse files
committed
GitHub Issue 1058: Sample Finder saved views in subfolder break after MVTC to TC conversion
1 parent e2bca85 commit 0638863

3 files changed

Lines changed: 81 additions & 10 deletions

File tree

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,14 @@ UserSchema createLinkedSchema(User user, Container container, String name, Strin
154154
*/
155155
List<CustomView> getSharedCustomViews(@NotNull User user, Container container, @Nullable String schemaName, @Nullable String queryName, boolean includeInherited);
156156

157+
@Deprecated // Use the three parameter version of the function to get views in product containers
158+
List<CustomView> getDatabaseCustomViews(@NotNull User user, Container container, @Nullable User owner, @Nullable String schemaName, @Nullable String queryName, boolean includeInherited, boolean sharedOnly);
159+
157160
/**
158161
* Returns custom views stored in the database (not module custom views) that meet the criteria. This is not appropriate
159162
* for UI operations (see getCustomViews() for that), but it's important for query change listeners. See #21641 and #21862.
160163
*/
161-
List<CustomView> getDatabaseCustomViews(@NotNull User user, Container container, @Nullable User owner, @Nullable String schemaName, @Nullable String queryName, boolean includeInherited, boolean sharedOnly);
164+
List<CustomView> getDatabaseCustomViews(@NotNull Container container, @Nullable String schemaName, @Nullable String queryName);
162165

163166
int importCustomViews(User user, Container container, VirtualFile viewDir) throws IOException;
164167

‎query/src/org/labkey/query/CustomViewQueryChangeListener.java‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,20 @@ public void queryChanged(User user, Container container, ContainerFilter scope,
6363
{
6464
if (property.equals(QueryProperty.Name))
6565
{
66-
_updateCustomViewQueryNameChange(user, container, schema, changes);
66+
_updateCustomViewQueryNameChange(container, schema, changes);
6767
}
6868
if (property.equals(QueryProperty.SchemaName))
6969
{
70-
_updateCustomViewSchemaNameChange(user, container, changes);
70+
_updateCustomViewSchemaNameChange(container, changes);
7171
}
7272
if (property.equals(QueryProperty.ColumnType))
7373
{
74-
_updateCustomViewColumnTypeChange(user, container, schema, changes);
74+
_updateCustomViewColumnTypeChange(container, schema, changes);
7575
}
7676
}
7777

7878

79-
private void _updateCustomViewColumnTypeChange(User user, Container container, SchemaKey schema, @NotNull Collection<QueryPropertyChange<?>> changes)
79+
private void _updateCustomViewColumnTypeChange(Container container, SchemaKey schema, @NotNull Collection<QueryPropertyChange<?>> changes)
8080
{
8181
for (QueryPropertyChange<?> qpc : changes)
8282
{
@@ -93,7 +93,7 @@ private void _updateCustomViewColumnTypeChange(User user, Container container, S
9393

9494
String columnName = newDp.getName() == null ? oldDp.getName() : newDp.getName();
9595

96-
List<CustomView> databaseCustomViews = QueryService.get().getDatabaseCustomViews(user, container, null, schema.toString(), queryName, false, false);
96+
List<CustomView> databaseCustomViews = QueryService.get().getDatabaseCustomViews(container, schema.toString(), queryName);
9797

9898
for (CustomView customView : databaseCustomViews)
9999
{
@@ -221,7 +221,7 @@ private String dependentViewMessage(Container container, CustomView view)
221221
return sb.toString();
222222
}
223223

224-
private void _updateCustomViewQueryNameChange(User user, Container container, SchemaKey schemaKey, Collection<QueryPropertyChange<?>> changes)
224+
private void _updateCustomViewQueryNameChange(Container container, SchemaKey schemaKey, Collection<QueryPropertyChange<?>> changes)
225225
{
226226
// most property updates only care about the query name old value string and new value string
227227
Map<String, String> queryNameChangeMap = new CaseInsensitiveHashMap<>();
@@ -230,7 +230,7 @@ private void _updateCustomViewQueryNameChange(User user, Container container, Sc
230230
queryNameChangeMap.put((String)qpc.getOldValue(), (String)qpc.getNewValue());
231231
}
232232

233-
List<CustomView> databaseCustomViews = QueryService.get().getDatabaseCustomViews(user, container, null, schemaKey.toString(), null, false, false);
233+
List<CustomView> databaseCustomViews = QueryService.get().getDatabaseCustomViews(container, schemaKey.toString(), null);
234234

235235
for (CustomView customView : databaseCustomViews)
236236
{
@@ -262,7 +262,7 @@ private void _updateCustomViewQueryNameChange(User user, Container container, Sc
262262
}
263263
}
264264

265-
private void _updateCustomViewSchemaNameChange(User user, Container container, Collection<QueryPropertyChange<?>> changes)
265+
private void _updateCustomViewSchemaNameChange(Container container, Collection<QueryPropertyChange<?>> changes)
266266
{
267267
Map<String, String> schemaNameChangeMap = new CaseInsensitiveHashMap<>();
268268
for (QueryPropertyChange<?> qpc : changes)
@@ -279,7 +279,7 @@ private void _updateCustomViewSchemaNameChange(User user, Container container, C
279279
{
280280
String newSchema = schemaNameChangeMap.get(oldSchema);
281281

282-
List<CustomView> databaseCustomViews = QueryService.get().getDatabaseCustomViews(user, container, null, oldSchema, null, false, false);
282+
List<CustomView> databaseCustomViews = QueryService.get().getDatabaseCustomViews(container, oldSchema, null);
283283

284284
for (CustomView customView : databaseCustomViews)
285285
{

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

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,6 +1296,7 @@ private List<CustomView> _getCustomViews(final @NotNull User user, final Contain
12961296
return new ArrayList<>(views);
12971297
}
12981298

1299+
@Deprecated
12991300
@Override
13001301
public List<CustomView> getDatabaseCustomViews(@NotNull User user, Container container, @Nullable User owner, @Nullable String schemaName, @Nullable String queryName, boolean includeInherited, boolean sharedOnly)
13011302
{
@@ -1336,6 +1337,73 @@ public List<CustomView> getDatabaseCustomViews(@NotNull User user, Container con
13361337
return allViews.stream().filter(view -> !(view instanceof ModuleCustomView)).collect(Collectors.toList());
13371338
}
13381339

1340+
@Override
1341+
public List<CustomView> getDatabaseCustomViews(@NotNull Container container, @Nullable String schemaName, @Nullable String queryName)
1342+
{
1343+
User searchUser = User.getSearchUser();
1344+
// GitHub Issue 1058: Sample Finder saved views in subfolder break after MVTC to TC conversion
1345+
Collection<GUID> containerIds = container.getProductFoldersDataContainerFilter(searchUser).getIds();
1346+
1347+
SimpleFilter filter = new SimpleFilter();
1348+
if (containerIds != null)
1349+
filter.addInClause(FieldKey.fromParts("Container"), containerIds);
1350+
else
1351+
filter = SimpleFilter.createContainerFilter(container, "Container");
1352+
1353+
if (schemaName != null)
1354+
filter.addCondition(FieldKey.fromParts("Schema"), schemaName);
1355+
if (queryName != null)
1356+
filter.addCondition(FieldKey.fromParts("QueryName"), queryName);
1357+
1358+
List<CstmView> cstmViews = new TableSelector(QueryManager.get().getTableInfoCustomView(), filter, null).getArrayList(CstmView.class);
1359+
1360+
List<CustomView> result = new ArrayList<>();
1361+
1362+
Map<Container, List<CstmView>> containerViews = new HashMap<>();
1363+
for (CstmView cstmView : cstmViews)
1364+
{
1365+
Container viewContainer = cstmView.lookupContainer();
1366+
if (viewContainer != null)
1367+
containerViews.computeIfAbsent(viewContainer, k -> new ArrayList<>()).add(cstmView);
1368+
}
1369+
1370+
for (Map.Entry<Container, List<CstmView>> containerCstmViews: containerViews.entrySet())
1371+
{
1372+
Map<String, UserSchema> schemas = new HashMap<>();
1373+
Map<Pair<String, String>, QueryDefinition> queryDefs = new HashMap<>();
1374+
Container viewContainer = containerCstmViews.getKey();
1375+
List<CstmView> views = containerCstmViews.getValue();
1376+
1377+
for (CstmView cstmView : views)
1378+
{
1379+
Pair<String, String> key = new Pair<>(cstmView.getSchema(), cstmView.getQueryName());
1380+
QueryDefinition queryDef = queryDefs.get(key);
1381+
if (queryDef == null)
1382+
{
1383+
UserSchema schema = schemas.get(cstmView.getSchema());
1384+
if (schema == null)
1385+
{
1386+
schema = getUserSchema(searchUser, viewContainer, cstmView.getSchema());
1387+
schemas.put(cstmView.getSchema(), schema);
1388+
}
1389+
if (schema != null)
1390+
{
1391+
queryDef = schema.getQueryDefForTable(cstmView.getQueryName());
1392+
queryDefs.put(key, queryDef);
1393+
}
1394+
}
1395+
1396+
if (queryDef != null)
1397+
{
1398+
result.add(new CustomViewImpl(queryDef, cstmView));
1399+
}
1400+
}
1401+
}
1402+
1403+
return result;
1404+
}
1405+
1406+
13391407
@Override
13401408
public List<CustomView> getFileBasedCustomViews(Container container, QueryDefinition qd, Path path, String query, Module... extraModules)
13411409
{

0 commit comments

Comments
 (0)