BrowseFilter not filtering on object name

I’m trying to find all UDT instances and folders that have a given name. This is the filter I’m trying to use.

private BrowseFilter createNameFilter(String name) {
    var filter = new BrowseFilter()
        .setRecursive(true)
        .setAvoidCache(true)
        .setAllowedTypes(new String[]{"UdtInstance", "folder"});
    filter.addProperty(WellKnownTagProps.Name, name);
    return filter;
}

...

var filter = createNameFilter(name);
var browseResult = tagProvider.browseAsync(TagPathParser.parse(""), filter).join();

This seems to be ignoring the name filter and returning all UDT and folder instances regardless.
Any ideas?

BasicDescriptiveProperty<String> nameProp = new BasicDescriptiveProperty<>("name", String.class);
    private BrowseFilter createNameFilter(String name) {
        var filter = new BrowseFilter()
                .setRecursive(true)
                .setAvoidCache(true)
                .setAllowedTypes(new String[]{"UdtInstance", "folder"});
        filter.addProperty(nameProp, name);
        return filter;
    }

Tried this and it still doesn't work. It's returning me everything.

After doing some testing, it seems BrowseFilter as a whole is not working for me.

tagProvider.browseAsync(TagPathParser.parse(""), new BrowseFilter().setAllowedTypes(new String[]{"AtomicTag"})).join()

returns everything under the root source regardless of objectType.

allowedTypes refers to a UDTs subtype, not the actual tag type, so that’s why you’re not getting the expected results. I highly recommend using our new Query API, it’s better in a lot of ways. The Query API is much more efficient and supports actual continuations. Here’s what the query looks like.

var query = TagQuery.newBuilder()
    .tagObjectType(TagObjectType.UdtInstance)
    .tagObjectType(TagObjectType.Folder)
    .andProperty(WellKnownTagProps.Name, ComparisonOperator.Equal, "name")
    .build();
var filter = TagQueryFilter.newQuery(query);
var results = provider.queryAsync(filter, SecurityContext.systemContext()).join();
3 Likes

Am I to understand that

.path("[Default]Folder1")

starts the search at this path?
Forgive me, this api is new to me and there's no forum documentation on it.

TagQuery is the same mechanism that backs system.tag.query and the tag report tool:

You could use that to get an idea of the capability.

1 Like

That's exactly what I needed. Thank you, sir.