Skip to content

Commit

Permalink
'#2251 and '#2163 apply duplicate filter as last filterer.
Browse files Browse the repository at this point in the history
  • Loading branch information
patrick committed Jun 27, 2024
1 parent 9af46bb commit 5b72dc6
Showing 1 changed file with 38 additions and 22 deletions.
60 changes: 38 additions & 22 deletions iped-app/src/main/java/iped/app/ui/CaseSearcherFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import iped.app.ui.App.DuplicatesFilterer;
import iped.engine.data.IPEDMultiSource;
import iped.engine.data.IPEDSource;
import iped.engine.data.ItemId;
Expand Down Expand Up @@ -182,6 +183,8 @@ public MultiSearchResult doInBackground() {
allItemsCache = new SoftReference(result.clone());
}

IResultSetFilterer dupFilterer = null;

result.setIPEDSource(ipedCase);

if (applyUIFilters && filterManager != null) {
Expand All @@ -193,27 +196,11 @@ public MultiSearchResult doInBackground() {
}

IResultSetFilterer iRSFilterer = (IResultSetFilterer) iterator.next();
if (filterManager.isFiltererEnabled(iRSFilterer)) {
IFilter rsFilter = iRSFilterer.getFilter();

if (rsFilter != null) {
if (rsFilter instanceof IBitmapFilter) {// if the filter exposes a internal bitmap
addBitmapFilter((IBitmapFilter) rsFilter);
} else {
RoaringBitmap[] cachedBitmaps = filterManager.getCachedBitmaps((IResultSetFilter) rsFilter);
if (cachedBitmaps != null) { // if filtermanager returned a cached bitmap
addBitmapFilter(cachedBitmaps);
} else {
MultiSearchResult newresult = filterManager.applyFilter((IResultSetFilter) rsFilter, result);
if (newresult != result) {
numFilters++;
result = newresult;
result.setIPEDSource(ipedCase);
}
}
}
}
if(iRSFilterer instanceof DuplicatesFilterer) {
dupFilterer=iRSFilterer;
continue;//Duplicate filterer must be applied as last filterer
}
applyFilterer(iRSFilterer, result);
}
}

Expand All @@ -236,6 +223,11 @@ public MultiSearchResult doInBackground() {
result.setIPEDSource(ipedCase);
}
}

if(dupFilterer!=null) {
applyFilterer(dupFilterer, result);
}


} catch (Throwable e) {
if (!(e instanceof CancellationException)) {
Expand All @@ -256,7 +248,31 @@ public MultiSearchResult doInBackground() {

}

@Override
private void applyFilterer(IResultSetFilterer iRSFilterer, MultiSearchResult result2) {
if (filterManager.isFiltererEnabled(iRSFilterer)) {
IFilter rsFilter = iRSFilterer.getFilter();

if (rsFilter != null) {
if (rsFilter instanceof IBitmapFilter) {// if the filter exposes a internal bitmap
addBitmapFilter((IBitmapFilter) rsFilter);
} else {
RoaringBitmap[] cachedBitmaps = filterManager.getCachedBitmaps((IResultSetFilter) rsFilter);
if (cachedBitmaps != null) { // if filtermanager returned a cached bitmap
addBitmapFilter(cachedBitmaps);
} else {
MultiSearchResult newresult = filterManager.applyFilter((IResultSetFilter) rsFilter, result);
if (newresult != result) {
numFilters++;
result = newresult;
result.setIPEDSource(ipedCase);
}
}
}
}
}
}

@Override
public void done() {
for (CaseSearchFilterListener caseSearchFilterListener : listeners) {
if (isCancelled()) {
Expand Down Expand Up @@ -360,6 +376,6 @@ public void addBitmapFilter(RoaringBitmap[] lunionsArray) {
} else {
unionsArray[i].and(lunionsArray[i]);
}
}
}
}
}

0 comments on commit 5b72dc6

Please sign in to comment.