Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 4 additions & 1 deletion api/src/org/labkey/api/query/QueryService.java
Original file line number Diff line number Diff line change
Expand Up @@ -154,11 +154,14 @@ UserSchema createLinkedSchema(User user, Container container, String name, Strin
*/
List<CustomView> getSharedCustomViews(@NotNull User user, Container container, @Nullable String schemaName, @Nullable String queryName, boolean includeInherited);

@Deprecated // Use the three parameter version of the function to get views in product containers
List<CustomView> getDatabaseCustomViews(@NotNull User user, Container container, @Nullable User owner, @Nullable String schemaName, @Nullable String queryName, boolean includeInherited, boolean sharedOnly);

/**
* Returns custom views stored in the database (not module custom views) that meet the criteria. This is not appropriate
* for UI operations (see getCustomViews() for that), but it's important for query change listeners. See #21641 and #21862.
*/
List<CustomView> getDatabaseCustomViews(@NotNull User user, Container container, @Nullable User owner, @Nullable String schemaName, @Nullable String queryName, boolean includeInherited, boolean sharedOnly);
List<CustomView> getDatabaseCustomViews(@NotNull Container container, @Nullable String schemaName, @Nullable String queryName);

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

Expand Down
18 changes: 9 additions & 9 deletions query/src/org/labkey/query/CustomViewQueryChangeListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,20 +63,20 @@ public void queryChanged(User user, Container container, ContainerFilter scope,
{
if (property.equals(QueryProperty.Name))
{
_updateCustomViewQueryNameChange(user, container, schema, changes);
_updateCustomViewQueryNameChange(container, schema, changes);
}
if (property.equals(QueryProperty.SchemaName))
{
_updateCustomViewSchemaNameChange(user, container, changes);
_updateCustomViewSchemaNameChange(container, changes);
}
if (property.equals(QueryProperty.ColumnType))
{
_updateCustomViewColumnTypeChange(user, container, schema, changes);
_updateCustomViewColumnTypeChange(container, schema, changes);
}
}


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

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

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

for (CustomView customView : databaseCustomViews)
{
Expand Down Expand Up @@ -221,7 +221,7 @@ private String dependentViewMessage(Container container, CustomView view)
return sb.toString();
}

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

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

for (CustomView customView : databaseCustomViews)
{
Expand Down Expand Up @@ -262,7 +262,7 @@ private void _updateCustomViewQueryNameChange(User user, Container container, Sc
}
}

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

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

for (CustomView customView : databaseCustomViews)
{
Expand Down
68 changes: 68 additions & 0 deletions query/src/org/labkey/query/QueryServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -1296,6 +1296,7 @@ private List<CustomView> _getCustomViews(final @NotNull User user, final Contain
return new ArrayList<>(views);
}

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

@Override
public List<CustomView> getDatabaseCustomViews(@NotNull Container container, @Nullable String schemaName, @Nullable String queryName)
{
User searchUser = User.getSearchUser();
// GitHub Issue 1058: Sample Finder saved views in subfolder break after MVTC to TC conversion
Collection<GUID> containerIds = container.getProductFoldersDataContainerFilter(searchUser).getIds();

SimpleFilter filter = new SimpleFilter();
if (containerIds != null)
filter.addInClause(FieldKey.fromParts("Container"), containerIds);
else
filter = SimpleFilter.createContainerFilter(container, "Container");

if (schemaName != null)
filter.addCondition(FieldKey.fromParts("Schema"), schemaName);
if (queryName != null)
filter.addCondition(FieldKey.fromParts("QueryName"), queryName);

List<CstmView> cstmViews = new TableSelector(QueryManager.get().getTableInfoCustomView(), filter, null).getArrayList(CstmView.class);

List<CustomView> result = new ArrayList<>();

Map<Container, List<CstmView>> containerViews = new HashMap<>();
for (CstmView cstmView : cstmViews)
{
Container viewContainer = cstmView.lookupContainer();
if (viewContainer != null)
containerViews.computeIfAbsent(viewContainer, k -> new ArrayList<>()).add(cstmView);
}

for (Map.Entry<Container, List<CstmView>> containerCstmViews: containerViews.entrySet())
{
Map<String, UserSchema> schemas = new HashMap<>();
Map<Pair<String, String>, QueryDefinition> queryDefs = new HashMap<>();
Container viewContainer = containerCstmViews.getKey();
List<CstmView> views = containerCstmViews.getValue();

for (CstmView cstmView : views)
{
Pair<String, String> key = new Pair<>(cstmView.getSchema(), cstmView.getQueryName());
QueryDefinition queryDef = queryDefs.get(key);
if (queryDef == null)
{
UserSchema schema = schemas.get(cstmView.getSchema());
if (schema == null)
{
schema = getUserSchema(searchUser, viewContainer, cstmView.getSchema());
schemas.put(cstmView.getSchema(), schema);
}
if (schema != null)
{
queryDef = schema.getQueryDefForTable(cstmView.getQueryName());
queryDefs.put(key, queryDef);
}
}

if (queryDef != null)
{
result.add(new CustomViewImpl(queryDef, cstmView));
}
}
}

return result;
}


@Override
public List<CustomView> getFileBasedCustomViews(Container container, QueryDefinition qd, Path path, String query, Module... extraModules)
{
Expand Down
Loading