private SearchWsResponse doHandle(SearchRequest searchWsRequest) { try (DbSession dbSession = dbClient.openSession(false)) { ComponentDto component = getComponentByUuidOrKey(dbSession, searchWsRequest); List<ProjectLinkDto> links = dbClient.projectLinkDao() .selectByProjectUuid(dbSession, component.uuid()); return buildResponse(links); } }
private void mergeLinks(DbSession session, String componentUuid, List<ScannerReport.ComponentLink> links, List<ProjectLinkDto> previousLinks) { Set<String> linkType = new HashSet<>(); links.forEach( link -> { String type = convertType(link.getType()); checkArgument(!linkType.contains(type), "Link of type '%s' has already been declared on component '%s'", type, componentUuid); linkType.add(type); Optional<ProjectLinkDto> previousLink = previousLinks.stream() .filter(input -> input != null && input.getType().equals(convertType(link.getType()))) .findFirst(); if (previousLink.isPresent()) { previousLink.get().setHref(link.getHref()); dbClient.projectLinkDao().update(session, previousLink.get()); } else { dbClient.projectLinkDao().insert(session, new ProjectLinkDto() .setUuid(uuidFactory.create()) .setProjectUuid(componentUuid) .setType(type) .setHref(link.getHref())); } }); previousLinks.stream() .filter(dto -> !linkType.contains(dto.getType())) .filter(dto -> ProjectLinkDto.PROVIDED_TYPES.contains(dto.getType())) .forEach(dto -> dbClient.projectLinkDao().delete(session, dto.getUuid())); }
private void doHandle(String id) { try (DbSession dbSession = dbClient.openSession(false)) { ProjectLinkDto link = dbClient.projectLinkDao().selectByUuid(dbSession, id); link = WsUtils.checkFound(link, "Link with id '%s' not found", id); checkProjectAdminPermission(link); checkNotProvided(link); dbClient.projectLinkDao().delete(dbSession, link.getUuid()); dbSession.commit(); } }
@Test public void insert() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = ProjectLinkTesting.newProvidedLinkDto() .setUuid("ABCD") .setProjectUuid(project.uuid()) .setName("Home") .setType("homepage") .setHref("http://www.struts.org") // These fields will be set by the DAO .setCreatedAt(0L) .setUpdatedAt(0L); underTest.insert(db.getSession(), link); db.getSession().commit(); ProjectLinkDto reloaded = underTest.selectByUuid(db.getSession(), link.getUuid()); assertThat(reloaded.getUuid()).isEqualTo("ABCD"); assertThat(reloaded.getProjectUuid()).isEqualTo(project.uuid()); assertThat(reloaded.getType()).isEqualTo("homepage"); assertThat(reloaded.getName()).isEqualTo("Home"); assertThat(reloaded.getHref()).isEqualTo("http://www.struts.org"); assertThat(reloaded.getCreatedAt()).isEqualTo(NOW); assertThat(reloaded.getUpdatedAt()).isEqualTo(NOW); }
@Test public void update() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertProvidedLink(project, c -> c .setUuid("ABCD") .setType("ci") .setName("Gihub") .setHref("http://www.github.org")); // Force dates to be in the past db.executeUpdateSql("UPDATE project_links SET created_at=" + PAST + " ,updated_at=" + PAST); ComponentDto project2 = db.components().insertPrivateProject(); underTest.update(db.getSession(), link .setProjectUuid(project2.uuid()) .setType("homepage") .setName("Home") .setHref("http://www.sonarqube.org")); db.getSession().commit(); ProjectLinkDto reloaded = underTest.selectByUuid(db.getSession(), link.getUuid()); assertThat(reloaded.getUuid()).isEqualTo("ABCD"); assertThat(reloaded.getProjectUuid()).isEqualTo(project2.uuid()); assertThat(reloaded.getType()).isEqualTo("homepage"); assertThat(reloaded.getName()).isEqualTo("Home"); assertThat(reloaded.getHref()).isEqualTo("http://www.sonarqube.org"); assertThat(reloaded.getCreatedAt()).isEqualTo(PAST); assertThat(reloaded.getUpdatedAt()).isEqualTo(NOW); }
private void assertLinkIsNotDeleted(String uuid) { assertThat(dbClient.projectLinkDao().selectByUuid(dbSession, uuid)).isNotNull(); }
@SafeVarargs private final ProjectLinkDto insertLink(ComponentDto project, ProjectLinkDto componentLink, Consumer<ProjectLinkDto>... dtoPopulators) { Arrays.stream(dtoPopulators).forEach(dtoPopulator -> dtoPopulator.accept(componentLink)); dbClient.projectLinkDao().insert(dbSession, componentLink.setProjectUuid(project.uuid())); db.commit(); return componentLink; } }
@Test public void delete() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertProvidedLink(project); underTest.delete(db.getSession(), link.getUuid()); db.getSession().commit(); assertThat(db.countRowsOfTable("project_links")).isEqualTo(0); }
SearchMyProjectsData load(DbSession dbSession, SearchMyProjectsRequest request) { SearchMyProjectsData.Builder data = builder(); ProjectsResult searchResult = searchProjects(dbSession, request); List<ComponentDto> projects = searchResult.projects; List<String> projectUuids = Lists.transform(projects, ComponentDto::projectUuid); List<ProjectLinkDto> projectLinks = dbClient.projectLinkDao().selectByProjectUuids(dbSession, projectUuids); List<SnapshotDto> snapshots = dbClient.snapshotDao().selectLastAnalysesByRootComponentUuids(dbSession, projectUuids); List<LiveMeasureDto> qualityGates = dbClient.liveMeasureDao() .selectByComponentUuidsAndMetricKeys(dbSession, projectUuids, singletonList(CoreMetrics.ALERT_STATUS_KEY)); data.setProjects(projects) .setProjectLinks(projectLinks) .setSnapshots(snapshots) .setQualityGates(qualityGates) .setTotalNbOfProjects(searchResult.total); return data.build(); }
private void assertLinkIsDeleted(String uuid) { assertThat(dbClient.projectLinkDao().selectByUuid(dbSession, uuid)).isNull(); }
private CreateWsResponse doHandle(CreateRequest createWsRequest) { String name = createWsRequest.getName(); String url = createWsRequest.getUrl(); try (DbSession dbSession = dbClient.openSession(false)) { ComponentDto component = checkProject(getComponentByUuidOrKey(dbSession, createWsRequest)); userSession.checkComponentPermission(UserRole.ADMIN, component); ProjectLinkDto link = new ProjectLinkDto() .setUuid(uuidFactory.create()) .setProjectUuid(component.uuid()) .setName(name) .setHref(url) .setType(nameToType(name)); dbClient.projectLinkDao().insert(dbSession, link); dbSession.commit(); return buildResponse(link); } }
@Test public void select_by_project_uuids() { ComponentDto project1 = db.components().insertPrivateProject(); ProjectLinkDto link1 = db.componentLinks().insertProvidedLink(project1); ProjectLinkDto link2 = db.componentLinks().insertProvidedLink(project1); ComponentDto project2 = db.components().insertPrivateProject(); ProjectLinkDto link3 = db.componentLinks().insertProvidedLink(project2); assertThat(underTest.selectByProjectUuids(db.getSession(), asList(project1.uuid(), project2.uuid()))) .extracting(ProjectLinkDto::getUuid) .containsOnly(link1.getUuid(), link2.getUuid(), link3.getUuid()); assertThat(underTest.selectByProjectUuids(db.getSession(), singletonList(project1.uuid()))) .extracting(ProjectLinkDto::getUuid) .containsOnly(link1.getUuid(), link2.getUuid()); assertThat(underTest.selectByProjectUuids(db.getSession(), Collections.emptyList())).isEmpty(); }
private void mergeLinks(DbSession session, String componentUuid, List<ScannerReport.ComponentLink> links, List<ProjectLinkDto> previousLinks) { Set<String> linkType = new HashSet<>(); links.forEach( link -> { String type = convertType(link.getType()); checkArgument(!linkType.contains(type), "Link of type '%s' has already been declared on component '%s'", type, componentUuid); linkType.add(type); Optional<ProjectLinkDto> previousLink = previousLinks.stream() .filter(input -> input != null && input.getType().equals(convertType(link.getType()))) .findFirst(); if (previousLink.isPresent()) { previousLink.get().setHref(link.getHref()); dbClient.projectLinkDao().update(session, previousLink.get()); } else { dbClient.projectLinkDao().insert(session, new ProjectLinkDto() .setUuid(uuidFactory.create()) .setProjectUuid(componentUuid) .setType(type) .setHref(link.getHref())); } }); previousLinks.stream() .filter(dto -> !linkType.contains(dto.getType())) .filter(dto -> ProjectLinkDto.PROVIDED_TYPES.contains(dto.getType())) .forEach(dto -> dbClient.projectLinkDao().delete(session, dto.getUuid())); }
@Override public void execute(ComputationStep.Context context) { if (!analysisMetadataHolder.getBranch().isMain()) { return; } try (DbSession session = dbClient.openSession(false)) { Component project = treeRootHolder.getRoot(); ScannerReport.Component batchComponent = reportReader.readComponent(project.getReportAttributes().getRef()); List<ProjectLinkDto> previousLinks = dbClient.projectLinkDao().selectByProjectUuid(session, project.getUuid()); mergeLinks(session, project.getUuid(), batchComponent.getLinkList(), previousLinks); session.commit(); } }
private void doHandle(String id) { try (DbSession dbSession = dbClient.openSession(false)) { ProjectLinkDto link = dbClient.projectLinkDao().selectByUuid(dbSession, id); link = WsUtils.checkFound(link, "Link with id '%s' not found", id); checkProjectAdminPermission(link); checkNotProvided(link); dbClient.projectLinkDao().delete(dbSession, link.getUuid()); dbSession.commit(); } }
private void createAndTest(ComponentDto project, String name, String url, String type) { ProjectLinks.CreateWsResponse response = ws.newRequest() .setMethod("POST") .setParam(PARAM_PROJECT_KEY, project.getDbKey()) .setParam(PARAM_NAME, name) .setParam(PARAM_URL, url) .executeProtobuf(ProjectLinks.CreateWsResponse.class); String newId = response.getLink().getId(); ProjectLinkDto link = dbClient.projectLinkDao().selectByUuid(dbSession, newId); assertThat(link.getName()).isEqualTo(name); assertThat(link.getHref()).isEqualTo(url); assertThat(link.getType()).isEqualTo(type); }
private CreateWsResponse doHandle(CreateRequest createWsRequest) { String name = createWsRequest.getName(); String url = createWsRequest.getUrl(); try (DbSession dbSession = dbClient.openSession(false)) { ComponentDto component = checkProject(getComponentByUuidOrKey(dbSession, createWsRequest)); userSession.checkComponentPermission(UserRole.ADMIN, component); ProjectLinkDto link = new ProjectLinkDto() .setUuid(uuidFactory.create()) .setProjectUuid(component.uuid()) .setName(name) .setHref(url) .setType(nameToType(name)); dbClient.projectLinkDao().insert(dbSession, link); dbSession.commit(); return buildResponse(link); } }
SearchMyProjectsData load(DbSession dbSession, SearchMyProjectsRequest request) { SearchMyProjectsData.Builder data = builder(); ProjectsResult searchResult = searchProjects(dbSession, request); List<ComponentDto> projects = searchResult.projects; List<String> projectUuids = Lists.transform(projects, ComponentDto::projectUuid); List<ProjectLinkDto> projectLinks = dbClient.projectLinkDao().selectByProjectUuids(dbSession, projectUuids); List<SnapshotDto> snapshots = dbClient.snapshotDao().selectLastAnalysesByRootComponentUuids(dbSession, projectUuids); List<LiveMeasureDto> qualityGates = dbClient.liveMeasureDao() .selectByComponentUuidsAndMetricKeys(dbSession, projectUuids, singletonList(CoreMetrics.ALERT_STATUS_KEY)); data.setProjects(projects) .setProjectLinks(projectLinks) .setSnapshots(snapshots) .setQualityGates(qualityGates) .setTotalNbOfProjects(searchResult.total); return data.build(); }
@Test public void select_by_project_uuid() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link1 = db.componentLinks().insertProvidedLink(project); ProjectLinkDto link2 = db.componentLinks().insertProvidedLink(project); ProjectLinkDto link3 = db.componentLinks().insertProvidedLink(project); ComponentDto otherProject = db.components().insertPrivateProject(); ProjectLinkDto otherLink = db.componentLinks().insertProvidedLink(otherProject); assertThat(underTest.selectByProjectUuid(db.getSession(), project.uuid())) .extracting(ProjectLinkDto::getUuid) .containsExactlyInAnyOrder(link1.getUuid(), link2.getUuid(), link3.getUuid()); assertThat(underTest.selectByProjectUuid(db.getSession(), otherProject.uuid())) .extracting(ProjectLinkDto::getUuid) .containsExactlyInAnyOrder(otherLink.getUuid()); assertThat(underTest.selectByProjectUuid(db.getSession(), "UNKNOWN")).isEmpty(); }
@Test public void select_by_id() { ComponentDto project = db.components().insertPrivateProject(); ProjectLinkDto link = db.componentLinks().insertProvidedLink(project, c -> c .setUuid("ABCD") .setName("Home") .setType("homepage") .setHref("http://www.struts.org")); ProjectLinkDto reloaded = underTest.selectByUuid(db.getSession(), link.getUuid()); assertThat(reloaded.getUuid()).isEqualTo("ABCD"); assertThat(reloaded.getProjectUuid()).isEqualTo(project.uuid()); assertThat(reloaded.getType()).isEqualTo("homepage"); assertThat(reloaded.getName()).isEqualTo("Home"); assertThat(reloaded.getHref()).isEqualTo("http://www.struts.org"); assertThat(reloaded.getCreatedAt()).isEqualTo(NOW); assertThat(reloaded.getUpdatedAt()).isEqualTo(NOW); }