RegisterNewEmailSender is managed by Guice through AssistedInject. Created inner factory interface for RegisterNewEmailSender class which is created by Guice using technique described here: http://code.google.com/p/google-guice/wiki/AssistedInject In order to use that additional dependency has been added to pom.xml.
diff --git a/pom.xml b/pom.xml index 372b4f0..c27a3b3 100644 --- a/pom.xml +++ b/pom.xml
@@ -547,6 +547,11 @@ <version>2.0</version> </dependency> <dependency> + <groupId>com.google.code.guice</groupId> + <artifactId>guice-assistedinject</artifactId> + <version>2.0</version> + </dependency> + <dependency> <!-- required by Guice (whose POM is fake and lacks it) --> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId>
diff --git a/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java b/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java index 098d89b..cf9d685 100644 --- a/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java +++ b/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java
@@ -30,7 +30,6 @@ import com.google.gerrit.client.rpc.NoSuchEntityException; import com.google.gerrit.server.mail.EmailException; import com.google.gerrit.server.mail.RegisterNewEmailSender; -import com.google.gerrit.server.mail.EmailSender; import com.google.gerrit.server.ssh.SshUtil; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwtjsonrpc.client.VoidResult; @@ -65,15 +64,15 @@ private final Logger log = LoggerFactory.getLogger(getClass()); private final GerritServer server; private final ContactStore contactStore; - private final EmailSender emailSender; + private final RegisterNewEmailSender.Factory registerNewEmailFactory; @Inject AccountSecurityImpl(final SchemaFactory<ReviewDb> sf, final GerritServer gs, - final ContactStore cs, final EmailSender es) { + final ContactStore cs, final RegisterNewEmailSender.Factory esf) { super(sf); server = gs; contactStore = cs; - emailSender = es; + registerNewEmailFactory = esf; } public void mySshKeys(final AsyncCallback<List<AccountSshKey>> callback) { @@ -289,7 +288,7 @@ GerritJsonServlet.getCurrentCall().getHttpServletRequest(); try { final RegisterNewEmailSender sender; - sender = new RegisterNewEmailSender(server, emailSender, address, req); + sender = registerNewEmailFactory.create(address); sender.send(); cb.onSuccess(VoidResult.INSTANCE); } catch (EmailException e) {
diff --git a/src/main/java/com/google/gerrit/server/GerritServerModule.java b/src/main/java/com/google/gerrit/server/GerritServerModule.java index d851bce..e737a71b 100644 --- a/src/main/java/com/google/gerrit/server/GerritServerModule.java +++ b/src/main/java/com/google/gerrit/server/GerritServerModule.java
@@ -29,12 +29,14 @@ import com.google.gerrit.server.config.SitePath; import com.google.gerrit.server.config.SitePathProvider; import com.google.gerrit.server.mail.EmailSender; +import com.google.gerrit.server.mail.RegisterNewEmailSender; import com.google.gerrit.server.mail.SmtpEmailSender; import com.google.gwtorm.client.SchemaFactory; import com.google.gwtorm.jdbc.Database; import com.google.inject.AbstractModule; import com.google.inject.Key; import com.google.inject.TypeLiteral; +import com.google.inject.assistedinject.FactoryProvider; import com.google.inject.name.Names; import org.spearce.jgit.lib.Config; @@ -72,5 +74,9 @@ bind(GerritConfig.class).toProvider(GerritConfigProvider.class).in( SINGLETON); bind(PatchSetInfoFactory.class); + + bind(RegisterNewEmailSender.Factory.class).toProvider( + FactoryProvider.newFactory(RegisterNewEmailSender.Factory.class, + RegisterNewEmailSender.class)); } }
diff --git a/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java b/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java index 9c39978..d6c8e87 100644 --- a/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java +++ b/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java
@@ -16,6 +16,8 @@ import com.google.gerrit.server.GerritServer; import com.google.gwtjsonrpc.server.XsrfException; +import com.google.inject.Inject; +import com.google.inject.assistedinject.Assisted; import org.spearce.jgit.util.Base64; @@ -24,11 +26,17 @@ import javax.servlet.http.HttpServletRequest; public class RegisterNewEmailSender extends OutgoingEmail { + + public static interface Factory { + public RegisterNewEmailSender create(String address); + } + private final HttpServletRequest req; private final String addr; + @Inject public RegisterNewEmailSender(final GerritServer gs, final EmailSender sf, - final String address, final HttpServletRequest request) { + @Assisted final String address, final HttpServletRequest request) { super(gs, sf, null, "registernewemail"); addr = address; req = request;