.setParent(rootTree).setChildPath(typeTreePath).call();
checkArgument(typeTreeRef.isPresent(), "Feature type tree not found: %s", typeTreeRefSpec);
final Filter filter = reprojectFilter(origFilter);
DiffTree diffOp = context.command(DiffTree.class);
diffOp.setOldVersion(effectiveOldHead);
diffOp.setNewVersion(effectiveHead);
final List<String> pathFilters = resolvePathFilters(typeTreePath, filter);
diffOp.setPathFilter(pathFilters);
if (screenMap != null) {
LOGGER.trace("Created GeogigFeatureReader with screenMap, assuming it's renderer query");
this.screenMapFilter = new ScreenMapFilter(screenMap);
diffOp.setCustomFilter(screenMapFilter);
} else {
this.screenMapFilter = null;
LOGGER.trace("Created GeogigFeatureReader without screenMapFilter");
}
ReferencedEnvelope queryBounds = getQueryBounds(filter, typeTreeRef.get());
if (!queryBounds.isEmpty()) {
diffOp.setBoundsFilter(queryBounds);
}
diffOp.setChangeTypeFilter(changeType(changeType));
Iterator<DiffEntry> diffs = diffOp.call();
Iterator<NodeRef> featureRefs = toFeatureRefs(diffs, changeType);
final boolean filterSupportedByRefs = Filter.INCLUDE.equals(filter)
|| filter instanceof BBOX || filter instanceof Id;