in rest-api/src/jetbrains/buildServer/server/rest/data/problem/ProblemOccurrenceFinder.java [228:302]
public ItemFilter<BuildProblem> getFilter(@NotNull final Locator locator) {
final MultiCheckerFilter<BuildProblem> result = new MultiCheckerFilter<>();
if (locator.isUnused(PROBLEM)) {
String problemDimension = locator.getSingleDimensionValue(PROBLEM);
if (problemDimension != null) {
final PagedSearchResult<ProblemWrapper> problems = myProblemFinder.getItems(problemDimension);
final HashSet<Integer> problemIds = problems.getEntries().stream().map(problem -> problem.getId().intValue()).collect(Collectors.toCollection(HashSet::new));
result.add(item -> problemIds.contains(item.getId()));
}
}
final String identityDimension = locator.getSingleDimensionValue(IDENTITY);
if (identityDimension != null) {
result.add(item -> identityDimension.equals(item.getBuildProblemData().getIdentity()));
}
final String typeDimension = locator.getSingleDimensionValue(TYPE);
if (typeDimension != null) {
final Boolean snapshotepProblems = getSnapshotDepProblemValue(typeDimension);
if (snapshotepProblems != null) {
result.add(item -> FilterUtil.isIncludedByBooleanFilter(snapshotepProblems, ErrorData.isSnapshotDependencyError(item.getBuildProblemData().getType())));
} else {
ValueCondition valueCondition = ParameterCondition.createValueCondition(typeDimension);
result.add(item -> valueCondition.matches(item.getBuildProblemData().getType()));
}
}
if (locator.isUnused(BUILD)) {
String buildDimension = locator.getSingleDimensionValue(BUILD);
if (buildDimension != null) {
List<BuildPromotion> builds = myBuildPromotionFinder.getBuildPromotionsWithLegacyFallback(null, buildDimension).getEntries();
result.add(item -> builds.contains(item.getBuildPromotion()));
}
}
final String affectedProjectDimension = locator.getSingleDimensionValue(AFFECTED_PROJECT);
if (affectedProjectDimension != null) {
@NotNull final SProject project = myProjectFinder.getItem(affectedProjectDimension);
result.add(item -> ProjectFinder.isSameOrParent(project, myProjectFinder.getItem(item.getProjectId())));
}
final Boolean currentlyInvestigatedDimension = locator.getSingleDimensionValueAsBoolean(CURRENTLY_INVESTIGATED);
if (currentlyInvestigatedDimension != null) {
result.add(item -> {
//todo: check investigation in affected Project/buildType only, if set
return FilterUtil.isIncludedByBooleanFilter(currentlyInvestigatedDimension,
!item.getAllResponsibilities().isEmpty()); //todo: TeamCity API (VM): what is the difference with getResponsibility() ???
});
}
if (locator.isUnused(CURRENTLY_MUTED)) {
final Boolean currentlyMutedDimension = locator.getSingleDimensionValueAsBoolean(CURRENTLY_MUTED);
if (currentlyMutedDimension != null) {
//todo: check in affected Project/buildType only, if set
result.add(item -> FilterUtil.isIncludedByBooleanFilter(currentlyMutedDimension, item.getCurrentMuteInfo() != null));
}
}
final Boolean muteDimension = locator.getSingleDimensionValueAsBoolean(MUTED);
if (muteDimension != null) {
result.add(item -> FilterUtil.isIncludedByBooleanFilter(muteDimension, item.getMuteInBuildInfo() != null));
}
if (locator.isUnused(CURRENT)) {
final Boolean currentDimension = locator.getSingleDimensionValueAsBoolean(CURRENT);
if (currentDimension != null) {
@NotNull final Set<BuildProblemId> currentBuildProblemsList = getCurrentProblemOccurences(null).stream().map(BuildProblemId::create).collect(Collectors.toSet());
result.add(item -> FilterUtil.isIncludedByBooleanFilter(currentDimension, currentBuildProblemsList.contains(BuildProblemId.create(item))));
}
}
return result.toItemFilter();
}