public ItemFilter getFilter()

in rest-api/src/jetbrains/buildServer/server/rest/data/investigations/InvestigationFinder.java [168:235]


  public ItemFilter<InvestigationWrapper> getFilter(@NotNull final Locator locator) {
    final MultiCheckerFilter<InvestigationWrapper> result = new MultiCheckerFilter<InvestigationWrapper>();

    final String investigatorDimension = locator.getSingleDimensionValue(ASSIGNEE);
    if (investigatorDimension != null) {
      @NotNull final User user = myUserFinder.getItem(investigatorDimension);
      result.add(item -> user.equals(item.getResponsibleUser()));
    }

    final String reporterDimension = locator.getSingleDimensionValue(REPORTER);
    if (reporterDimension != null) {
      @NotNull final User user = myUserFinder.getItem(reporterDimension);
      result.add(item -> user.equals(item.getReporterUser()));
    }

    final String typeDimension = locator.getSingleDimensionValue(TYPE);
    if (typeDimension != null) {
      if (ProblemTarget.getKnownTypesForInvestigation().stream().noneMatch(s -> typeDimension.equalsIgnoreCase(s))) {
        throw new BadRequestException("Error in dimension '" + TYPE + "': unknown value '" + typeDimension + "'. Known values: " +
                                      StringUtil.join(ProblemTarget.getKnownTypesForInvestigation(), ", "));
      }
      result.add(item -> typeDimension.equalsIgnoreCase(ProblemTarget.getType(item)));
    }

    final String stateDimension = locator.getSingleDimensionValue(STATE);
    if (stateDimension != null) {
      if (!InvestigationWrapper.getKnownStates().contains(stateDimension.toLowerCase())) {
        throw new BadRequestException("Error in dimension '" + STATE + "': unknown value '" + stateDimension + "'. Known values: " +
                                      StringUtil.join(InvestigationWrapper.getKnownStates(), ", "));
      }
      result.add(item -> stateDimension.equalsIgnoreCase(item.getState().name()));
    }

    final String resolutionDimension = locator.getSingleDimensionValue(RESOLUTION);
    if (resolutionDimension != null) {
      ResponsibilityEntry.RemoveMethod removeMethod = Resolution.getRemoveMethodForInvestigation(resolutionDimension);
      result.add(item -> removeMethod.equals(item.getRemoveMethod()));
    }

    final String assignmentProjectDimension = locator.getSingleDimensionValue(ASSIGNMENT_PROJECT);
    if (assignmentProjectDimension != null) {
      @NotNull final SProject project = myProjectFinder.getItem(assignmentProjectDimension);
      result.add(item -> {
          final BuildProject assignmentProject = item.getAssignmentProject();
          return assignmentProject != null && project.getProjectId().equals(assignmentProject.getProjectId());
      });
    }

    final String affectedProjectDimension = locator.getSingleDimensionValue(AFFECTED_PROJECT);
    if (affectedProjectDimension != null) {
      final SProject project = myProjectFinder.getItem(affectedProjectDimension);
      result.add(item -> {
          final SProject assignmentProject = item.getAssignmentProject();
          final BuildType assignmentBuildType = item.getAssignmentBuildType();
          final SProject buildTypeProject = assignmentBuildType != null ? myProjectFinder.findProjectByInternalId(assignmentBuildType.getProjectId()) : null;
          return (assignmentProject != null && ProjectFinder.isSameOrParent(project, assignmentProject)) ||
                 (buildTypeProject != null && ProjectFinder.isSameOrParent(project, buildTypeProject));
      });
    }

    final String sinceDateDimension = locator.getSingleDimensionValue(SINCE_DATE);
    if (sinceDateDimension != null) {
      final Date date = DataProvider.getDate(sinceDateDimension);
      result.add(item -> date.before(item.getTimestamp()));
    }

    return result.toItemFilter();
  }