public Builds getBuildsForRequest()

in rest-api/src/jetbrains/buildServer/server/rest/data/finder/impl/BuildFinder.java [90:167]


  public Builds getBuildsForRequest(final SBuildType buildType,
                                    final String status,
                                    final String userLocator,
                                    final boolean includePersonal,
                                    final boolean includeCanceled,
                                    final boolean onlyPinned,
                                    final List<String> tags,
                                    final String agentName,
                                    final String sinceBuildLocator,
                                    final String sinceDate,
                                    final Long start,
                                    final Integer count,
                                    final String locatorText,
                                    final String locatorParameterName,
                                    final UriInfo uriInfo,
                                    final HttpServletRequest request,
                                    @NotNull final Fields fields,
                                    @NotNull final BeanContext beanContext) {

    boolean legacyFieldsPresent = status != null ||
                                  userLocator != null ||
                                  includePersonal ||
                                  includeCanceled ||
                                  onlyPinned ||
                                  (tags != null && !tags.isEmpty()) ||
                                  agentName != null ||
                                  sinceBuildLocator != null ||
                                  sinceDate != null ||
                                  start != null ||
                                  count != null; //so far buildType is not included here as it can come from context, not query
    String resultingLocatorText;
    Locator locator;

    if (locatorText != null || !legacyFieldsPresent) {
      resultingLocatorText = locatorText;
      try {
        // legacy: override start and count only if set in URL query parameters and not set in locator
        if (resultingLocatorText != null && !(new Locator(resultingLocatorText)).isSingleValue()) {
          if (start != null) resultingLocatorText = Locator.setDimensionIfNotPresent(resultingLocatorText, PagerData.START, String.valueOf(start));
          if (count != null) resultingLocatorText = Locator.setDimensionIfNotPresent(resultingLocatorText, PagerData.COUNT, String.valueOf(count));
        }
      } catch (LocatorProcessException e) {
        //unparsable locator - proceed to report a due error later with all the supported locators
      }
    } else {
      locator = Locator.createEmptyLocator();
      if (buildType != null) locator.setDimension("buildType", BuildTypeFinder.getLocator(buildType));
      if (status != null) locator.setDimension("status", status);
      if (userLocator != null) locator.setDimension("user", userLocator);

      // preserve 5.0 logic for personal/canceled/pinned builds; see also http://youtrack.jetbrains.com/issue/TW-25778
      if (includePersonal) locator.setDimension("personal", "any");
      if (includeCanceled) locator.setDimension("canceled", "any");

      locator.setDimension("running", "false");
      if (onlyPinned) locator.setDimension("pinned", "true");

      if (tags != null && !tags.isEmpty()) locator.setDimension("tags", StringUtil.join(",", tags)); //behavior changed comparing to 9.0: not supporting tags with comma here
      if (agentName != null) locator.setDimension("agentName", agentName);
      if (sinceBuildLocator != null) locator.setDimension("sinceBuild", sinceBuildLocator);
      if (sinceDate != null) locator.setDimension("sinceDate", sinceDate);
      if (start != null) locator.setDimension(PagerData.START, String.valueOf(start));
      if (count != null) locator.setDimension(PagerData.COUNT, String.valueOf(count));

      resultingLocatorText = locator.getStringRepresentation();
    }

    if (legacyFieldsPresent && !TeamCityProperties.getBooleanOrTrue(SUPPORT_NON_LOCATOR_FILTERS)) {
      throw new BadRequestException("Legacy query syntax supplied. Try URL parameter instead: " + locatorParameterName + "=" + resultingLocatorText + "\n" +
                                    "Set \"" + SUPPORT_NON_LOCATOR_FILTERS + "=true\" server internal property to allow such legacy queries until next TeamCity upgrade.");
    }

    final PagedSearchResult<BuildPromotion> pagedResult = myBuildPromotionFinder.getBuildPromotionsWithLegacyFallback(buildType, resultingLocatorText);
    final PagerData pagerData = new PagerDataImpl(uriInfo.getRequestUriBuilder(), request.getContextPath(), pagedResult,
                                              locatorText == null ? null : resultingLocatorText,
                                              locatorParameterName);
    return Builds.createFromPrefilteredBuildPromotions(pagedResult.getEntries(), pagerData, fields, beanContext);
  }