Search in sources :

Example 16 with BranchDto

use of org.sonar.db.component.BranchDto in project sonarqube by SonarSource.

the class MeasureAction method handle.

@Override
public void handle(Request request, Response response) throws Exception {
    response.setHeader("Cache-Control", "no-cache");
    response.stream().setMediaType(SVG);
    String metricKey = request.mandatoryParam(PARAM_METRIC);
    try (DbSession dbSession = dbClient.openSession(false)) {
        support.validateToken(request);
        BranchDto branch = support.getBranch(dbSession, request);
        MetricDto metric = dbClient.metricDao().selectByKey(dbSession, metricKey);
        checkState(metric != null && metric.isEnabled(), "Metric '%s' hasn't been found", metricKey);
        LiveMeasureDto measure = getMeasure(dbSession, branch, metricKey);
        String result = generateSvg(metric, measure);
        String eTag = getETag(result);
        Optional<String> requestedETag = request.header("If-None-Match");
        if (requestedETag.filter(eTag::equals).isPresent()) {
            response.stream().setStatus(304);
            return;
        }
        response.setHeader("ETag", eTag);
        write(result, response.stream().output(), UTF_8);
    } catch (ProjectBadgesException | ForbiddenException | NotFoundException e) {
        // There is an issue, so do not return any ETag but make this response expire now
        SimpleDateFormat sdf = new SimpleDateFormat(RFC1123_DATE, Locale.US);
        response.setHeader("Expires", sdf.format(new Date()));
        write(svgGenerator.generateError(e.getMessage()), response.stream().output(), UTF_8);
    }
}
Also used : DbSession(org.sonar.db.DbSession) BranchDto(org.sonar.db.component.BranchDto) MetricDto(org.sonar.db.metric.MetricDto) ForbiddenException(org.sonar.server.exceptions.ForbiddenException) LiveMeasureDto(org.sonar.db.measure.LiveMeasureDto) NotFoundException(org.sonar.server.exceptions.NotFoundException) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date)

Example 17 with BranchDto

use of org.sonar.db.component.BranchDto in project sonarqube by SonarSource.

the class SearchEventsAction method computeQualityGateChangeEvents.

private Stream<Event> computeQualityGateChangeEvents(DbSession dbSession, Map<String, ComponentDto> projectsByUuid, Map<String, BranchDto> branchesByUuids, List<SnapshotDto> analyses) {
    Map<String, EventDto> eventsByComponentUuid = new HashMap<>();
    dbClient.eventDao().selectByAnalysisUuids(dbSession, analyses.stream().map(SnapshotDto::getUuid).collect(toList(analyses.size()))).stream().sorted(comparing(EventDto::getDate)).filter(e -> EventCategory.QUALITY_GATE.getLabel().equals(e.getCategory())).forEach(e -> eventsByComponentUuid.put(e.getComponentUuid(), e));
    Predicate<EventDto> branchPredicate = e -> branchesByUuids.get(e.getComponentUuid()).getBranchType() == BRANCH;
    return eventsByComponentUuid.values().stream().sorted(comparing(EventDto::getDate)).filter(branchPredicate).map(e -> {
        BranchDto branch = branchesByUuids.get(e.getComponentUuid());
        ComponentDto project = projectsByUuid.get(branch.getProjectUuid());
        checkState(project != null, "Found event '%s', for a component that we did not search for", e.getUuid());
        return Event.newBuilder().setCategory(EventCategory.fromLabel(e.getCategory()).name()).setProject(project.getKey()).setMessage(branch.isMain() ? format("Quality Gate status of project '%s' changed to '%s'", project.name(), e.getName()) : format("Quality Gate status of project '%s' on branch '%s' changed to '%s'", project.name(), branch.getKey(), e.getName())).setLink(computeDashboardLink(project, branch)).setDate(formatDateTime(e.getDate())).build();
    });
}
Also used : IntStream(java.util.stream.IntStream) BranchDto(org.sonar.db.component.BranchDto) EventCategory(org.sonar.server.projectanalysis.ws.EventCategory) Date(java.util.Date) UuidFromPairs.fromDates(org.sonar.server.developers.ws.UuidFromPairs.fromDates) HashMap(java.util.HashMap) Server(org.sonar.api.platform.Server) DbSession(org.sonar.db.DbSession) PULL_REQUEST(org.sonar.db.component.BranchType.PULL_REQUEST) Request(org.sonar.api.server.ws.Request) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) WebService(org.sonar.api.server.ws.WebService) String.join(java.lang.String.join) IssueIndex(org.sonar.server.issue.index.IssueIndex) Map(java.util.Map) Response(org.sonar.api.server.ws.Response) Comparator.comparing(java.util.Comparator.comparing) DateUtils.formatDateTime(org.sonar.api.utils.DateUtils.formatDateTime) MoreCollectors.toList(org.sonar.core.util.stream.MoreCollectors.toList) Predicate(java.util.function.Predicate) UTF_8(java.nio.charset.StandardCharsets.UTF_8) Collectors(java.util.stream.Collectors) KeyExamples(org.sonar.server.ws.KeyExamples) BRANCH(org.sonar.db.component.BranchType.BRANCH) String.format(java.lang.String.format) Preconditions.checkState(com.google.common.base.Preconditions.checkState) DbClient(org.sonar.db.DbClient) BadRequestException.checkRequest(org.sonar.server.exceptions.BadRequestException.checkRequest) URLEncoder(java.net.URLEncoder) List(java.util.List) ComponentDto(org.sonar.db.component.ComponentDto) Stream(java.util.stream.Stream) UserRole(org.sonar.api.web.UserRole) IssueIndexSyncProgressChecker(org.sonar.server.issue.index.IssueIndexSyncProgressChecker) UuidFromPairs.componentUuids(org.sonar.server.developers.ws.UuidFromPairs.componentUuids) MoreCollectors.uniqueIndex(org.sonar.core.util.stream.MoreCollectors.uniqueIndex) ProjectStatistics(org.sonar.server.issue.index.ProjectStatistics) UserSession(org.sonar.server.user.UserSession) SnapshotDto(org.sonar.db.component.SnapshotDto) SearchEventsWsResponse(org.sonarqube.ws.Developers.SearchEventsWsResponse) UnsupportedEncodingException(java.io.UnsupportedEncodingException) EventDto(org.sonar.db.event.EventDto) DateUtils.parseDateTimeQuietly(org.sonar.api.utils.DateUtils.parseDateTimeQuietly) Event(org.sonarqube.ws.Developers.SearchEventsWsResponse.Event) WsUtils.writeProtobuf(org.sonar.server.ws.WsUtils.writeProtobuf) BranchDto(org.sonar.db.component.BranchDto) HashMap(java.util.HashMap) SnapshotDto(org.sonar.db.component.SnapshotDto) EventDto(org.sonar.db.event.EventDto) ComponentDto(org.sonar.db.component.ComponentDto)

