Merge changes I2459a3ea,Ie7639e2d

* changes:
  Make EmailArguments a singleton
  Document EmailArguments
This commit is contained in:
Patrick Hiesel
2019-12-13 15:18:35 +00:00
committed by Gerrit Code Review
3 changed files with 36 additions and 21 deletions

View File

@@ -45,11 +45,24 @@ import com.google.gerrit.server.ssh.SshAdvertisedAddresses;
import com.google.gerrit.server.validators.OutgoingEmailValidationListener; import com.google.gerrit.server.validators.OutgoingEmailValidationListener;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Provider; import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.template.soy.jbcsrc.api.SoySauce; import com.google.template.soy.jbcsrc.api.SoySauce;
import java.util.List; import java.util.List;
import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.PersonIdent;
/**
* Arguments used for sending notification emails.
*
* <p>Notification emails are sent by out by {@link OutgoingEmail} and it's subclasses, so called
* senders. To construct an email the sender class needs to get various other classes injected.
* Instead of injecting these classes into the sender classes directly, they only get {@code
* EmailArguments} injected and {@code EmailArguments} provides them all dependencies that they
* need.
*
* <p>This class is public because plugins need access to it for sending emails.
*/
@Singleton
@UsedAt(UsedAt.Project.PLUGINS_ALL) @UsedAt(UsedAt.Project.PLUGINS_ALL)
public class EmailArguments { public class EmailArguments {
final GitRepositoryManager server; final GitRepositoryManager server;
@@ -60,22 +73,22 @@ public class EmailArguments {
final PatchListCache patchListCache; final PatchListCache patchListCache;
final PatchSetUtil patchSetUtil; final PatchSetUtil patchSetUtil;
final ApprovalsUtil approvalsUtil; final ApprovalsUtil approvalsUtil;
final FromAddressGenerator fromAddressGenerator; final Provider<FromAddressGenerator> fromAddressGenerator;
final EmailSender emailSender; final EmailSender emailSender;
final PatchSetInfoFactory patchSetInfoFactory; final PatchSetInfoFactory patchSetInfoFactory;
final IdentifiedUser.GenericFactory identifiedUserFactory; final IdentifiedUser.GenericFactory identifiedUserFactory;
final ChangeNotes.Factory changeNotesFactory; final ChangeNotes.Factory changeNotesFactory;
final AnonymousUser anonymousUser; final Provider<AnonymousUser> anonymousUser;
final String anonymousCowardName; final String anonymousCowardName;
final PersonIdent gerritPersonIdent; final Provider<PersonIdent> gerritPersonIdent;
final DynamicItem<UrlFormatter> urlFormatter; final DynamicItem<UrlFormatter> urlFormatter;
final AllProjectsName allProjectsName; final AllProjectsName allProjectsName;
final List<String> sshAddresses; final List<String> sshAddresses;
final SitePaths site; final SitePaths site;
final ChangeQueryBuilder queryBuilder; final Provider<ChangeQueryBuilder> queryBuilder;
final ChangeData.Factory changeDataFactory; final ChangeData.Factory changeDataFactory;
final SoySauce soySauce; final Provider<SoySauce> soySauce;
final EmailSettings settings; final EmailSettings settings;
final DynamicSet<OutgoingEmailValidationListener> outgoingEmailValidationListeners; final DynamicSet<OutgoingEmailValidationListener> outgoingEmailValidationListeners;
final Provider<InternalAccountQuery> accountQueryProvider; final Provider<InternalAccountQuery> accountQueryProvider;
@@ -93,19 +106,19 @@ public class EmailArguments {
PatchListCache patchListCache, PatchListCache patchListCache,
PatchSetUtil patchSetUtil, PatchSetUtil patchSetUtil,
ApprovalsUtil approvalsUtil, ApprovalsUtil approvalsUtil,
FromAddressGenerator fromAddressGenerator, Provider<FromAddressGenerator> fromAddressGenerator,
EmailSender emailSender, EmailSender emailSender,
PatchSetInfoFactory patchSetInfoFactory, PatchSetInfoFactory patchSetInfoFactory,
GenericFactory identifiedUserFactory, GenericFactory identifiedUserFactory,
ChangeNotes.Factory changeNotesFactory, ChangeNotes.Factory changeNotesFactory,
AnonymousUser anonymousUser, Provider<AnonymousUser> anonymousUser,
@AnonymousCowardName String anonymousCowardName, @AnonymousCowardName String anonymousCowardName,
GerritPersonIdentProvider gerritPersonIdentProvider, GerritPersonIdentProvider gerritPersonIdent,
DynamicItem<UrlFormatter> urlFormatter, DynamicItem<UrlFormatter> urlFormatter,
AllProjectsName allProjectsName, AllProjectsName allProjectsName,
ChangeQueryBuilder queryBuilder, Provider<ChangeQueryBuilder> queryBuilder,
ChangeData.Factory changeDataFactory, ChangeData.Factory changeDataFactory,
@MailTemplates SoySauce soySauce, @MailTemplates Provider<SoySauce> soySauce,
EmailSettings settings, EmailSettings settings,
@SshAdvertisedAddresses List<String> sshAddresses, @SshAdvertisedAddresses List<String> sshAddresses,
SitePaths site, SitePaths site,
@@ -129,7 +142,7 @@ public class EmailArguments {
this.changeNotesFactory = changeNotesFactory; this.changeNotesFactory = changeNotesFactory;
this.anonymousUser = anonymousUser; this.anonymousUser = anonymousUser;
this.anonymousCowardName = anonymousCowardName; this.anonymousCowardName = anonymousCowardName;
this.gerritPersonIdent = gerritPersonIdentProvider.get(); this.gerritPersonIdent = gerritPersonIdent;
this.urlFormatter = urlFormatter; this.urlFormatter = urlFormatter;
this.allProjectsName = allProjectsName; this.allProjectsName = allProjectsName;
this.queryBuilder = queryBuilder; this.queryBuilder = queryBuilder;

View File

@@ -52,6 +52,7 @@ import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.StringJoiner; import java.util.StringJoiner;
import org.apache.james.mime4j.dom.field.FieldName; import org.apache.james.mime4j.dom.field.FieldName;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.util.SystemReader; import org.eclipse.jgit.util.SystemReader;
/** Sends an email to one or more interested parties. */ /** Sends an email to one or more interested parties. */
@@ -256,7 +257,7 @@ public abstract class OutgoingEmail {
protected void init() throws EmailException { protected void init() throws EmailException {
setupSoyContext(); setupSoyContext();
smtpFromAddress = args.fromAddressGenerator.from(fromId); smtpFromAddress = args.fromAddressGenerator.get().from(fromId);
setHeader(FieldName.DATE, new Date()); setHeader(FieldName.DATE, new Date());
headers.put(FieldName.FROM, new EmailHeader.AddressList(smtpFromAddress)); headers.put(FieldName.FROM, new EmailHeader.AddressList(smtpFromAddress));
headers.put(FieldName.TO, new EmailHeader.AddressList()); headers.put(FieldName.TO, new EmailHeader.AddressList());
@@ -273,7 +274,7 @@ public abstract class OutgoingEmail {
textBody = new StringBuilder(); textBody = new StringBuilder();
htmlBody = new StringBuilder(); htmlBody = new StringBuilder();
if (fromId != null && args.fromAddressGenerator.isGenericAddress(fromId)) { if (fromId != null && args.fromAddressGenerator.get().isGenericAddress(fromId)) {
appendText(getFromLine()); appendText(getFromLine());
} }
} }
@@ -353,7 +354,7 @@ public abstract class OutgoingEmail {
/** Lookup a human readable name for an account, usually the "full name". */ /** Lookup a human readable name for an account, usually the "full name". */
protected String getNameFor(@Nullable Account.Id accountId) { protected String getNameFor(@Nullable Account.Id accountId) {
if (accountId == null) { if (accountId == null) {
return args.gerritPersonIdent.getName(); return args.gerritPersonIdent.get().getName();
} }
Optional<Account> account = args.accountCache.get(accountId).map(AccountState::account); Optional<Account> account = args.accountCache.get(accountId).map(AccountState::account);
@@ -379,10 +380,8 @@ public abstract class OutgoingEmail {
*/ */
protected String getNameEmailFor(@Nullable Account.Id accountId) { protected String getNameEmailFor(@Nullable Account.Id accountId) {
if (accountId == null) { if (accountId == null) {
return args.gerritPersonIdent.getName() PersonIdent gerritIdent = args.gerritPersonIdent.get();
+ " <" return gerritIdent.getName() + " <" + gerritIdent.getEmailAddress() + ">";
+ args.gerritPersonIdent.getEmailAddress()
+ ">";
} }
Optional<Account> account = args.accountCache.get(accountId).map(AccountState::account); Optional<Account> account = args.accountCache.get(accountId).map(AccountState::account);
@@ -591,7 +590,10 @@ public abstract class OutgoingEmail {
/** Configures a soy renderer for the given template name and rendering data map. */ /** Configures a soy renderer for the given template name and rendering data map. */
private SoySauce.Renderer configureRenderer(String templateName) { private SoySauce.Renderer configureRenderer(String templateName) {
return args.soySauce.renderTemplate(SOY_TEMPLATE_NAMESPACE + templateName).setData(soyContext); return args.soySauce
.get()
.renderTemplate(SOY_TEMPLATE_NAMESPACE + templateName)
.setData(soyContext);
} }
protected void removeUser(Account user) { protected void removeUser(Account user) {

View File

@@ -241,9 +241,9 @@ public class ProjectWatch {
Predicate<ChangeData> p = null; Predicate<ChangeData> p = null;
if (user == null) { if (user == null) {
qb = args.queryBuilder.asUser(args.anonymousUser); qb = args.queryBuilder.get().asUser(args.anonymousUser.get());
} else { } else {
qb = args.queryBuilder.asUser(user); qb = args.queryBuilder.get().asUser(user);
p = qb.is_visible(); p = qb.is_visible();
} }