From c2ee935557c8cc2dd34c48761cc8eafbe75b50dc Mon Sep 17 00:00:00 2001 From: BenoƮt Gianinetti Date: Fri, 28 Jun 2019 09:46:59 +0200 Subject: SC-764 Return alm organization type in /api/organizations/search --- .../sonar/server/organization/ws/SearchAction.java | 24 ++++++++++++++++------ .../server/organization/ws/SearchActionTest.java | 1 + 2 files changed, 19 insertions(+), 6 deletions(-) (limited to 'server/sonar-server') diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/SearchAction.java index d19e3ae109b..96df687d0ea 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/SearchAction.java @@ -32,6 +32,7 @@ import org.sonar.api.server.ws.WebService.Param; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; +import org.sonar.db.alm.AlmAppInstallDto; import org.sonar.db.alm.OrganizationAlmBindingDto; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.organization.OrganizationQuery; @@ -110,9 +111,11 @@ public class SearchAction implements OrganizationsWsAction { Set provisionOrganizationUuids = searchOrganizationWithProvisionPermission(dbSession); Map organizationAlmBindingByOrgUuid = dbClient.organizationAlmBindingDao().selectByOrganizations(dbSession, organizations) .stream().collect(MoreCollectors.uniqueIndex(OrganizationAlmBindingDto::getOrganizationUuid)); + Map almAppInstallDtoByUuid = dbClient.almAppInstallDao().selectByOrganizations(dbSession, organizations) + .stream().collect(MoreCollectors.uniqueIndex(AlmAppInstallDto::getUuid)); Organizations.SearchWsResponse wsResponse = buildOrganizations(organizations, adminOrganizationUuids, provisionOrganizationUuids, organizationAlmBindingByOrgUuid, - onlyMembershipOrganizations, paging); + almAppInstallDtoByUuid, onlyMembershipOrganizations, paging); writeProtobuf(wsResponse, request, response); } } @@ -137,7 +140,8 @@ public class SearchAction implements OrganizationsWsAction { } private Organizations.SearchWsResponse buildOrganizations(List organizations, Set adminOrganizationUuids, Set provisionOrganizationUuids, - Map organizationAlmBindingByOrgUuid, boolean onlyMembershipOrganizations, Paging paging) { + Map organizationAlmBindingByOrgUuid, Map almAppInstallDtoByUuid, boolean onlyMembershipOrganizations, + Paging paging) { Organizations.SearchWsResponse.Builder response = Organizations.SearchWsResponse.newBuilder(); response.setPaging(paging); Organization.Builder wsOrganization = Organization.newBuilder(); @@ -150,13 +154,17 @@ public class SearchAction implements OrganizationsWsAction { .setAdmin(isAdmin) .setProvision(canProvision) .setDelete(isAdmin)); - response.addOrganizations(toOrganization(wsOrganization, o, organizationAlmBindingByOrgUuid.get(o.getUuid()), onlyMembershipOrganizations)); + OrganizationAlmBindingDto organizationAlmBinding = organizationAlmBindingByOrgUuid.get(o.getUuid()); + AlmAppInstallDto almAppinstall = organizationAlmBinding == null + ? null + : almAppInstallDtoByUuid.get(organizationAlmBinding.getAlmAppInstallUuid()); + response.addOrganizations(toOrganization(wsOrganization, o, organizationAlmBinding, almAppinstall, onlyMembershipOrganizations)); }); return response.build(); } private static Organization.Builder toOrganization(Organization.Builder builder, OrganizationDto organization, @Nullable OrganizationAlmBindingDto organizationAlmBinding, - boolean onlyMembershipOrganizations) { + @Nullable AlmAppInstallDto almAppInstallDto, boolean onlyMembershipOrganizations) { builder .setName(organization.getName()) .setKey(organization.getKey()); @@ -164,9 +172,13 @@ public class SearchAction implements OrganizationsWsAction { ofNullable(organization.getUrl()).ifPresent(builder::setUrl); ofNullable(organization.getAvatarUrl()).ifPresent(builder::setAvatar); if (onlyMembershipOrganizations && organizationAlmBinding != null) { - builder.setAlm(Organization.Alm.newBuilder() + Organization.Alm.Builder almBuilder = Organization.Alm.newBuilder() .setKey(organizationAlmBinding.getAlm().getId()) - .setUrl(organizationAlmBinding.getUrl())); + .setUrl(organizationAlmBinding.getUrl()); + if (almAppInstallDto != null) { + almBuilder.setPersonal(almAppInstallDto.isOwnerUser()); + } + builder.setAlm(almBuilder.build()); } if (onlyMembershipOrganizations) { builder.setSubscription(Organizations.Subscription.valueOf(organization.getSubscription().name())); diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchActionTest.java index b190cb30202..7f141946b7a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchActionTest.java @@ -272,6 +272,7 @@ public class SearchActionTest { Map orgByKey = result.getOrganizationsList().stream().collect(toMap(Organization::getKey, identity())); assertThat(orgByKey.get(organization.getKey()).getAlm().getKey()).isEqualTo(organizationAlmBinding.getAlm().getId()); assertThat(orgByKey.get(organization.getKey()).getAlm().getUrl()).isEqualTo(organizationAlmBinding.getUrl()); + assertThat(orgByKey.get(organization.getKey()).getAlm().getPersonal()).isEqualTo(almAppInstall.isOwnerUser()); assertThat(orgByKey.get(organizationNotBoundToAlm.getKey()).hasAlm()).isEqualTo(false); } -- cgit v1.2.3