Example 18 with BranchDto

use of org.sonar.db.component.BranchDto in project sonarqube by SonarSource.

the class SetAction method handle.

@Override
public void handle(Request request, Response response) throws Exception {
    String projectKey = request.getParam(PARAM_PROJECT).emptyAsNull().or(() -> null);
    String branchKey = request.getParam(PARAM_BRANCH).emptyAsNull().or(() -> null);
    if (projectKey == null && branchKey != null) {
        throw new IllegalArgumentException("If branch key is specified, project key needs to be specified too");
    }
    try (DbSession dbSession = dbClient.openSession(false)) {
        String typeStr = request.mandatoryParam(PARAM_TYPE);
        String valueStr = request.getParam(PARAM_VALUE).emptyAsNull().or(() -> null);
        boolean isCommunityEdition = editionProvider.get().filter(t -> t == EditionProvider.Edition.COMMUNITY).isPresent();
        NewCodePeriodType type = validateType(typeStr, projectKey == null, branchKey != null || isCommunityEdition);
        NewCodePeriodDto dto = new NewCodePeriodDto();
        dto.setType(type);
        ProjectDto project = null;
        BranchDto branch = null;
        if (projectKey != null) {
            project = getProject(dbSession, projectKey);
            userSession.checkProjectPermission(UserRole.ADMIN, project);
            if (branchKey != null) {
                branch = getBranch(dbSession, project, branchKey);
                dto.setBranchUuid(branch.getUuid());
            } else if (isCommunityEdition) {
                // in CE set main branch value instead of project value
                branch = getMainBranch(dbSession, project);
                dto.setBranchUuid(branch.getUuid());
            }
            dto.setProjectUuid(project.getUuid());
        } else {
            userSession.checkIsSystemAdministrator();
        }
        setValue(dbSession, dto, type, project, branch, valueStr);
        newCodePeriodDao.upsert(dbSession, dto);
        dbSession.commit();
    }
}
Also used : BranchDto(org.sonar.db.component.BranchDto) ComponentFinder(org.sonar.server.component.ComponentFinder) NewCodePeriodDao(org.sonar.db.newcodeperiod.NewCodePeriodDao) NewCodePeriodParser(org.sonar.db.newcodeperiod.NewCodePeriodParser) DbSession(org.sonar.db.DbSession) Request(org.sonar.api.server.ws.Request) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) WebService(org.sonar.api.server.ws.WebService) Locale(java.util.Locale) Response(org.sonar.api.server.ws.Response) NUMBER_OF_DAYS(org.sonar.db.newcodeperiod.NewCodePeriodType.NUMBER_OF_DAYS) NewCodePeriodType(org.sonar.db.newcodeperiod.NewCodePeriodType) EditionProvider(org.sonar.core.platform.EditionProvider) EnumSet(java.util.EnumSet) Nullable(javax.annotation.Nullable) PREVIOUS_VERSION(org.sonar.db.newcodeperiod.NewCodePeriodType.PREVIOUS_VERSION) REFERENCE_BRANCH(org.sonar.db.newcodeperiod.NewCodePeriodType.REFERENCE_BRANCH) PlatformEditionProvider(org.sonar.core.platform.PlatformEditionProvider) Set(java.util.Set) NotFoundException(org.sonar.server.exceptions.NotFoundException) String.format(java.lang.String.format) DbClient(org.sonar.db.DbClient) NewCodePeriodDto(org.sonar.db.newcodeperiod.NewCodePeriodDto) UserRole(org.sonar.api.web.UserRole) SPECIFIC_ANALYSIS(org.sonar.db.newcodeperiod.NewCodePeriodType.SPECIFIC_ANALYSIS) ProjectDto(org.sonar.db.project.ProjectDto) Preconditions(com.google.common.base.Preconditions) UserSession(org.sonar.server.user.UserSession) SnapshotDto(org.sonar.db.component.SnapshotDto) ProjectDto(org.sonar.db.project.ProjectDto) DbSession(org.sonar.db.DbSession) NewCodePeriodDto(org.sonar.db.newcodeperiod.NewCodePeriodDto) BranchDto(org.sonar.db.component.BranchDto) NewCodePeriodType(org.sonar.db.newcodeperiod.NewCodePeriodType)

