private void setCreatedAfterFromRequest(DbSession dbSession, IssueQuery.Builder builder, SearchRequest request, List<ComponentDto> componentUuids) { Date createdAfter = parseStartingDateOrDateTime(request.getCreatedAfter()); String createdInLast = request.getCreatedInLast(); if (request.getSinceLeakPeriod() == null || !request.getSinceLeakPeriod()) { setCreatedAfterFromDates(builder, createdAfter, createdInLast, true); } else { checkArgument(createdAfter == null, "Parameters '%s' and '%s' cannot be set simultaneously", PARAM_CREATED_AFTER, PARAM_SINCE_LEAK_PERIOD); checkArgument(componentUuids.size() == 1, "One and only one component must be provided when searching since leak period"); ComponentDto component = componentUuids.iterator().next(); Date createdAfterFromSnapshot = findCreatedAfterFromComponentUuid(dbSession, component); setCreatedAfterFromDates(builder, createdAfterFromSnapshot, createdInLast, false); } }
private CeTaskQuery buildQuery(DbSession dbSession, Request request, @Nullable ComponentDto component) { CeTaskQuery query = new CeTaskQuery(); query.setType(request.getType()); query.setOnlyCurrents(parseBoolean(request.getOnlyCurrents())); Date minSubmittedAt = parseStartingDateOrDateTime(request.getMinSubmittedAt()); query.setMinSubmittedAt(minSubmittedAt == null ? null : minSubmittedAt.getTime()); Date maxExecutedAt = parseEndingDateOrDateTime(request.getMaxExecutedAt()); query.setMaxExecutedAt(maxExecutedAt == null ? null : maxExecutedAt.getTime()); List<String> statuses = request.getStatus(); if (statuses != null && !statuses.isEmpty()) { query.setStatuses(request.getStatus()); } String componentQuery = request.getQ(); if (component != null) { query.setMainComponentUuid(component.uuid()); } else if (componentQuery != null) { query.setMainComponentUuids(loadComponents(dbSession, componentQuery).stream() .map(ComponentDto::uuid) .collect(toList())); } return query; }
@Test @UseDataProvider("date_times") public void param_as__date_time(String stringDate, Date expectedDate) { assertThat(parseDateOrDateTime(stringDate)).isEqualTo(expectedDate); assertThat(parseStartingDateOrDateTime(stringDate)).isEqualTo(expectedDate); }
@Test public void fail_when_param_as_starting_datetime_not_a_datetime() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Date 'polop' cannot be parsed as either a date or date+time"); parseStartingDateOrDateTime("polop"); }
@Override public void handle(Request request, Response response) throws Exception { QProfileReference reference = QProfileReference.from(request); try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto profile = wsSupport.getProfile(dbSession, reference); QProfileChangeQuery query = new QProfileChangeQuery(profile.getKee()); Date since = parseStartingDateOrDateTime(request.param(PARAM_SINCE)); if (since != null) { query.setFromIncluded(since.getTime()); } Date to = parseEndingDateOrDateTime(request.param(PARAM_TO)); if (to != null) { query.setToExcluded(to.getTime()); } int page = request.mandatoryParamAsInt(Param.PAGE); int pageSize = request.mandatoryParamAsInt(Param.PAGE_SIZE); query.setPage(page, pageSize); int total = dbClient.qProfileChangeDao().countByQuery(dbSession, query); List<Change> changelogs = load(dbSession, query); Map<String, UserDto> usersByUuid = getUsersByUserUuid(dbSession, changelogs); Map<Integer, RuleDefinitionDto> rulesByRuleIds = getRulesByRuleIds(dbSession, changelogs); writeResponse(response.newJsonWriter(), total, page, pageSize, changelogs, usersByUuid, rulesByRuleIds); } }
private void setCreatedAfterFromRequest(DbSession dbSession, IssueQuery.Builder builder, SearchRequest request, List<ComponentDto> componentUuids) { Date createdAfter = parseStartingDateOrDateTime(request.getCreatedAfter()); String createdInLast = request.getCreatedInLast(); if (request.getSinceLeakPeriod() == null || !request.getSinceLeakPeriod()) { setCreatedAfterFromDates(builder, createdAfter, createdInLast, true); } else { checkRequest(createdAfter == null, "Parameters '%s' and '%s' cannot be set simultaneously", PARAM_CREATED_AFTER, PARAM_SINCE_LEAK_PERIOD); checkArgument(componentUuids.size() == 1, "One and only one component must be provided when searching since leak period"); ComponentDto component = componentUuids.iterator().next(); Date createdAfterFromSnapshot = findCreatedAfterFromComponentUuid(dbSession, component); setCreatedAfterFromDates(builder, createdAfterFromSnapshot, createdInLast, false); } }
private CeTaskQuery buildQuery(DbSession dbSession, Request request, @Nullable ComponentDto component) { CeTaskQuery query = new CeTaskQuery(); query.setType(request.getType()); query.setOnlyCurrents(parseBoolean(request.getOnlyCurrents())); Date minSubmittedAt = parseStartingDateOrDateTime(request.getMinSubmittedAt()); query.setMinSubmittedAt(minSubmittedAt == null ? null : minSubmittedAt.getTime()); Date maxExecutedAt = parseEndingDateOrDateTime(request.getMaxExecutedAt()); query.setMaxExecutedAt(maxExecutedAt == null ? null : maxExecutedAt.getTime()); List<String> statuses = request.getStatus(); if (statuses != null && !statuses.isEmpty()) { query.setStatuses(request.getStatus()); } String componentQuery = request.getQ(); if (component != null) { query.setComponentUuid(component.uuid()); } else if (componentQuery != null) { query.setComponentUuids(loadComponents(dbSession, componentQuery).stream() .map(ComponentDto::uuid) .collect(toList())); } return query; }
@Override public void handle(Request request, Response response) throws Exception { QProfileReference reference = QProfileReference.from(request); try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto profile = wsSupport.getProfile(dbSession, reference); QProfileChangeQuery query = new QProfileChangeQuery(profile.getKee()); Date since = parseStartingDateOrDateTime(request.param(PARAM_SINCE)); if (since != null) { query.setFromIncluded(since.getTime()); } Date to = parseEndingDateOrDateTime(request.param(PARAM_TO)); if (to != null) { query.setToExcluded(to.getTime()); } int page = request.mandatoryParamAsInt(Param.PAGE); int pageSize = request.mandatoryParamAsInt(Param.PAGE_SIZE); query.setPage(page, pageSize); int total = dbClient.qProfileChangeDao().countByQuery(dbSession, query); List<Change> changelogs = load(dbSession, query); Map<String, UserDto> usersByUuid = getUsersByUserUuid(dbSession, changelogs); Map<Integer, RuleDefinitionDto> rulesByRuleIds = getRulesByRuleIds(dbSession, changelogs); writeResponse(response.newJsonWriter(), total, page, pageSize, changelogs, usersByUuid, rulesByRuleIds); } }