From dfae66e01938fda55760991e65397f0d318c38c8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Tue, 2 Apr 2019 09:09:18 +0200 Subject: [PATCH] SONAR-11753 factor code in email NotificationHandler implementations --- ...ortAnalysisFailureNotificationHandler.java | 22 +++------ .../ChangesOnMyIssueNotificationHandler.java | 26 ++++------ .../DoNotFixNotificationHandler.java | 22 +++------ .../MyNewIssuesNotificationHandler.java | 29 +++++------ .../NewIssuesNotificationHandler.java | 24 +++------ .../EmailNotificationHandler.java | 49 +++++++++++++++++++ .../QGChangeNotificationHandler.java | 22 +++------ .../BuiltInQPChangeNotificationHandler.java | 21 ++------ 8 files changed, 103 insertions(+), 112 deletions(-) create mode 100644 server/sonar-server-common/src/main/java/org/sonar/server/notification/EmailNotificationHandler.java diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/notification/ReportAnalysisFailureNotificationHandler.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/notification/ReportAnalysisFailureNotificationHandler.java index c951b108f25..83fcc4d3c00 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/notification/ReportAnalysisFailureNotificationHandler.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/notification/ReportAnalysisFailureNotificationHandler.java @@ -25,17 +25,18 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Stream; import org.sonar.api.web.UserRole; +import org.sonar.server.notification.EmailNotificationHandler; import org.sonar.server.notification.NotificationDispatcherMetadata; -import org.sonar.server.notification.NotificationHandler; import org.sonar.server.notification.NotificationManager; import org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject; import org.sonar.server.notification.email.EmailNotificationChannel; import org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest; +import static java.util.Collections.emptySet; import static org.sonar.core.util.stream.MoreCollectors.index; import static org.sonar.core.util.stream.MoreCollectors.toSet; -public class ReportAnalysisFailureNotificationHandler implements NotificationHandler { +public class ReportAnalysisFailureNotificationHandler extends EmailNotificationHandler { private static final String KEY = "CeReportTaskFailure"; private static final NotificationDispatcherMetadata METADATA = NotificationDispatcherMetadata.create(KEY) .setProperty(NotificationDispatcherMetadata.GLOBAL_NOTIFICATION, String.valueOf(true)) @@ -43,11 +44,10 @@ public class ReportAnalysisFailureNotificationHandler implements NotificationHan private static final SubscriberPermissionsOnProject REQUIRED_SUBSCRIBER_PERMISSIONS = new SubscriberPermissionsOnProject(UserRole.ADMIN, UserRole.USER); private final NotificationManager notificationManager; - private final EmailNotificationChannel emailNotificationChannel; public ReportAnalysisFailureNotificationHandler(NotificationManager notificationManager, EmailNotificationChannel emailNotificationChannel) { + super(emailNotificationChannel); this.notificationManager = notificationManager; - this.emailNotificationChannel = emailNotificationChannel; } @Override @@ -65,26 +65,18 @@ public class ReportAnalysisFailureNotificationHandler implements NotificationHan } @Override - public int deliver(Collection notifications) { - if (notifications.isEmpty() || !emailNotificationChannel.isActivated()) { - return 0; - } - + public Set toEmailDeliveryRequests(Collection notifications) { Multimap notificationsByProjectKey = notifications.stream() .filter(t -> t.getProjectKey() != null) .collect(index(ReportAnalysisFailureNotification::getProjectKey)); if (notificationsByProjectKey.isEmpty()) { - return 0; + return emptySet(); } - Set deliveryRequests = notificationsByProjectKey.asMap().entrySet() + return notificationsByProjectKey.asMap().entrySet() .stream() .flatMap(e -> toEmailDeliveryRequests(e.getKey(), e.getValue())) .collect(toSet(notifications.size())); - if (deliveryRequests.isEmpty()) { - return 0; - } - return emailNotificationChannel.deliver(deliveryRequests); } private Stream toEmailDeliveryRequests(String projectKey, Collection notifications) { diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationHandler.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationHandler.java index 89125189aec..f6e69d39f9b 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationHandler.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationHandler.java @@ -19,6 +19,7 @@ */ package org.sonar.server.issue.notification; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Multimap; import java.util.Collection; import java.util.Map; @@ -27,19 +28,19 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Stream; import javax.annotation.CheckForNull; -import org.sonar.core.util.stream.MoreCollectors; +import org.sonar.server.notification.EmailNotificationHandler; import org.sonar.server.notification.NotificationDispatcherMetadata; -import org.sonar.server.notification.NotificationHandler; import org.sonar.server.notification.NotificationManager; import org.sonar.server.notification.NotificationManager.EmailRecipient; import org.sonar.server.notification.email.EmailNotificationChannel; import org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest; import static org.sonar.core.util.stream.MoreCollectors.index; +import static org.sonar.core.util.stream.MoreCollectors.toSet; import static org.sonar.core.util.stream.MoreCollectors.uniqueIndex; import static org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject.ALL_MUST_HAVE_ROLE_USER; -public class ChangesOnMyIssueNotificationHandler implements NotificationHandler { +public class ChangesOnMyIssueNotificationHandler extends EmailNotificationHandler { private static final String KEY = "ChangesOnMyIssue"; private static final NotificationDispatcherMetadata METADATA = NotificationDispatcherMetadata.create(KEY) @@ -47,11 +48,10 @@ public class ChangesOnMyIssueNotificationHandler implements NotificationHandler< .setProperty(NotificationDispatcherMetadata.PER_PROJECT_NOTIFICATION, String.valueOf(true)); private final NotificationManager notificationManager; - private final EmailNotificationChannel emailNotificationChannel; public ChangesOnMyIssueNotificationHandler(NotificationManager notificationManager, EmailNotificationChannel emailNotificationChannel) { + super(emailNotificationChannel); this.notificationManager = notificationManager; - this.emailNotificationChannel = emailNotificationChannel; } @Override @@ -69,11 +69,7 @@ public class ChangesOnMyIssueNotificationHandler implements NotificationHandler< } @Override - public int deliver(Collection notifications) { - if (notifications.isEmpty() || !emailNotificationChannel.isActivated()) { - return 0; - } - + public Set toEmailDeliveryRequests(Collection notifications) { Multimap notificationsByProjectKey = notifications.stream() // ignore inconsistent data .filter(t -> t.getProjectKey() != null) @@ -83,17 +79,13 @@ public class ChangesOnMyIssueNotificationHandler implements NotificationHandler< .filter(t -> !Objects.equals(t.getAssignee(), t.getChangeAuthor())) .collect(index(IssueChangeNotification::getProjectKey)); if (notificationsByProjectKey.isEmpty()) { - return 0; + return ImmutableSet.of(); } - Set deliveryRequests = notificationsByProjectKey.asMap().entrySet() + return notificationsByProjectKey.asMap().entrySet() .stream() .flatMap(e -> toEmailDeliveryRequests(e.getKey(), e.getValue())) - .collect(MoreCollectors.toSet(notifications.size())); - if (deliveryRequests.isEmpty()) { - return 0; - } - return emailNotificationChannel.deliver(deliveryRequests); + .collect(toSet(notifications.size())); } private Stream toEmailDeliveryRequests(String projectKey, Collection notifications) { diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/DoNotFixNotificationHandler.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/DoNotFixNotificationHandler.java index c6c74230211..cbe83b961d5 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/DoNotFixNotificationHandler.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/DoNotFixNotificationHandler.java @@ -27,19 +27,20 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Stream; import org.sonar.api.issue.Issue; +import org.sonar.server.notification.EmailNotificationHandler; import org.sonar.server.notification.NotificationDispatcherMetadata; -import org.sonar.server.notification.NotificationHandler; import org.sonar.server.notification.NotificationManager; import org.sonar.server.notification.NotificationManager.EmailRecipient; import org.sonar.server.notification.email.EmailNotificationChannel; import org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest; +import static java.util.Collections.emptySet; import static java.util.Optional.of; import static org.sonar.core.util.stream.MoreCollectors.index; import static org.sonar.core.util.stream.MoreCollectors.toSet; import static org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject.ALL_MUST_HAVE_ROLE_USER; -public class DoNotFixNotificationHandler implements NotificationHandler { +public class DoNotFixNotificationHandler extends EmailNotificationHandler { public static final String KEY = "NewFalsePositiveIssue"; private static final NotificationDispatcherMetadata METADATA = NotificationDispatcherMetadata.create(KEY) @@ -49,11 +50,10 @@ public class DoNotFixNotificationHandler implements NotificationHandler SUPPORTED_NEW_RESOLUTIONS = ImmutableSet.of(Issue.RESOLUTION_FALSE_POSITIVE, Issue.RESOLUTION_WONT_FIX); private final NotificationManager notificationManager; - private final EmailNotificationChannel emailNotificationChannel; public DoNotFixNotificationHandler(NotificationManager notificationManager, EmailNotificationChannel emailNotificationChannel) { + super(emailNotificationChannel); this.notificationManager = notificationManager; - this.emailNotificationChannel = emailNotificationChannel; } @Override @@ -71,11 +71,7 @@ public class DoNotFixNotificationHandler implements NotificationHandler notifications) { - if (notifications.isEmpty() || !emailNotificationChannel.isActivated()) { - return 0; - } - + public Set toEmailDeliveryRequests(Collection notifications) { Multimap notificationsByProjectKey = notifications.stream() // ignore inconsistent data .filter(t -> t.getProjectKey() != null) @@ -86,17 +82,13 @@ public class DoNotFixNotificationHandler implements NotificationHandler SUPPORTED_NEW_RESOLUTIONS.contains(t.getNewResolution())) .collect(index(IssueChangeNotification::getProjectKey)); if (notificationsByProjectKey.isEmpty()) { - return 0; + return emptySet(); } - Set deliveryRequests = notificationsByProjectKey.asMap().entrySet() + return notificationsByProjectKey.asMap().entrySet() .stream() .flatMap(e -> toEmailDeliveryRequests(e.getKey(), e.getValue())) .collect(toSet(notifications.size())); - if (deliveryRequests.isEmpty()) { - return 0; - } - return emailNotificationChannel.deliver(deliveryRequests); } private Stream toEmailDeliveryRequests(String projectKey, Collection notifications) { diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/MyNewIssuesNotificationHandler.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/MyNewIssuesNotificationHandler.java index 7c8ce28a737..84382720b83 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/MyNewIssuesNotificationHandler.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/MyNewIssuesNotificationHandler.java @@ -28,28 +28,29 @@ import java.util.Set; import java.util.stream.Stream; import javax.annotation.CheckForNull; import org.sonar.core.util.stream.MoreCollectors; +import org.sonar.server.notification.EmailNotificationHandler; import org.sonar.server.notification.NotificationDispatcherMetadata; -import org.sonar.server.notification.NotificationHandler; import org.sonar.server.notification.NotificationManager; import org.sonar.server.notification.email.EmailNotificationChannel; +import org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest; +import static java.util.Collections.emptySet; import static org.sonar.core.util.stream.MoreCollectors.index; import static org.sonar.server.notification.NotificationDispatcherMetadata.GLOBAL_NOTIFICATION; import static org.sonar.server.notification.NotificationDispatcherMetadata.PER_PROJECT_NOTIFICATION; import static org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject.ALL_MUST_HAVE_ROLE_USER; -public class MyNewIssuesNotificationHandler implements NotificationHandler { +public class MyNewIssuesNotificationHandler extends EmailNotificationHandler { public static final String KEY = "SQ-MyNewIssues"; private static final NotificationDispatcherMetadata METADATA = NotificationDispatcherMetadata.create(KEY) .setProperty(GLOBAL_NOTIFICATION, String.valueOf(true)) .setProperty(PER_PROJECT_NOTIFICATION, String.valueOf(true)); private final NotificationManager notificationManager; - private final EmailNotificationChannel emailNotificationChannel; public MyNewIssuesNotificationHandler(NotificationManager notificationManager, EmailNotificationChannel emailNotificationChannel) { + super(emailNotificationChannel); this.notificationManager = notificationManager; - this.emailNotificationChannel = emailNotificationChannel; } @Override @@ -67,30 +68,22 @@ public class MyNewIssuesNotificationHandler implements NotificationHandler notifications) { - if (notifications.isEmpty() || !emailNotificationChannel.isActivated()) { - return 0; - } - + public Set toEmailDeliveryRequests(Collection notifications) { Multimap notificationsByProjectKey = notifications.stream() .filter(t -> t.getProjectKey() != null) .filter(t -> t.getAssignee() != null) .collect(index(MyNewIssuesNotification::getProjectKey)); if (notificationsByProjectKey.isEmpty()) { - return 0; + return emptySet(); } - Set deliveryRequests = notificationsByProjectKey.asMap().entrySet() + return notificationsByProjectKey.asMap().entrySet() .stream() .flatMap(e -> toEmailDeliveryRequests(e.getKey(), e.getValue())) .collect(MoreCollectors.toSet(notifications.size())); - if (deliveryRequests.isEmpty()) { - return 0; - } - return emailNotificationChannel.deliver(deliveryRequests); } - private Stream toEmailDeliveryRequests(String projectKey, Collection notifications) { + private Stream toEmailDeliveryRequests(String projectKey, Collection notifications) { Map recipientsByLogin = notificationManager .findSubscribedEmailRecipients(KEY, projectKey, ALL_MUST_HAVE_ROLE_USER) .stream() @@ -101,13 +94,13 @@ public class MyNewIssuesNotificationHandler implements NotificationHandler recipientsByLogin, + private static EmailDeliveryRequest toEmailDeliveryRequest(Map recipientsByLogin, MyNewIssuesNotification notification) { String assignee = notification.getAssignee(); NotificationManager.EmailRecipient emailRecipient = recipientsByLogin.get(assignee); if (emailRecipient != null) { - return new EmailNotificationChannel.EmailDeliveryRequest(emailRecipient.getEmail(), notification); + return new EmailDeliveryRequest(emailRecipient.getEmail(), notification); } return null; } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/NewIssuesNotificationHandler.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/NewIssuesNotificationHandler.java index 683993449a7..c15302172c0 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/NewIssuesNotificationHandler.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/notification/NewIssuesNotificationHandler.java @@ -24,17 +24,18 @@ import java.util.Collection; import java.util.Optional; import java.util.Set; import java.util.stream.Stream; +import org.sonar.server.notification.EmailNotificationHandler; import org.sonar.server.notification.NotificationDispatcherMetadata; -import org.sonar.server.notification.NotificationHandler; import org.sonar.server.notification.NotificationManager; import org.sonar.server.notification.email.EmailNotificationChannel; import org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest; +import static java.util.Collections.emptySet; import static org.sonar.core.util.stream.MoreCollectors.index; import static org.sonar.core.util.stream.MoreCollectors.toSet; import static org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject.ALL_MUST_HAVE_ROLE_USER; -public class NewIssuesNotificationHandler implements NotificationHandler { +public class NewIssuesNotificationHandler extends EmailNotificationHandler { public static final String KEY = "NewIssues"; private static final NotificationDispatcherMetadata METADATA = NotificationDispatcherMetadata.create(KEY) @@ -42,11 +43,10 @@ public class NewIssuesNotificationHandler implements NotificationHandler notifications) { - if (notifications.isEmpty() || !emailNotificationChannel.isActivated()) { - return 0; - } - + public Set toEmailDeliveryRequests(Collection notifications) { Multimap notificationsByProjectKey = notifications.stream() .filter(t -> t.getProjectKey() != null) .collect(index(NewIssuesNotification::getProjectKey)); if (notificationsByProjectKey.isEmpty()) { - return 0; + return emptySet(); } - Set deliveryRequests = notificationsByProjectKey.asMap().entrySet() + return notificationsByProjectKey.asMap().entrySet() .stream() .flatMap(e -> toEmailDeliveryRequests(e.getKey(), e.getValue())) .collect(toSet(notifications.size())); - if (deliveryRequests.isEmpty()) { - return 0; - } - return emailNotificationChannel.deliver(deliveryRequests); } private Stream toEmailDeliveryRequests(String projectKey, Collection notifications) { diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/notification/EmailNotificationHandler.java b/server/sonar-server-common/src/main/java/org/sonar/server/notification/EmailNotificationHandler.java new file mode 100644 index 00000000000..bcf8b4dd8f8 --- /dev/null +++ b/server/sonar-server-common/src/main/java/org/sonar/server/notification/EmailNotificationHandler.java @@ -0,0 +1,49 @@ +/* + * SonarQube + * Copyright (C) 2009-2019 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.notification; + +import java.util.Collection; +import java.util.Set; +import org.sonar.api.notifications.Notification; +import org.sonar.server.notification.email.EmailNotificationChannel; +import org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest; + +public abstract class EmailNotificationHandler implements NotificationHandler { + private final EmailNotificationChannel emailChannel; + + protected EmailNotificationHandler(EmailNotificationChannel emailChannel) { + this.emailChannel = emailChannel; + } + + @Override + public int deliver(Collection notifications) { + if (notifications.isEmpty() || !emailChannel.isActivated()) { + return 0; + } + + Set requests = toEmailDeliveryRequests(notifications); + if (requests.isEmpty()) { + return 0; + } + return emailChannel.deliver(requests); + } + + protected abstract Set toEmailDeliveryRequests(Collection notifications); +} diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/qualitygate/notification/QGChangeNotificationHandler.java b/server/sonar-server-common/src/main/java/org/sonar/server/qualitygate/notification/QGChangeNotificationHandler.java index c5a347906bb..d2ca3d90b8a 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/qualitygate/notification/QGChangeNotificationHandler.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/qualitygate/notification/QGChangeNotificationHandler.java @@ -24,17 +24,18 @@ import java.util.Collection; import java.util.Optional; import java.util.Set; import java.util.stream.Stream; +import org.sonar.server.notification.EmailNotificationHandler; import org.sonar.server.notification.NotificationDispatcherMetadata; -import org.sonar.server.notification.NotificationHandler; import org.sonar.server.notification.NotificationManager; import org.sonar.server.notification.email.EmailNotificationChannel; import org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest; +import static java.util.Collections.emptySet; import static org.sonar.core.util.stream.MoreCollectors.index; import static org.sonar.core.util.stream.MoreCollectors.toSet; import static org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject.ALL_MUST_HAVE_ROLE_USER; -public class QGChangeNotificationHandler implements NotificationHandler { +public class QGChangeNotificationHandler extends EmailNotificationHandler { public static final String KEY = "NewAlerts"; private static final NotificationDispatcherMetadata METADATA = NotificationDispatcherMetadata.create(KEY) @@ -42,11 +43,10 @@ public class QGChangeNotificationHandler implements NotificationHandler notifications) { - if (notifications.isEmpty() || !emailNotificationChannel.isActivated()) { - return 0; - } - + public Set toEmailDeliveryRequests(Collection notifications) { Multimap notificationsByProjectKey = notifications.stream() .filter(t -> t.getProjectKey() != null) .collect(index(QGChangeNotification::getProjectKey)); if (notificationsByProjectKey.isEmpty()) { - return 0; + return emptySet(); } - Set deliveryRequests = notificationsByProjectKey.asMap().entrySet() + return notificationsByProjectKey.asMap().entrySet() .stream() .flatMap(e -> toEmailDeliveryRequests(e.getKey(), e.getValue())) .collect(toSet(notifications.size())); - if (deliveryRequests.isEmpty()) { - return 0; - } - return emailNotificationChannel.deliver(deliveryRequests); } private Stream toEmailDeliveryRequests(String projectKey, Collection notifications) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/BuiltInQPChangeNotificationHandler.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/BuiltInQPChangeNotificationHandler.java index 5e566d48e39..302ba14ad9b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/BuiltInQPChangeNotificationHandler.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/BuiltInQPChangeNotificationHandler.java @@ -24,20 +24,19 @@ import java.util.Optional; import java.util.Set; import org.sonar.db.DbClient; import org.sonar.db.DbSession; +import org.sonar.server.notification.EmailNotificationHandler; import org.sonar.server.notification.NotificationDispatcherMetadata; -import org.sonar.server.notification.NotificationHandler; import org.sonar.server.notification.email.EmailNotificationChannel; import org.sonar.server.notification.email.EmailNotificationChannel.EmailDeliveryRequest; import static org.sonar.core.util.stream.MoreCollectors.toSet; -public class BuiltInQPChangeNotificationHandler implements NotificationHandler { +public class BuiltInQPChangeNotificationHandler extends EmailNotificationHandler { private final DbClient dbClient; - private final EmailNotificationChannel emailNotificationChannel; public BuiltInQPChangeNotificationHandler(DbClient dbClient, EmailNotificationChannel emailNotificationChannel) { + super(emailNotificationChannel); this.dbClient = dbClient; - this.emailNotificationChannel = emailNotificationChannel; } @Override @@ -51,23 +50,13 @@ public class BuiltInQPChangeNotificationHandler implements NotificationHandler notifications) { - if (notifications.isEmpty() || !emailNotificationChannel.isActivated()) { - return 0; - } - + public Set toEmailDeliveryRequests(Collection notifications) { try (DbSession session = dbClient.openSession(false)) { - Set deliveryRequests = dbClient.authorizationDao() + return dbClient.authorizationDao() .selectQualityProfileAdministratorLogins(session) .stream() .flatMap(t -> notifications.stream().map(notification -> new EmailDeliveryRequest(t.getEmail(), notification))) .collect(toSet()); - - if (deliveryRequests.isEmpty()) { - return 0; - } - - return emailNotificationChannel.deliver(deliveryRequests); } } } -- 2.39.5