From 0d47534246291b429ddb17fad5af22421a26da45 Mon Sep 17 00:00:00 2001 From: cgoldfeder Date: Tue, 21 Jun 2016 12:09:21 -0700 Subject: [PATCH] Inject flows with a nested ternary rather than a map This is more efficient (we were constructing all the providers and the map anew for every flow) and prettier. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=125479328 --- java/google/registry/flows/FlowComponent.java | 132 ++++++++++++++++- java/google/registry/flows/FlowModule.java | 134 ------------------ 2 files changed, 131 insertions(+), 135 deletions(-) diff --git a/java/google/registry/flows/FlowComponent.java b/java/google/registry/flows/FlowComponent.java index 0f1545f32..2961c0b3c 100644 --- a/java/google/registry/flows/FlowComponent.java +++ b/java/google/registry/flows/FlowComponent.java @@ -14,22 +14,152 @@ package google.registry.flows; +import dagger.Module; +import dagger.Provides; import dagger.Subcomponent; +import google.registry.flows.contact.ContactCheckFlow; +import google.registry.flows.contact.ContactCreateFlow; +import google.registry.flows.contact.ContactDeleteFlow; +import google.registry.flows.contact.ContactInfoFlow; +import google.registry.flows.contact.ContactTransferApproveFlow; +import google.registry.flows.contact.ContactTransferCancelFlow; +import google.registry.flows.contact.ContactTransferQueryFlow; +import google.registry.flows.contact.ContactTransferRejectFlow; +import google.registry.flows.contact.ContactTransferRequestFlow; +import google.registry.flows.contact.ContactUpdateFlow; +import google.registry.flows.domain.ClaimsCheckFlow; +import google.registry.flows.domain.DomainAllocateFlow; +import google.registry.flows.domain.DomainApplicationCreateFlow; +import google.registry.flows.domain.DomainApplicationDeleteFlow; +import google.registry.flows.domain.DomainApplicationInfoFlow; +import google.registry.flows.domain.DomainApplicationUpdateFlow; +import google.registry.flows.domain.DomainCheckFlow; +import google.registry.flows.domain.DomainCreateFlow; +import google.registry.flows.domain.DomainDeleteFlow; +import google.registry.flows.domain.DomainInfoFlow; +import google.registry.flows.domain.DomainRenewFlow; +import google.registry.flows.domain.DomainRestoreRequestFlow; +import google.registry.flows.domain.DomainTransferApproveFlow; +import google.registry.flows.domain.DomainTransferCancelFlow; +import google.registry.flows.domain.DomainTransferQueryFlow; +import google.registry.flows.domain.DomainTransferRejectFlow; +import google.registry.flows.domain.DomainTransferRequestFlow; +import google.registry.flows.domain.DomainUpdateFlow; +import google.registry.flows.host.HostCheckFlow; +import google.registry.flows.host.HostCreateFlow; +import google.registry.flows.host.HostDeleteFlow; +import google.registry.flows.host.HostInfoFlow; +import google.registry.flows.host.HostUpdateFlow; +import google.registry.flows.poll.PollAckFlow; +import google.registry.flows.poll.PollRequestFlow; +import google.registry.flows.session.HelloFlow; +import google.registry.flows.session.LoginFlow; +import google.registry.flows.session.LogoutFlow; import google.registry.model.eppcommon.Trid; /** Dagger component for flow classes. */ @FlowScope -@Subcomponent(modules = FlowModule.class) +@Subcomponent(modules = { + FlowModule.class, + FlowComponent.FlowComponentModule.class}) public interface FlowComponent { Trid trid(); FlowRunner flowRunner(); + // Flows must be added here and in FlowComponentModule below. + ContactCheckFlow contactCheckFlow(); + ContactCreateFlow contactCreateFlow(); + ContactDeleteFlow contactDeleteFlow(); + ContactInfoFlow contactInfoFlow(); + ContactTransferApproveFlow contactTransferApproveFlow(); + ContactTransferCancelFlow contactTransferCancelFlow(); + ContactTransferQueryFlow contactTransferQueryFlow(); + ContactTransferRejectFlow contactTransferRejectFlow(); + ContactTransferRequestFlow contactTransferRequestFlow(); + ContactUpdateFlow contactUpdateFlow(); + ClaimsCheckFlow claimsCheckFlow(); + DomainAllocateFlow domainAllocateFlow(); + DomainApplicationCreateFlow domainApplicationCreateFlow(); + DomainApplicationDeleteFlow domainApplicationDeleteFlow(); + DomainApplicationInfoFlow domainApplicationInfoFlow(); + DomainApplicationUpdateFlow domainApplicationUpdateFlow(); + DomainCheckFlow domainCheckFlow(); + DomainCreateFlow domainCreateFlow(); + DomainDeleteFlow domainDeleteFlow(); + DomainInfoFlow domainInfoFlow(); + DomainRenewFlow domainRenewFlow(); + DomainRestoreRequestFlow domainRestoreRequestFlow(); + DomainTransferApproveFlow domainTransferApproveFlow(); + DomainTransferCancelFlow domainTransferCancelFlow(); + DomainTransferQueryFlow domainTransferQueryFlow(); + DomainTransferRejectFlow domainTransferRejectFlow(); + DomainTransferRequestFlow domainTransferRequestFlow(); + DomainUpdateFlow domainUpdateFlow(); + HostCheckFlow hostCheckFlow(); + HostCreateFlow hostCreateFlow(); + HostDeleteFlow hostDeleteFlow(); + HostInfoFlow hostInfoFlow(); + HostUpdateFlow hostUpdateFlow(); + PollAckFlow pollAckFlow(); + PollRequestFlow pollRequestFlow(); + HelloFlow helloFlow(); + LoginFlow loginFlow(); + LogoutFlow logoutFlow(); + /** Dagger-implemented builder for this subcomponent. */ @Subcomponent.Builder interface Builder { Builder flowModule(FlowModule flowModule); FlowComponent build(); } + + /** Module to delegate injection of a desired {@link Flow}. */ + @Module + static class FlowComponentModule { + @Provides + @FlowScope + static Flow provideFlow(FlowComponent flows, Class clazz) { + return clazz.equals(ContactCheckFlow.class) ? flows.contactCheckFlow() + : clazz.equals(ContactCreateFlow.class) ? flows.contactCreateFlow() + : clazz.equals(ContactDeleteFlow.class) ? flows.contactDeleteFlow() + : clazz.equals(ContactInfoFlow.class) ? flows.contactInfoFlow() + : clazz.equals(ContactTransferApproveFlow.class) ? flows.contactTransferApproveFlow() + : clazz.equals(ContactTransferCancelFlow.class) ? flows.contactTransferCancelFlow() + : clazz.equals(ContactTransferQueryFlow.class) ? flows.contactTransferQueryFlow() + : clazz.equals(ContactTransferRejectFlow.class) ? flows.contactTransferRejectFlow() + : clazz.equals(ContactTransferRequestFlow.class) ? flows.contactTransferRequestFlow() + : clazz.equals(ContactUpdateFlow.class) ? flows.contactUpdateFlow() + : clazz.equals(ClaimsCheckFlow.class) ? flows.claimsCheckFlow() + : clazz.equals(DomainAllocateFlow.class) ? flows.domainAllocateFlow() + : clazz.equals(DomainApplicationCreateFlow.class) ? flows.domainApplicationCreateFlow() + : clazz.equals(DomainApplicationDeleteFlow.class) ? flows.domainApplicationDeleteFlow() + : clazz.equals(DomainApplicationInfoFlow.class) ? flows.domainApplicationInfoFlow() + : clazz.equals(DomainApplicationUpdateFlow.class) ? flows.domainApplicationUpdateFlow() + : clazz.equals(DomainCheckFlow.class) ? flows.domainCheckFlow() + : clazz.equals(DomainCreateFlow.class) ? flows.domainCreateFlow() + : clazz.equals(DomainDeleteFlow.class) ? flows.domainDeleteFlow() + : clazz.equals(DomainInfoFlow.class) ? flows.domainInfoFlow() + : clazz.equals(DomainRenewFlow.class) ? flows.domainRenewFlow() + : clazz.equals(DomainRestoreRequestFlow.class) ? flows.domainRestoreRequestFlow() + : clazz.equals(DomainTransferApproveFlow.class) ? flows.domainTransferApproveFlow() + : clazz.equals(DomainTransferCancelFlow.class) ? flows.domainTransferCancelFlow() + : clazz.equals(DomainTransferQueryFlow.class) ? flows.domainTransferQueryFlow() + : clazz.equals(DomainTransferRejectFlow.class) ? flows.domainTransferRejectFlow() + : clazz.equals(DomainTransferRequestFlow.class) ? flows.domainTransferRequestFlow() + : clazz.equals(DomainUpdateFlow.class) ? flows.domainUpdateFlow() + : clazz.equals(HostCheckFlow.class) ? flows.hostCheckFlow() + : clazz.equals(HostCreateFlow.class) ? flows.hostCreateFlow() + : clazz.equals(HostDeleteFlow.class) ? flows.hostDeleteFlow() + : clazz.equals(HostInfoFlow.class) ? flows.hostInfoFlow() + : clazz.equals(HostUpdateFlow.class) ? flows.hostUpdateFlow() + : clazz.equals(PollAckFlow.class) ? flows.pollAckFlow() + : clazz.equals(PollRequestFlow.class) ? flows.pollRequestFlow() + : clazz.equals(HelloFlow.class) ? flows.helloFlow() + : clazz.equals(LoginFlow.class) ? flows.loginFlow() + : clazz.equals(LogoutFlow.class) ? flows.logoutFlow() + : null; + } + } } diff --git a/java/google/registry/flows/FlowModule.java b/java/google/registry/flows/FlowModule.java index fdc6fa7b0..878b4c257 100644 --- a/java/google/registry/flows/FlowModule.java +++ b/java/google/registry/flows/FlowModule.java @@ -16,58 +16,16 @@ package google.registry.flows; import static com.google.common.base.Preconditions.checkState; -import com.google.common.collect.ImmutableMap; - import dagger.Module; import dagger.Provides; -import google.registry.flows.contact.ContactCheckFlow; -import google.registry.flows.contact.ContactCreateFlow; -import google.registry.flows.contact.ContactDeleteFlow; -import google.registry.flows.contact.ContactInfoFlow; -import google.registry.flows.contact.ContactTransferApproveFlow; -import google.registry.flows.contact.ContactTransferCancelFlow; -import google.registry.flows.contact.ContactTransferQueryFlow; -import google.registry.flows.contact.ContactTransferRejectFlow; -import google.registry.flows.contact.ContactTransferRequestFlow; -import google.registry.flows.contact.ContactUpdateFlow; -import google.registry.flows.domain.ClaimsCheckFlow; -import google.registry.flows.domain.DomainAllocateFlow; -import google.registry.flows.domain.DomainApplicationCreateFlow; -import google.registry.flows.domain.DomainApplicationDeleteFlow; -import google.registry.flows.domain.DomainApplicationInfoFlow; -import google.registry.flows.domain.DomainApplicationUpdateFlow; -import google.registry.flows.domain.DomainCheckFlow; -import google.registry.flows.domain.DomainCreateFlow; -import google.registry.flows.domain.DomainDeleteFlow; -import google.registry.flows.domain.DomainInfoFlow; -import google.registry.flows.domain.DomainRenewFlow; -import google.registry.flows.domain.DomainRestoreRequestFlow; -import google.registry.flows.domain.DomainTransferApproveFlow; -import google.registry.flows.domain.DomainTransferCancelFlow; -import google.registry.flows.domain.DomainTransferQueryFlow; -import google.registry.flows.domain.DomainTransferRejectFlow; -import google.registry.flows.domain.DomainTransferRequestFlow; -import google.registry.flows.domain.DomainUpdateFlow; -import google.registry.flows.host.HostCheckFlow; -import google.registry.flows.host.HostCreateFlow; -import google.registry.flows.host.HostDeleteFlow; -import google.registry.flows.host.HostInfoFlow; -import google.registry.flows.host.HostUpdateFlow; import google.registry.flows.picker.FlowPicker; -import google.registry.flows.poll.PollAckFlow; -import google.registry.flows.poll.PollRequestFlow; -import google.registry.flows.session.HelloFlow; -import google.registry.flows.session.LoginFlow; -import google.registry.flows.session.LogoutFlow; import google.registry.model.eppcommon.Trid; import google.registry.model.eppinput.EppInput; import java.lang.annotation.Documented; -import java.util.Map; import javax.annotation.Nullable; -import javax.inject.Provider; import javax.inject.Qualifier; /** Module to choose and instantiate an EPP flow. */ @@ -199,90 +157,6 @@ public class FlowModule { return Trid.create(eppInput.getCommandWrapper().getClTrid()); } - /** Provides a mapping between flow classes and injected providers. */ - @Provides - @FlowScope - static Map, Provider> provideFlowClassMap( - Provider contactCheckFlowProvider, - Provider contactCreateFlowProvider, - Provider contactDeleteFlowProvider, - Provider contactInfoFlowProvider, - Provider contactTransferApproveFlowProvider, - Provider contactTransferCancelFlowProvider, - Provider contactTransferQueryFlowProvider, - Provider contactTransferRejectFlowProvider, - Provider contactTransferRequestFlowProvider, - Provider contactUpdateFlowProvider, - Provider claimsCheckFlowProvider, - Provider domainAllocateFlowProvider, - Provider domainApplicationCreateFlowProvider, - Provider domainApplicationDeleteFlowProvider, - Provider domainApplicationInfoFlowProvider, - Provider domainApplicationUpdateFlowProvider, - Provider domainCheckFlowProvider, - Provider domainCreateFlowProvider, - Provider domainDeleteFlowProvider, - Provider domainInfoFlowProvider, - Provider domainRenewFlowProvider, - Provider domainRestoreRequestFlowProvider, - Provider domainTransferApproveFlowProvider, - Provider domainTransferCancelFlowProvider, - Provider domainTransferQueryFlowProvider, - Provider domainTransferRejectFlowProvider, - Provider domainTransferRequestFlowProvider, - Provider domainUpdateFlowProvider, - Provider hostCheckFlowProvider, - Provider hostCreateFlowProvider, - Provider hostDeleteFlowProvider, - Provider hostInfoFlowProvider, - Provider hostUpdateFlowProvider, - Provider pollAckFlowProvider, - Provider pollRequestFlowProvider, - Provider helloFlowProvider, - Provider loginFlowProvider, - Provider logoutFlowProvider) { - return new ImmutableMap.Builder, Provider>() - .put(ContactCheckFlow.class, contactCheckFlowProvider) - .put(ContactCreateFlow.class, contactCreateFlowProvider) - .put(ContactDeleteFlow.class, contactDeleteFlowProvider) - .put(ContactInfoFlow.class, contactInfoFlowProvider) - .put(ContactTransferApproveFlow.class, contactTransferApproveFlowProvider) - .put(ContactTransferCancelFlow.class, contactTransferCancelFlowProvider) - .put(ContactTransferQueryFlow.class, contactTransferQueryFlowProvider) - .put(ContactTransferRejectFlow.class, contactTransferRejectFlowProvider) - .put(ContactTransferRequestFlow.class, contactTransferRequestFlowProvider) - .put(ContactUpdateFlow.class, contactUpdateFlowProvider) - .put(ClaimsCheckFlow.class, claimsCheckFlowProvider) - .put(DomainAllocateFlow.class, domainAllocateFlowProvider) - .put(DomainApplicationCreateFlow.class, domainApplicationCreateFlowProvider) - .put(DomainApplicationDeleteFlow.class, domainApplicationDeleteFlowProvider) - .put(DomainApplicationInfoFlow.class, domainApplicationInfoFlowProvider) - .put(DomainApplicationUpdateFlow.class, domainApplicationUpdateFlowProvider) - .put(DomainCheckFlow.class, domainCheckFlowProvider) - .put(DomainCreateFlow.class, domainCreateFlowProvider) - .put(DomainDeleteFlow.class, domainDeleteFlowProvider) - .put(DomainInfoFlow.class, domainInfoFlowProvider) - .put(DomainRenewFlow.class, domainRenewFlowProvider) - .put(DomainRestoreRequestFlow.class, domainRestoreRequestFlowProvider) - .put(DomainTransferApproveFlow.class, domainTransferApproveFlowProvider) - .put(DomainTransferCancelFlow.class, domainTransferCancelFlowProvider) - .put(DomainTransferQueryFlow.class, domainTransferQueryFlowProvider) - .put(DomainTransferRejectFlow.class, domainTransferRejectFlowProvider) - .put(DomainTransferRequestFlow.class, domainTransferRequestFlowProvider) - .put(DomainUpdateFlow.class, domainUpdateFlowProvider) - .put(HostCheckFlow.class, hostCheckFlowProvider) - .put(HostCreateFlow.class, hostCreateFlowProvider) - .put(HostDeleteFlow.class, hostDeleteFlowProvider) - .put(HostInfoFlow.class, hostInfoFlowProvider) - .put(HostUpdateFlow.class, hostUpdateFlowProvider) - .put(PollAckFlow.class, pollAckFlowProvider) - .put(PollRequestFlow.class, pollRequestFlowProvider) - .put(HelloFlow.class, helloFlowProvider) - .put(LoginFlow.class, loginFlowProvider) - .put(LogoutFlow.class, logoutFlowProvider) - .build(); - } - @Provides @FlowScope static Class provideFlowClass(EppInput eppInput) { @@ -293,14 +167,6 @@ public class FlowModule { } } - @Provides - @FlowScope - static Flow provideFlow( - Map, Provider> flowProviders, - Class flowClass) { - return flowProviders.get(flowClass).get(); - } - /** Wrapper class to carry an {@link EppException} to the calling code. */ static class EppExceptionInProviderException extends RuntimeException { EppExceptionInProviderException(EppException exception) {