Example 19 with BranchDto

use of org.sonar.db.component.BranchDto in project sonarqube by SonarSource.

the class SetAction method checkAnalysis.

private void checkAnalysis(DbSession dbSession, ProjectDto project, BranchDto branch, SnapshotDto analysis) {
    BranchDto analysisBranch = dbClient.branchDao().selectByUuid(dbSession, analysis.getComponentUuid()).orElse(null);
    boolean analysisMatchesProjectBranch = analysisBranch != null && analysisBranch.getUuid().equals(branch.getUuid());
    checkArgument(analysisMatchesProjectBranch, "Analysis '%s' does not belong to branch '%s' of project '%s'", analysis.getUuid(), branch.getKey(), project.getKey());
}
Also used : BranchDto(org.sonar.db.component.BranchDto)

Example 20 with BranchDto

use of org.sonar.db.component.BranchDto in project sonarqube by SonarSource.

the class IndexIssuesStepTest method execute_on_already_indexed_branch.

@Test
public void execute_on_already_indexed_branch() {
    BranchDto branchDto = new BranchDto().setBranchType(BRANCH).setKey("branchName").setUuid(BRANCH_UUID).setProjectUuid("project_uuid").setNeedIssueSync(false);
    dbClient.branchDao().insert(dbTester.getSession(), branchDto);
    dbTester.commit();
    underTest.execute(() -> null);
    verify(issueIndexer, times(0)).indexOnAnalysis(BRANCH_UUID);
}
Also used : BranchDto(org.sonar.db.component.BranchDto) Test(org.junit.Test)

Aggregations

BranchDto (org.sonar.db.component.BranchDto)111 Test (org.junit.Test)62 ComponentDto (org.sonar.db.component.ComponentDto)52 ProjectDto (org.sonar.db.project.ProjectDto)42 DbSession (org.sonar.db.DbSession)31 SnapshotDto (org.sonar.db.component.SnapshotDto)22 List (java.util.List)15 ComponentTesting.newBranchDto (org.sonar.db.component.ComponentTesting.newBranchDto)13 DbClient (org.sonar.db.DbClient)12 MetricDto (org.sonar.db.metric.MetricDto)12 Map (java.util.Map)9 Optional (java.util.Optional)9 Nullable (javax.annotation.Nullable)9 WebService (org.sonar.api.server.ws.WebService)9 System2 (org.sonar.api.utils.System2)9 NotFoundException (org.sonar.server.exceptions.NotFoundException)9 Collection (java.util.Collection)8 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)8 Rule (org.junit.Rule)8 Request (org.sonar.api.server.ws.Request)8