Merge changes from topic "kamilm-checks-plugin-email-composition"
* changes:
Migrate RevertedSender to composition based classes
Migrate RestoreSender to composition based classes
Migrate ReplacePatchSetSender to composition based classes
diff --git a/java/com/google/gerrit/server/change/EmailNewPatchSet.java b/java/com/google/gerrit/server/change/EmailNewPatchSet.java
index f67ce4a..fedaad2 100644
--- a/java/com/google/gerrit/server/change/EmailNewPatchSet.java
+++ b/java/com/google/gerrit/server/change/EmailNewPatchSet.java
@@ -28,9 +28,12 @@
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.config.SendEmailExecutor;
+import com.google.gerrit.server.mail.EmailModule.ReplacePatchSetChangeEmailFactories;
+import com.google.gerrit.server.mail.send.ChangeEmailNew;
import com.google.gerrit.server.mail.send.MessageIdGenerator;
import com.google.gerrit.server.mail.send.MessageIdGenerator.MessageId;
-import com.google.gerrit.server.mail.send.ReplacePatchSetSender;
+import com.google.gerrit.server.mail.send.OutgoingEmailNew;
+import com.google.gerrit.server.mail.send.ReplacePatchSetChangeEmailDecorator;
import com.google.gerrit.server.patch.PatchSetInfoFactory;
import com.google.gerrit.server.update.PostUpdateContext;
import com.google.gerrit.server.util.RequestContext;
@@ -71,7 +74,7 @@
EmailNewPatchSet(
@SendEmailExecutor ExecutorService sendEmailExecutor,
ThreadLocalRequestContext threadLocalRequestContext,
- ReplacePatchSetSender.Factory replacePatchSetFactory,
+ ReplacePatchSetChangeEmailFactories replacePatchSetChangeEmailFactories,
PatchSetInfoFactory patchSetInfoFactory,
MessageIdGenerator messageIdGenerator,
@Assisted PostUpdateContext postUpdateContext,
@@ -107,7 +110,7 @@
this.asyncSender =
new AsyncSender(
postUpdateContext.getIdentifiedUser(),
- replacePatchSetFactory,
+ replacePatchSetChangeEmailFactories,
patchSetInfoFactory,
messageId,
postUpdateContext.getNotify(changeId),
@@ -153,7 +156,7 @@
*/
private static class AsyncSender implements Runnable, RequestContext {
private final IdentifiedUser user;
- private final ReplacePatchSetSender.Factory replacePatchSetFactory;
+ private final ReplacePatchSetChangeEmailFactories replacePatchSetChangeEmailFactories;
private final PatchSetInfoFactory patchSetInfoFactory;
private final MessageId messageId;
private final NotifyResolver.Result notify;
@@ -172,7 +175,7 @@
AsyncSender(
IdentifiedUser user,
- ReplacePatchSetSender.Factory replacePatchSetFactory,
+ ReplacePatchSetChangeEmailFactories replacePatchSetChangeEmailFactories,
PatchSetInfoFactory patchSetInfoFactory,
MessageId messageId,
NotifyResolver.Result notify,
@@ -188,7 +191,7 @@
ObjectId preUpdateMetaId,
Map<SubmitRequirement, SubmitRequirementResult> postUpdateSubmitRequirementResults) {
this.user = user;
- this.replacePatchSetFactory = replacePatchSetFactory;
+ this.replacePatchSetChangeEmailFactories = replacePatchSetChangeEmailFactories;
this.patchSetInfoFactory = patchSetInfoFactory;
this.messageId = messageId;
this.notify = notify;
@@ -208,22 +211,27 @@
@Override
public void run() {
try {
- ReplacePatchSetSender emailSender =
- replacePatchSetFactory.create(
+ ReplacePatchSetChangeEmailDecorator replacePatchSetEmail =
+ replacePatchSetChangeEmailFactories.createReplacePatchSetChangeEmail(
projectName,
changeId,
changeKind,
preUpdateMetaId,
postUpdateSubmitRequirementResults);
- emailSender.setFrom(user.getAccountId());
- emailSender.setPatchSet(patchSet, patchSetInfoFactory.get(projectName, patchSet));
- emailSender.setChangeMessage(message, timestamp);
- emailSender.setNotify(notify);
- emailSender.addReviewers(reviewers);
- emailSender.addExtraCC(extraCcs);
- emailSender.addOutdatedApproval(outdatedApprovals);
- emailSender.setMessageId(messageId);
- emailSender.send();
+ replacePatchSetEmail.addReviewers(reviewers);
+ replacePatchSetEmail.addExtraCC(extraCcs);
+ replacePatchSetEmail.addOutdatedApproval(outdatedApprovals);
+ ChangeEmailNew changeEmail =
+ replacePatchSetChangeEmailFactories.createChangeEmail(
+ projectName, changeId, replacePatchSetEmail);
+ changeEmail.setPatchSet(patchSet, patchSetInfoFactory.get(projectName, patchSet));
+ changeEmail.setChangeMessage(message, timestamp);
+ OutgoingEmailNew outgoingEmail =
+ replacePatchSetChangeEmailFactories.createEmail(changeEmail);
+ outgoingEmail.setFrom(user.getAccountId());
+ outgoingEmail.setNotify(notify);
+ outgoingEmail.setMessageId(messageId);
+ outgoingEmail.send();
} catch (Exception e) {
logger.atSevere().withCause(e).log("Cannot send email for new patch set %s", patchSet.id());
}
diff --git a/java/com/google/gerrit/server/git/CommitUtil.java b/java/com/google/gerrit/server/git/CommitUtil.java
index ffb6c66..6913b1e 100644
--- a/java/com/google/gerrit/server/git/CommitUtil.java
+++ b/java/com/google/gerrit/server/git/CommitUtil.java
@@ -43,8 +43,10 @@
import com.google.gerrit.server.change.NotifyResolver;
import com.google.gerrit.server.change.ValidationOptionsUtil;
import com.google.gerrit.server.extensions.events.ChangeReverted;
+import com.google.gerrit.server.mail.EmailModule.RevertedChangeEmailFactories;
+import com.google.gerrit.server.mail.send.ChangeEmailNew;
import com.google.gerrit.server.mail.send.MessageIdGenerator;
-import com.google.gerrit.server.mail.send.RevertedSender;
+import com.google.gerrit.server.mail.send.OutgoingEmailNew;
import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.notedb.ReviewerStateInternal;
import com.google.gerrit.server.notedb.Sequences;
@@ -93,7 +95,7 @@
private final ApprovalsUtil approvalsUtil;
private final ChangeInserter.Factory changeInserterFactory;
private final NotifyResolver notifyResolver;
- private final RevertedSender.Factory revertedSenderFactory;
+ private final RevertedChangeEmailFactories revertedChangeEmailFactories;
private final ChangeMessagesUtil cmUtil;
private final ChangeNotes.Factory changeNotesFactory;
private final ChangeReverted changeReverted;
@@ -108,7 +110,7 @@
ApprovalsUtil approvalsUtil,
ChangeInserter.Factory changeInserterFactory,
NotifyResolver notifyResolver,
- RevertedSender.Factory revertedSenderFactory,
+ RevertedChangeEmailFactories revertedChangeEmailFactories,
ChangeMessagesUtil cmUtil,
ChangeNotes.Factory changeNotesFactory,
ChangeReverted changeReverted,
@@ -120,7 +122,7 @@
this.approvalsUtil = approvalsUtil;
this.changeInserterFactory = changeInserterFactory;
this.notifyResolver = notifyResolver;
- this.revertedSenderFactory = revertedSenderFactory;
+ this.revertedChangeEmailFactories = revertedChangeEmailFactories;
this.cmUtil = cmUtil;
this.changeNotesFactory = changeNotesFactory;
this.changeReverted = changeReverted;
@@ -381,14 +383,16 @@
ctx.getChangeData(changeNotesFactory.createChecked(ctx.getProject(), revertingChangeId));
changeReverted.fire(revertedChange, revertingChange, ctx.getWhen());
try {
- RevertedSender emailSender =
- revertedSenderFactory.create(ctx.getProject(), revertedChange.getId());
- emailSender.setFrom(ctx.getAccountId());
- emailSender.setNotify(ctx.getNotify(revertedChangeId));
- emailSender.setMessageId(
+ ChangeEmailNew changeEmail =
+ revertedChangeEmailFactories.createChangeEmail(
+ ctx.getProject(), revertedChange.getId());
+ OutgoingEmailNew outgoingEmail = revertedChangeEmailFactories.createEmail(changeEmail);
+ outgoingEmail.setFrom(ctx.getAccountId());
+ outgoingEmail.setNotify(ctx.getNotify(revertedChangeId));
+ outgoingEmail.setMessageId(
messageIdGenerator.fromChangeUpdate(
ctx.getRepoView(), revertedChange.currentPatchSet().id()));
- emailSender.send();
+ outgoingEmail.send();
} catch (Exception err) {
logger.atSevere().withCause(err).log(
"Cannot send email for revert change %s", revertedChangeId);
diff --git a/java/com/google/gerrit/server/mail/EmailModule.java b/java/com/google/gerrit/server/mail/EmailModule.java
index 4b90af0..355dd5f 100644
--- a/java/com/google/gerrit/server/mail/EmailModule.java
+++ b/java/com/google/gerrit/server/mail/EmailModule.java
@@ -18,6 +18,7 @@
import com.google.gerrit.entities.Project;
import com.google.gerrit.entities.SubmitRequirement;
import com.google.gerrit.entities.SubmitRequirementResult;
+import com.google.gerrit.extensions.client.ChangeKind;
import com.google.gerrit.extensions.config.FactoryModule;
import com.google.gerrit.server.mail.send.AbandonedChangeEmailDecorator;
import com.google.gerrit.server.mail.send.AddKeySender;
@@ -38,9 +39,10 @@
import com.google.gerrit.server.mail.send.OutgoingEmailNew;
import com.google.gerrit.server.mail.send.OutgoingEmailNewFactory;
import com.google.gerrit.server.mail.send.RegisterNewEmailSender;
-import com.google.gerrit.server.mail.send.ReplacePatchSetSender;
-import com.google.gerrit.server.mail.send.RestoredSender;
-import com.google.gerrit.server.mail.send.RevertedSender;
+import com.google.gerrit.server.mail.send.ReplacePatchSetChangeEmailDecorator;
+import com.google.gerrit.server.mail.send.ReplacePatchSetChangeEmailDecoratorFactory;
+import com.google.gerrit.server.mail.send.RestoredChangeEmailDecorator;
+import com.google.gerrit.server.mail.send.RevertedChangeEmailDecorator;
import com.google.inject.Inject;
import java.util.Map;
import java.util.Optional;
@@ -55,9 +57,6 @@
factory(DeleteKeySender.Factory.class);
factory(HttpPasswordUpdateSender.Factory.class);
factory(RegisterNewEmailSender.Factory.class);
- factory(ReplacePatchSetSender.Factory.class);
- factory(RestoredSender.Factory.class);
- factory(RevertedSender.Factory.class);
}
public static class AbandonedChangeEmailFactories {
@@ -254,4 +253,102 @@
return outgoingEmailFactory.create("merged", changeEmail);
}
}
+
+ public static class ReplacePatchSetChangeEmailFactories {
+ private final EmailArguments args;
+ private final ReplacePatchSetChangeEmailDecoratorFactory
+ replacePatchSetChangeEmailDecoratorFactory;
+ private final ChangeEmailNewFactory changeEmailFactory;
+ private final OutgoingEmailNewFactory outgoingEmailFactory;
+
+ @Inject
+ ReplacePatchSetChangeEmailFactories(
+ EmailArguments args,
+ ReplacePatchSetChangeEmailDecoratorFactory replacePatchSetChangeEmailDecoratorFactory,
+ ChangeEmailNewFactory changeEmailFactory,
+ OutgoingEmailNewFactory outgoingEmailFactory) {
+ this.args = args;
+ this.replacePatchSetChangeEmailDecoratorFactory = replacePatchSetChangeEmailDecoratorFactory;
+ this.changeEmailFactory = changeEmailFactory;
+ this.outgoingEmailFactory = outgoingEmailFactory;
+ }
+
+ public ReplacePatchSetChangeEmailDecorator createReplacePatchSetChangeEmail(
+ Project.NameKey project,
+ Change.Id changeId,
+ ChangeKind changeKind,
+ ObjectId preUpdateMetaId,
+ Map<SubmitRequirement, SubmitRequirementResult> postUpdateSubmitRequirementResults) {
+ return replacePatchSetChangeEmailDecoratorFactory.create(
+ project, changeId, changeKind, preUpdateMetaId, postUpdateSubmitRequirementResults);
+ }
+
+ public ChangeEmailNew createChangeEmail(
+ Project.NameKey project,
+ Change.Id changeId,
+ ReplacePatchSetChangeEmailDecorator replacePatchSetChangeEmailDecoratorFactory) {
+ return changeEmailFactory.create(
+ args.newChangeData(project, changeId), replacePatchSetChangeEmailDecoratorFactory);
+ }
+
+ public OutgoingEmailNew createEmail(ChangeEmailNew changeEmail) {
+ return outgoingEmailFactory.create("newpatchset", changeEmail);
+ }
+ }
+
+ public static class RestoredChangeEmailFactories {
+ private final EmailArguments args;
+ private final ChangeEmailNewFactory changeEmailFactory;
+ private final OutgoingEmailNewFactory outgoingEmailFactory;
+ private final RestoredChangeEmailDecorator restoredChangeEmailDecorator;
+
+ @Inject
+ RestoredChangeEmailFactories(
+ EmailArguments args,
+ ChangeEmailNewFactory changeEmailFactory,
+ OutgoingEmailNewFactory outgoingEmailFactory,
+ RestoredChangeEmailDecorator restoredChangeEmailDecorator) {
+ this.args = args;
+ this.changeEmailFactory = changeEmailFactory;
+ this.outgoingEmailFactory = outgoingEmailFactory;
+ this.restoredChangeEmailDecorator = restoredChangeEmailDecorator;
+ }
+
+ public ChangeEmailNew createChangeEmail(Project.NameKey project, Change.Id changeId) {
+ return changeEmailFactory.create(
+ args.newChangeData(project, changeId), restoredChangeEmailDecorator);
+ }
+
+ public OutgoingEmailNew createEmail(ChangeEmailNew changeEmail) {
+ return outgoingEmailFactory.create("restore", changeEmail);
+ }
+ }
+
+ public static class RevertedChangeEmailFactories {
+ private final EmailArguments args;
+ private final ChangeEmailNewFactory changeEmailFactory;
+ private final OutgoingEmailNewFactory outgoingEmailFactory;
+ private final RevertedChangeEmailDecorator revertedChangeEmailDecorator;
+
+ @Inject
+ RevertedChangeEmailFactories(
+ EmailArguments args,
+ ChangeEmailNewFactory changeEmailFactory,
+ OutgoingEmailNewFactory outgoingEmailFactory,
+ RevertedChangeEmailDecorator revertedChangeEmailDecorator) {
+ this.args = args;
+ this.changeEmailFactory = changeEmailFactory;
+ this.outgoingEmailFactory = outgoingEmailFactory;
+ this.revertedChangeEmailDecorator = revertedChangeEmailDecorator;
+ }
+
+ public ChangeEmailNew createChangeEmail(Project.NameKey project, Change.Id changeId) {
+ return changeEmailFactory.create(
+ args.newChangeData(project, changeId), revertedChangeEmailDecorator);
+ }
+
+ public OutgoingEmailNew createEmail(ChangeEmailNew changeEmail) {
+ return outgoingEmailFactory.create("revert", changeEmail);
+ }
+ }
}
diff --git a/java/com/google/gerrit/server/mail/send/ChangeEmailNew.java b/java/com/google/gerrit/server/mail/send/ChangeEmailNew.java
index 16b822a..28dd3b1 100644
--- a/java/com/google/gerrit/server/mail/send/ChangeEmailNew.java
+++ b/java/com/google/gerrit/server/mail/send/ChangeEmailNew.java
@@ -86,7 +86,7 @@
public final class ChangeEmailNew implements OutgoingEmailNew.EmailDecorator {
/** Implementations of params interface populate details specific to the notification type. */
- interface ChangeEmailDecorator {
+ public interface ChangeEmailDecorator {
/**
* Stores the reference to the {@link OutgoingEmailNew} and {@link ChangeEmailNew} for the
* subsequent calls.
diff --git a/java/com/google/gerrit/server/mail/send/OutgoingEmailNew.java b/java/com/google/gerrit/server/mail/send/OutgoingEmailNew.java
index 95b35be..ae558b7 100644
--- a/java/com/google/gerrit/server/mail/send/OutgoingEmailNew.java
+++ b/java/com/google/gerrit/server/mail/send/OutgoingEmailNew.java
@@ -64,7 +64,7 @@
public final class OutgoingEmailNew {
/** Provides content, recipients and any customizations of the email. */
- interface EmailDecorator {
+ public interface EmailDecorator {
/**
* Stores the reference to the email for the subsequent calls.
*
diff --git a/java/com/google/gerrit/server/mail/send/ReplacePatchSetSender.java b/java/com/google/gerrit/server/mail/send/ReplacePatchSetChangeEmailDecorator.java
similarity index 72%
rename from java/com/google/gerrit/server/mail/send/ReplacePatchSetSender.java
rename to java/com/google/gerrit/server/mail/send/ReplacePatchSetChangeEmailDecorator.java
index 85d2757..a9bd32e 100644
--- a/java/com/google/gerrit/server/mail/send/ReplacePatchSetSender.java
+++ b/java/com/google/gerrit/server/mail/send/ReplacePatchSetChangeEmailDecorator.java
@@ -16,6 +16,8 @@
import static com.google.common.collect.ImmutableList.toImmutableList;
+import com.google.auto.factory.AutoFactory;
+import com.google.auto.factory.Provided;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
@@ -28,13 +30,11 @@
import com.google.gerrit.entities.Project;
import com.google.gerrit.entities.SubmitRequirement;
import com.google.gerrit.entities.SubmitRequirementResult;
-import com.google.gerrit.exceptions.EmailException;
import com.google.gerrit.extensions.api.changes.NotifyHandling;
import com.google.gerrit.extensions.api.changes.RecipientType;
import com.google.gerrit.extensions.client.ChangeKind;
+import com.google.gerrit.server.mail.send.ChangeEmailNew.ChangeEmailDecorator;
import com.google.gerrit.server.util.LabelVote;
-import com.google.inject.Inject;
-import com.google.inject.assistedinject.Assisted;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
@@ -44,18 +44,13 @@
import org.eclipse.jgit.lib.ObjectId;
/** Send notice of new patch sets for reviewers. */
-public class ReplacePatchSetSender extends ReplyToChangeSender {
+@AutoFactory
+public class ReplacePatchSetChangeEmailDecorator implements ChangeEmailDecorator {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
- public interface Factory {
- ReplacePatchSetSender create(
- Project.NameKey project,
- Change.Id changeId,
- ChangeKind changeKind,
- ObjectId preUpdateMetaId,
- Map<SubmitRequirement, SubmitRequirementResult> postUpdateSubmitRequirementResults);
- }
-
+ private final EmailArguments args;
+ private OutgoingEmailNew email;
+ private ChangeEmailNew changeEmail;
private final Set<Account.Id> reviewers = new HashSet<>();
private final Set<Account.Id> extraCC = new HashSet<>();
private final ChangeKind changeKind;
@@ -64,16 +59,14 @@
preUpdateSubmitRequirementResultsSupplier;
private final Map<SubmitRequirement, SubmitRequirementResult> postUpdateSubmitRequirementResults;
- @Inject
- public ReplacePatchSetSender(
- EmailArguments args,
- @Assisted Project.NameKey project,
- @Assisted Change.Id changeId,
- @Assisted ChangeKind changeKind,
- @Assisted ObjectId preUpdateMetaId,
- @Assisted
- Map<SubmitRequirement, SubmitRequirementResult> postUpdateSubmitRequirementResults) {
- super(args, "newpatchset", newChangeData(args, project, changeId));
+ ReplacePatchSetChangeEmailDecorator(
+ @Provided EmailArguments args,
+ Project.NameKey project,
+ Change.Id changeId,
+ ChangeKind changeKind,
+ ObjectId preUpdateMetaId,
+ Map<SubmitRequirement, SubmitRequirementResult> postUpdateSubmitRequirementResults) {
+ this.args = args;
this.changeKind = changeKind;
this.preUpdateSubmitRequirementResultsSupplier =
@@ -81,22 +74,21 @@
() ->
// Triggers an (expensive) evaluation of the submit requirements. This is OK since
// all callers sent this email asynchronously, see EmailNewPatchSet.
- newChangeData(args, project, changeId, preUpdateMetaId)
+ args.newChangeData(project, changeId, preUpdateMetaId)
.submitRequirementsIncludingLegacy());
this.postUpdateSubmitRequirementResults = postUpdateSubmitRequirementResults;
}
@Override
- protected boolean shouldSendMessage() {
+ public boolean shouldSendMessage() {
if (!isChangeNoLongerSubmittable() && changeKind.isTrivialRebase()) {
logger.atFine().log(
"skip email because new patch set is a trivial rebase that didn't make the change"
+ " non-submittable");
return false;
}
-
- return super.shouldSendMessage();
+ return true;
}
public void addReviewers(Collection<Account.Id> cc) {
@@ -114,10 +106,12 @@
}
@Override
- protected void init() throws EmailException {
- super.init();
+ public void init(OutgoingEmailNew email, ChangeEmailNew changeEmail) {
+ this.email = email;
+ this.changeEmail = changeEmail;
+ changeEmail.markAsReply();
- Account.Id fromId = getFrom();
+ Account.Id fromId = email.getFrom();
if (fromId != null) {
// Don't call yourself a reviewer of your own patch set.
//
@@ -125,22 +119,14 @@
}
}
- @Override
- protected void formatChange() throws EmailException {
- appendText(textTemplate("ReplacePatchSet"));
- if (useHtml()) {
- appendHtml(soyHtmlTemplate("ReplacePatchSetHtml"));
- }
- }
-
@Nullable
- public ImmutableList<String> getReviewerNames() {
+ private ImmutableList<String> getReviewerNames() {
List<String> names = new ArrayList<>();
for (Account.Id id : reviewers) {
- if (id.equals(getFrom())) {
+ if (id.equals(email.getFrom())) {
continue;
}
- names.add(getNameFor(id));
+ names.add(email.getNameFor(id));
}
if (names.isEmpty()) {
return null;
@@ -155,37 +141,43 @@
String.format(
"%s by %s",
LabelVote.create(outdatedApproval.label(), outdatedApproval.value()).format(),
- getNameFor(outdatedApproval.accountId())))
+ email.getNameFor(outdatedApproval.accountId())))
.sorted()
.collect(toImmutableList());
}
@Override
- protected void populateEmailContent() throws EmailException {
- super.populateEmailContent();
- addSoyEmailDataParam("reviewerNames", getReviewerNames());
- addSoyEmailDataParam("outdatedApprovals", formatOutdatedApprovals());
+ public void populateEmailContent() {
+ changeEmail.addAuthors(RecipientType.TO);
+
+ email.addSoyEmailDataParam("reviewerNames", getReviewerNames());
+ email.addSoyEmailDataParam("outdatedApprovals", formatOutdatedApprovals());
if (isChangeNoLongerSubmittable()) {
- addSoyParam("unsatisfiedSubmitRequirements", formatUnsatisfiedSubmitRequirements());
- addSoyParam(
+ email.addSoyParam("unsatisfiedSubmitRequirements", formatUnsatisfiedSubmitRequirements());
+ email.addSoyParam(
"oldSubmitRequirements",
formatSubmitRequirments(preUpdateSubmitRequirementResultsSupplier.get()));
- addSoyParam(
+ email.addSoyParam(
"newSubmitRequirements", formatSubmitRequirments(postUpdateSubmitRequirementResults));
}
if (args.settings.sendNewPatchsetEmails) {
- if (getNotify().handling().equals(NotifyHandling.ALL)
- || getNotify().handling().equals(NotifyHandling.OWNER_REVIEWERS)) {
- reviewers.stream().forEach(r -> addByAccountId(RecipientType.TO, r));
- extraCC.stream().forEach(cc -> addByAccountId(RecipientType.CC, cc));
+ if (email.getNotify().handling().equals(NotifyHandling.ALL)
+ || email.getNotify().handling().equals(NotifyHandling.OWNER_REVIEWERS)) {
+ reviewers.stream().forEach(r -> email.addByAccountId(RecipientType.TO, r));
+ extraCC.stream().forEach(cc -> email.addByAccountId(RecipientType.CC, cc));
}
- addAuthors(RecipientType.CC);
}
- bccStarredBy();
- includeWatchers(
- NotifyType.NEW_PATCHSETS, !getChange().isWorkInProgress() && !getChange().isPrivate());
+ changeEmail.bccStarredBy();
+ changeEmail.includeWatchers(
+ NotifyType.NEW_PATCHSETS,
+ !changeEmail.getChange().isWorkInProgress() && !changeEmail.getChange().isPrivate());
+
+ email.appendText(email.textTemplate("ReplacePatchSet"));
+ if (email.useHtml()) {
+ email.appendHtml(email.soyHtmlTemplate("ReplacePatchSetHtml"));
+ }
}
/**
@@ -200,7 +192,7 @@
.allMatch(SubmitRequirementResult::fulfilled);
logger.atFine().log(
"the submitability of change %s before the update is %s",
- getChange().getId(), isSubmittablePreUpdate);
+ changeEmail.getChange().getId(), isSubmittablePreUpdate);
if (!isSubmittablePreUpdate) {
return false;
}
@@ -210,7 +202,7 @@
.allMatch(SubmitRequirementResult::fulfilled);
logger.atFine().log(
"the submitability of change %s after the update is %s",
- getChange().getId(), isSubmittablePostUpdate);
+ changeEmail.getChange().getId(), isSubmittablePostUpdate);
return !isSubmittablePostUpdate;
}
diff --git a/java/com/google/gerrit/server/mail/send/RestoredChangeEmailDecorator.java b/java/com/google/gerrit/server/mail/send/RestoredChangeEmailDecorator.java
new file mode 100644
index 0000000..d8c2696
--- /dev/null
+++ b/java/com/google/gerrit/server/mail/send/RestoredChangeEmailDecorator.java
@@ -0,0 +1,46 @@
+// Copyright (C) 2011 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.server.mail.send;
+
+import com.google.gerrit.entities.NotifyConfig.NotifyType;
+import com.google.gerrit.extensions.api.changes.RecipientType;
+import com.google.gerrit.server.mail.send.ChangeEmailNew.ChangeEmailDecorator;
+
+/** Send notice about a change being restored by its owner. */
+public class RestoredChangeEmailDecorator implements ChangeEmailDecorator {
+ private OutgoingEmailNew email;
+ private ChangeEmailNew changeEmail;
+
+ @Override
+ public void init(OutgoingEmailNew email, ChangeEmailNew changeEmail) {
+ this.email = email;
+ this.changeEmail = changeEmail;
+ changeEmail.markAsReply();
+ }
+
+ @Override
+ public void populateEmailContent() {
+ changeEmail.addAuthors(RecipientType.TO);
+
+ changeEmail.ccAllApprovals();
+ changeEmail.bccStarredBy();
+ changeEmail.includeWatchers(NotifyType.ALL_COMMENTS);
+
+ email.appendText(email.textTemplate("Restored"));
+ if (email.useHtml()) {
+ email.appendHtml(email.soyHtmlTemplate("RestoredHtml"));
+ }
+ }
+}
diff --git a/java/com/google/gerrit/server/mail/send/RestoredSender.java b/java/com/google/gerrit/server/mail/send/RestoredSender.java
deleted file mode 100644
index 672b758..0000000
--- a/java/com/google/gerrit/server/mail/send/RestoredSender.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (C) 2011 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.server.mail.send;
-
-import com.google.gerrit.entities.Change;
-import com.google.gerrit.entities.NotifyConfig.NotifyType;
-import com.google.gerrit.entities.Project;
-import com.google.gerrit.exceptions.EmailException;
-import com.google.inject.Inject;
-import com.google.inject.assistedinject.Assisted;
-
-/** Send notice about a change being restored by its owner. */
-public class RestoredSender extends ReplyToChangeSender {
- public interface Factory extends ReplyToChangeSender.Factory<RestoredSender> {
- @Override
- RestoredSender create(Project.NameKey project, Change.Id changeId);
- }
-
- @Inject
- public RestoredSender(
- EmailArguments args, @Assisted Project.NameKey project, @Assisted Change.Id changeId) {
- super(args, "restore", ChangeEmail.newChangeData(args, project, changeId));
- }
-
- @Override
- protected void populateEmailContent() throws EmailException {
- super.populateEmailContent();
-
- ccAllApprovals();
- bccStarredBy();
- includeWatchers(NotifyType.ALL_COMMENTS);
- }
-
- @Override
- protected void formatChange() throws EmailException {
- appendText(textTemplate("Restored"));
- if (useHtml()) {
- appendHtml(soyHtmlTemplate("RestoredHtml"));
- }
- }
-}
diff --git a/java/com/google/gerrit/server/mail/send/RevertedChangeEmailDecorator.java b/java/com/google/gerrit/server/mail/send/RevertedChangeEmailDecorator.java
new file mode 100644
index 0000000..2a802f3
--- /dev/null
+++ b/java/com/google/gerrit/server/mail/send/RevertedChangeEmailDecorator.java
@@ -0,0 +1,46 @@
+// Copyright (C) 2011 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.server.mail.send;
+
+import com.google.gerrit.entities.NotifyConfig.NotifyType;
+import com.google.gerrit.extensions.api.changes.RecipientType;
+import com.google.gerrit.server.mail.send.ChangeEmailNew.ChangeEmailDecorator;
+
+/** Send notice about a change being reverted. */
+public class RevertedChangeEmailDecorator implements ChangeEmailDecorator {
+ private OutgoingEmailNew email;
+ private ChangeEmailNew changeEmail;
+
+ @Override
+ public void init(OutgoingEmailNew email, ChangeEmailNew changeEmail) {
+ this.email = email;
+ this.changeEmail = changeEmail;
+ changeEmail.markAsReply();
+ }
+
+ @Override
+ public void populateEmailContent() {
+ changeEmail.addAuthors(RecipientType.TO);
+
+ changeEmail.ccAllApprovals();
+ changeEmail.bccStarredBy();
+ changeEmail.includeWatchers(NotifyType.ALL_COMMENTS);
+
+ email.appendText(email.textTemplate("Reverted"));
+ if (email.useHtml()) {
+ email.appendHtml(email.soyHtmlTemplate("RevertedHtml"));
+ }
+ }
+}
diff --git a/java/com/google/gerrit/server/mail/send/RevertedSender.java b/java/com/google/gerrit/server/mail/send/RevertedSender.java
deleted file mode 100644
index 6ab44a7..0000000
--- a/java/com/google/gerrit/server/mail/send/RevertedSender.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2011 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.server.mail.send;
-
-import com.google.gerrit.entities.Change;
-import com.google.gerrit.entities.NotifyConfig.NotifyType;
-import com.google.gerrit.entities.Project;
-import com.google.gerrit.exceptions.EmailException;
-import com.google.inject.Inject;
-import com.google.inject.assistedinject.Assisted;
-
-/** Send notice about a change being reverted. */
-public class RevertedSender extends ReplyToChangeSender {
- public interface Factory {
- RevertedSender create(Project.NameKey project, Change.Id changeId);
- }
-
- @Inject
- public RevertedSender(
- EmailArguments args, @Assisted Project.NameKey project, @Assisted Change.Id changeId) {
- super(args, "revert", ChangeEmail.newChangeData(args, project, changeId));
- }
-
- @Override
- protected void populateEmailContent() throws EmailException {
- super.populateEmailContent();
-
- ccAllApprovals();
- bccStarredBy();
- includeWatchers(NotifyType.ALL_COMMENTS);
- }
-
- @Override
- protected void formatChange() throws EmailException {
- appendText(textTemplate("Reverted"));
- if (useHtml()) {
- appendHtml(soyHtmlTemplate("RevertedHtml"));
- }
- }
-}
diff --git a/java/com/google/gerrit/server/restapi/change/Restore.java b/java/com/google/gerrit/server/restapi/change/Restore.java
index 6ac9c21..a47e88d 100644
--- a/java/com/google/gerrit/server/restapi/change/Restore.java
+++ b/java/com/google/gerrit/server/restapi/change/Restore.java
@@ -35,9 +35,10 @@
import com.google.gerrit.server.change.ChangeJson;
import com.google.gerrit.server.change.ChangeResource;
import com.google.gerrit.server.extensions.events.ChangeRestored;
+import com.google.gerrit.server.mail.EmailModule.RestoredChangeEmailFactories;
+import com.google.gerrit.server.mail.send.ChangeEmailNew;
import com.google.gerrit.server.mail.send.MessageIdGenerator;
-import com.google.gerrit.server.mail.send.ReplyToChangeSender;
-import com.google.gerrit.server.mail.send.RestoredSender;
+import com.google.gerrit.server.mail.send.OutgoingEmailNew;
import com.google.gerrit.server.notedb.ChangeUpdate;
import com.google.gerrit.server.permissions.ChangePermission;
import com.google.gerrit.server.permissions.PermissionBackendException;
@@ -60,7 +61,7 @@
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private final BatchUpdate.Factory updateFactory;
- private final RestoredSender.Factory restoredSenderFactory;
+ private final RestoredChangeEmailFactories restoredChangeEmailFactories;
private final ChangeJson.Factory json;
private final ChangeMessagesUtil cmUtil;
private final PatchSetUtil psUtil;
@@ -71,7 +72,7 @@
@Inject
Restore(
BatchUpdate.Factory updateFactory,
- RestoredSender.Factory restoredSenderFactory,
+ RestoredChangeEmailFactories restoredChangeEmailFactories,
ChangeJson.Factory json,
ChangeMessagesUtil cmUtil,
PatchSetUtil psUtil,
@@ -79,7 +80,7 @@
ProjectCache projectCache,
MessageIdGenerator messageIdGenerator) {
this.updateFactory = updateFactory;
- this.restoredSenderFactory = restoredSenderFactory;
+ this.restoredChangeEmailFactories = restoredChangeEmailFactories;
this.json = json;
this.cmUtil = cmUtil;
this.psUtil = psUtil;
@@ -151,13 +152,14 @@
@Override
public void postUpdate(PostUpdateContext ctx) {
try {
- ReplyToChangeSender emailSender =
- restoredSenderFactory.create(ctx.getProject(), change.getId());
- emailSender.setFrom(ctx.getAccountId());
- emailSender.setChangeMessage(mailMessage, ctx.getWhen());
- emailSender.setMessageId(
+ ChangeEmailNew changeEmail =
+ restoredChangeEmailFactories.createChangeEmail(ctx.getProject(), change.getId());
+ changeEmail.setChangeMessage(mailMessage, ctx.getWhen());
+ OutgoingEmailNew outgoingEmail = restoredChangeEmailFactories.createEmail(changeEmail);
+ outgoingEmail.setFrom(ctx.getAccountId());
+ outgoingEmail.setMessageId(
messageIdGenerator.fromChangeUpdate(ctx.getRepoView(), change.currentPatchSetId()));
- emailSender.send();
+ outgoingEmail.send();
} catch (Exception e) {
logger.atSevere().withCause(e).log("Cannot email update for change %s", change.getId());
}