Merge changes I2459a3ea,Ie7639e2d
* changes: Make EmailArguments a singleton Document EmailArguments
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user