public ItemFilter getFilter()

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();
  }