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())); }
@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 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())); }