Skip to content

Commit 8095373

Browse files
authored
BXC-4779 - Fix viewable files filter (#1828)
* Filter was failing for jp2's with extent info since that comes after the owner section * Make ownership portion of filter optional
1 parent 836328f commit 8095373

File tree

4 files changed

+36
-8
lines changed

4 files changed

+36
-8
lines changed

Diff for: search-solr/src/main/java/edu/unc/lib/boxc/search/solr/filters/MultipleDirectlyOwnedDatastreamsFilter.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,22 @@
1616
public class MultipleDirectlyOwnedDatastreamsFilter implements QueryFilter {
1717
private Set<DatastreamType> datastreamTypes;
1818
private SearchFieldKey fieldKey;
19+
private boolean onlyDirectlyOwned;
1920

20-
protected MultipleDirectlyOwnedDatastreamsFilter(SearchFieldKey fieldKey, Set<DatastreamType> datastreamTypes) {
21+
protected MultipleDirectlyOwnedDatastreamsFilter(SearchFieldKey fieldKey, Set<DatastreamType> datastreamTypes,
22+
boolean onlyDirectlyOwned) {
2123
this.datastreamTypes = datastreamTypes;
2224
this.fieldKey = fieldKey;
25+
this.onlyDirectlyOwned = onlyDirectlyOwned;
2326
}
2427

2528
@Override
2629
public String toFilterString() {
2730
var dsField = fieldKey.getSolrField();
31+
final var ownershipSuffix = onlyDirectlyOwned ? "||" : "";
2832
return getDatastreamTypes().stream()
2933
// Filtering datastreams to exclude those owned by other objects
30-
.map(ds -> dsField + ":" + ds.getId() + "|*||")
34+
.map(ds -> dsField + ":" + ds.getId() + "|*" + ownershipSuffix)
3135
.collect(Collectors.joining(" OR ", "(", ")"));
3236
}
3337

Diff for: search-solr/src/main/java/edu/unc/lib/boxc/search/solr/filters/QueryFilterFactory.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,18 @@ public static QueryFilter createFilter(SearchFieldKey fieldKey, DatastreamType d
3131
* @return new QueryFilter instance with the provided datastream types
3232
*/
3333
public static QueryFilter createFilter(SearchFieldKey fieldKey, Set<DatastreamType> datastreamTypes) {
34-
return new MultipleDirectlyOwnedDatastreamsFilter(fieldKey, datastreamTypes);
34+
return new MultipleDirectlyOwnedDatastreamsFilter(fieldKey, datastreamTypes, false);
35+
}
36+
37+
/**
38+
* Create a filter which restricts results to entries which contain at least one of the listed datastreams,
39+
* where the datastreams are owned by the object itself rather than one of its children
40+
* @param fieldKey key of field to filter
41+
* @param datastreamTypes datastreams to filter for
42+
* @return new QueryFilter instance with the provided datastream types
43+
*/
44+
public static QueryFilter createDirectlyOwnedFilter(SearchFieldKey fieldKey, Set<DatastreamType> datastreamTypes) {
45+
return new MultipleDirectlyOwnedDatastreamsFilter(fieldKey, datastreamTypes, true);
3546
}
3647

3748
/**

Diff for: search-solr/src/test/java/edu/unc/lib/boxc/search/solr/filters/QueryFilterFactoryTest.java

+16-4
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,47 @@
88
import java.util.HashSet;
99
import java.util.List;
1010

11+
import static org.junit.jupiter.api.Assertions.assertEquals;
1112
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
1213

1314
/**
1415
* @author lfarrell
1516
*/
1617
public class QueryFilterFactoryTest {
1718
@Test
18-
public void NamedDatastreamFilterTest() {
19+
public void namedDatastreamFilterTest() {
1920
var filter = QueryFilterFactory.createFilter(SearchFieldKey.DATASTREAM, DatastreamType.JP2_ACCESS_COPY);
2021
assertInstanceOf(NamedDatastreamFilter.class, filter);
2122
}
2223

2324
@Test
24-
public void MultipleDirectlyOwnedDatastreamsFilterTest() {
25+
public void multipleDirectlyOwnedDatastreamsFilterTest() {
26+
var datastreamTypes = new HashSet<DatastreamType>();
27+
datastreamTypes.add(DatastreamType.JP2_ACCESS_COPY);
28+
datastreamTypes.add(DatastreamType.FULLTEXT_EXTRACTION);
29+
var filter = QueryFilterFactory.createDirectlyOwnedFilter(SearchFieldKey.DATASTREAM, datastreamTypes);
30+
assertInstanceOf(MultipleDirectlyOwnedDatastreamsFilter.class, filter);
31+
assertEquals("(datastream:jp2|*|| OR datastream:fulltext|*||)", filter.toFilterString());
32+
}
33+
34+
@Test
35+
public void datastreamsFilterTest() {
2536
var datastreamTypes = new HashSet<DatastreamType>();
2637
datastreamTypes.add(DatastreamType.JP2_ACCESS_COPY);
2738
datastreamTypes.add(DatastreamType.FULLTEXT_EXTRACTION);
2839
var filter = QueryFilterFactory.createFilter(SearchFieldKey.DATASTREAM, datastreamTypes);
2940
assertInstanceOf(MultipleDirectlyOwnedDatastreamsFilter.class, filter);
41+
assertEquals("(datastream:jp2|* OR datastream:fulltext|*)", filter.toFilterString());
3042
}
3143

3244
@Test
33-
public void HasPopulatedFieldFilterTest() {
45+
public void hasPopulatedFieldFilterTest() {
3446
var filter = QueryFilterFactory.createFilter(SearchFieldKey.STREAMING_TYPE);
3547
assertInstanceOf(HasPopulatedFieldFilter.class, filter);
3648
}
3749

3850
@Test
39-
public void HasValuesFilterTest() {
51+
public void hasValuesFilterTest() {
4052
var filter = QueryFilterFactory.createHasValuesFilter(SearchFieldKey.FILE_FORMAT_TYPE, List.of("application/pdf"));
4153
assertInstanceOf(HasValuesFilter.class, filter);
4254
}

Diff for: services-camel-app/src/main/java/edu/unc/lib/boxc/services/camel/exportxml/ExportXMLProcessor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,8 @@ private void adjustRequestPids(ExportXMLRequest request) throws ServiceException
200200
searchRequest.setApplyCutoffs(false);
201201
if (request.getOnlyIncludeValidDatastreams()) {
202202
searchState.addFilter(
203-
QueryFilterFactory.createFilter(SearchFieldKey.DATASTREAM, request.getDatastreams()));
203+
QueryFilterFactory.createDirectlyOwnedFilter(
204+
SearchFieldKey.DATASTREAM, request.getDatastreams()));
204205
}
205206

206207
SearchResultResponse resultResponse = searchService.getSearchResults(searchRequest);

0 commit comments

Comments
 (0)