From 6ba1d5e6dfd85ea1ba5ff1387ce344acb1f7e0a4 Mon Sep 17 00:00:00 2001 From: Ben McIlwain Date: Fri, 10 Jun 2016 07:10:59 -0700 Subject: [PATCH] Rename PricingEngine to PremiumPricingEngine This properly reflects the fact that other, separate things will now be responsible both for EAP and for per-TLD custom pricing. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=124558165 --- .../flows/domain/DomainFlowUtils.java | 2 +- ...gEngine.java => PremiumPricingEngine.java} | 25 +++++++----------- .../StaticPremiumListPricingEngine.java | 3 +-- .../registry/model/registry/Registry.java | 7 ++--- .../registry/pricing/PricingComponent.java | 4 +-- .../registry/pricing/PricingEngineProxy.java | 26 +++++++++---------- .../registry/pricing/PricingModule.java | 18 ++++++------- .../tools/CreateOrUpdateTldCommand.java | 2 +- .../model/registry/label/PremiumListTest.java | 2 +- .../pricing/PricingEngineProxyTest.java | 6 ++--- .../registry/testing/DatastoreHelper.java | 2 +- 11 files changed, 45 insertions(+), 52 deletions(-) rename java/google/registry/model/pricing/{PricingEngine.java => PremiumPricingEngine.java} (79%) diff --git a/java/google/registry/flows/domain/DomainFlowUtils.java b/java/google/registry/flows/domain/DomainFlowUtils.java index 7709321cf..7b0aab7e7 100644 --- a/java/google/registry/flows/domain/DomainFlowUtils.java +++ b/java/google/registry/flows/domain/DomainFlowUtils.java @@ -79,7 +79,7 @@ import google.registry.model.mark.Mark; import google.registry.model.mark.ProtectedMark; import google.registry.model.mark.Trademark; import google.registry.model.poll.PollMessage; -import google.registry.model.pricing.PricingEngine.DomainPrices; +import google.registry.model.pricing.PremiumPricingEngine.DomainPrices; import google.registry.model.registrar.Registrar; import google.registry.model.registry.Registry; import google.registry.model.registry.Registry.TldState; diff --git a/java/google/registry/model/pricing/PricingEngine.java b/java/google/registry/model/pricing/PremiumPricingEngine.java similarity index 79% rename from java/google/registry/model/pricing/PricingEngine.java rename to java/google/registry/model/pricing/PremiumPricingEngine.java index 3524f72e9..1bd2c683f 100644 --- a/java/google/registry/model/pricing/PricingEngine.java +++ b/java/google/registry/model/pricing/PremiumPricingEngine.java @@ -19,8 +19,13 @@ import com.google.common.base.Optional; import org.joda.money.Money; import org.joda.time.DateTime; -/** A plugin interface for premium pricing engines. */ -public interface PricingEngine { +/** + * A plugin interface for premium pricing engines. + * + *

A premium pricing engine is responsible solely for determining whether a given label is + * premium or not, and if it is, how much it should cost. + */ +public interface PremiumPricingEngine { /** * Returns the prices for the given fully qualified domain name at the given time. @@ -31,9 +36,9 @@ public interface PricingEngine { public DomainPrices getDomainPrices(String fullyQualifiedDomainName, DateTime priceTime); /** - * A class containing information on prices for a specific domain name. + * A class containing information on premium prices for a specific domain name. * - *

Any implementation of PricingEngine is responsible for determining all of these. + *

Any implementation of PremiumPricingEngine is responsible for determining all of these. */ public static class DomainPrices { @@ -42,20 +47,17 @@ public interface PricingEngine { // create, renew, restore, and transfer. private Money createCost; private Money renewCost; - private Optional oneTimeFee; private Optional feeClass; static DomainPrices create( boolean isPremium, Money createCost, Money renewCost, - Optional oneTimeFee, Optional feeClass) { DomainPrices instance = new DomainPrices(); instance.isPremium = isPremium; instance.createCost = createCost; instance.renewCost = renewCost; - instance.oneTimeFee = oneTimeFee; instance.feeClass = feeClass; return instance; } @@ -75,15 +77,6 @@ public interface PricingEngine { return renewCost; } - /** - * Returns the one time fee to register a domain if there is one. - * - *

This is primarily used for EAP registration fees. - */ - public Optional getOneTimeFee() { - return oneTimeFee; - } - /** Returns the fee class of the cost (used for the Fee extension). */ public Optional getFeeClass() { return feeClass; diff --git a/java/google/registry/model/pricing/StaticPremiumListPricingEngine.java b/java/google/registry/model/pricing/StaticPremiumListPricingEngine.java index 389f95bd5..2c800dc2b 100644 --- a/java/google/registry/model/pricing/StaticPremiumListPricingEngine.java +++ b/java/google/registry/model/pricing/StaticPremiumListPricingEngine.java @@ -35,7 +35,7 @@ import org.joda.time.DateTime; import javax.inject.Inject; /** A premium list pricing engine that stores static pricing information in Datastore entities. */ -public final class StaticPremiumListPricingEngine implements PricingEngine { +public final class StaticPremiumListPricingEngine implements PremiumPricingEngine { @Inject StaticPremiumListPricingEngine() {} @@ -61,7 +61,6 @@ public final class StaticPremiumListPricingEngine implements PricingEngine { premiumPrice.isPresent(), premiumPrice.or(registry.getStandardCreateCost()), premiumPrice.or(registry.getStandardRenewCost(priceTime)), - Optional.absent(), Optional.fromNullable(feeClass)); } } diff --git a/java/google/registry/model/registry/Registry.java b/java/google/registry/model/registry/Registry.java index 6644a852a..98cb50e85 100644 --- a/java/google/registry/model/registry/Registry.java +++ b/java/google/registry/model/registry/Registry.java @@ -57,7 +57,7 @@ import google.registry.model.ImmutableObject; import google.registry.model.common.EntityGroupRoot; import google.registry.model.common.TimedTransitionProperty; import google.registry.model.common.TimedTransitionProperty.TimedTransition; -import google.registry.model.pricing.PricingEngine; +import google.registry.model.pricing.PremiumPricingEngine; import google.registry.model.pricing.StaticPremiumListPricingEngine; import google.registry.model.registry.label.PremiumList; import google.registry.model.registry.label.ReservedList; @@ -533,7 +533,7 @@ public class Registry extends ImmutableObject implements Buildable { return claimsPeriodEnd; } - public String getPricingEngineClassName() { + public String getPremiumPricingEngineClassName() { return pricingEngineClassName; } @@ -603,7 +603,8 @@ public class Registry extends ImmutableObject implements Buildable { return this; } - public Builder setPricingEngineClass(Class pricingEngineClass) { + public Builder setPremiumPricingEngineClass( + Class pricingEngineClass) { getInstance().pricingEngineClassName = checkArgumentNotNull(pricingEngineClass).getCanonicalName(); return this; diff --git a/java/google/registry/pricing/PricingComponent.java b/java/google/registry/pricing/PricingComponent.java index c716d371d..bdf72e0cb 100644 --- a/java/google/registry/pricing/PricingComponent.java +++ b/java/google/registry/pricing/PricingComponent.java @@ -16,7 +16,7 @@ package google.registry.pricing; import dagger.Component; -import google.registry.model.pricing.PricingEngine; +import google.registry.model.pricing.PremiumPricingEngine; import java.util.Map; @@ -32,5 +32,5 @@ import javax.inject.Singleton; @Singleton @Component(modules = {PricingModule.class}) interface PricingComponent { - Map, PricingEngine> pricingEngines(); + Map, PremiumPricingEngine> premiumPricingEngines(); } diff --git a/java/google/registry/pricing/PricingEngineProxy.java b/java/google/registry/pricing/PricingEngineProxy.java index 0ef044c6b..02cb46573 100644 --- a/java/google/registry/pricing/PricingEngineProxy.java +++ b/java/google/registry/pricing/PricingEngineProxy.java @@ -22,8 +22,8 @@ import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; -import google.registry.model.pricing.PricingEngine; -import google.registry.model.pricing.PricingEngine.DomainPrices; +import google.registry.model.pricing.PremiumPricingEngine; +import google.registry.model.pricing.PremiumPricingEngine.DomainPrices; import google.registry.model.registry.Registry; import org.joda.money.Money; @@ -33,22 +33,22 @@ import java.util.Map; /** * A global proxy providing static methods for getting premium prices that dispatches requests - * correctly to the relevant {@link PricingEngine} implementation per TLD. + * correctly to the relevant {@link PremiumPricingEngine} implementation per TLD. */ public final class PricingEngineProxy { - private static final Map, PricingEngine> pricingEngineClasses = - DaggerPricingComponent.create().pricingEngines(); + private static final Map, PremiumPricingEngine> + premiumPricingEngineClasses = DaggerPricingComponent.create().premiumPricingEngines(); // Dagger map keys have to be provided with constant values that are known at compile time, so it // can't be done using clazz.getCanonicalName(). So we construct the map by canonical name here, // at runtime. - private static final ImmutableMap pricingEngines = + private static final ImmutableMap premiumPricingEngines = Maps.uniqueIndex( - pricingEngineClasses.values(), - new Function() { + premiumPricingEngineClasses.values(), + new Function() { @Override - public String apply(PricingEngine pricingEngine) { + public String apply(PremiumPricingEngine pricingEngine) { return pricingEngine.getClass().getCanonicalName(); }}); @@ -66,13 +66,13 @@ public final class PricingEngineProxy { /** * Returns the full {@link DomainPrices} details for the given domain name by dispatching to the - * appropriate {@link PricingEngine} based on what is configured for the TLD that the domain is - * under. + * appropriate {@link PremiumPricingEngine} based on what is configured for the TLD that the + * domain is under. */ public static DomainPrices getPricesForDomainName(String domainName, DateTime priceTime) { String tld = getTldFromDomainName(domainName); - String clazz = Registry.get(tld).getPricingEngineClassName(); - PricingEngine engine = pricingEngines.get(clazz); + String clazz = Registry.get(tld).getPremiumPricingEngineClassName(); + PremiumPricingEngine engine = premiumPricingEngines.get(clazz); checkState(engine != null, "Could not load pricing engine %s for TLD %s", clazz, tld); return engine.getDomainPrices(domainName, priceTime); } diff --git a/java/google/registry/pricing/PricingModule.java b/java/google/registry/pricing/PricingModule.java index ed6e07fad..0310b7ec1 100644 --- a/java/google/registry/pricing/PricingModule.java +++ b/java/google/registry/pricing/PricingModule.java @@ -19,29 +19,29 @@ import dagger.Module; import dagger.Provides; import dagger.multibindings.IntoMap; -import google.registry.model.pricing.PricingEngine; +import google.registry.model.pricing.PremiumPricingEngine; import google.registry.model.pricing.StaticPremiumListPricingEngine; /** * Dagger module for injecting pricing engines. * - *

To add a new pricing engine, create a new class that implements {@link PricingEngine}, and add - * a module that provides an instance of PricingEngine with a PricingEngineClassKey - * annotation with the class of the implementation and also @Provides @IntoMap - * annotations. + *

To add a new pricing engine, create a new class that implements {@link PremiumPricingEngine}, + * and add a module that provides an instance of PricingEngine with a + * PricingEngineClassKey annotation with the class of the implementation and also + * @Provides @IntoMap annotations. */ @Module public class PricingModule { /** The annotation used for PricingEngine implementation keys. */ @MapKey - @interface PricingEngineClassKey { - Class value(); + @interface PremiumPricingEngineClassKey { + Class value(); } @Provides @IntoMap - @PricingEngineClassKey(StaticPremiumListPricingEngine.class) - static PricingEngine provideStaticPremiumList(StaticPremiumListPricingEngine engine) { + @PremiumPricingEngineClassKey(StaticPremiumListPricingEngine.class) + static PremiumPricingEngine provideStaticPremiumList(StaticPremiumListPricingEngine engine) { return engine; } } diff --git a/java/google/registry/tools/CreateOrUpdateTldCommand.java b/java/google/registry/tools/CreateOrUpdateTldCommand.java index edf59e060..cfcabdc43 100644 --- a/java/google/registry/tools/CreateOrUpdateTldCommand.java +++ b/java/google/registry/tools/CreateOrUpdateTldCommand.java @@ -245,7 +245,7 @@ abstract class CreateOrUpdateTldCommand extends MutatingCommand { oldRegistry == null ? new Registry.Builder() .setTldStr(tld) - .setPricingEngineClass(StaticPremiumListPricingEngine.class) + .setPremiumPricingEngineClass(StaticPremiumListPricingEngine.class) : oldRegistry.asBuilder(); if (escrow != null) { diff --git a/javatests/google/registry/model/registry/label/PremiumListTest.java b/javatests/google/registry/model/registry/label/PremiumListTest.java index 6e4e4e92c..a84f5037f 100644 --- a/javatests/google/registry/model/registry/label/PremiumListTest.java +++ b/javatests/google/registry/model/registry/label/PremiumListTest.java @@ -74,7 +74,7 @@ public class PremiumListTest { persistResource( new Registry.Builder() .setTldStr("ghost") - .setPricingEngineClass(StaticPremiumListPricingEngine.class) + .setPremiumPricingEngineClass(StaticPremiumListPricingEngine.class) .build()); assertThat(Registry.get("ghost").getPremiumList()).isNull(); assertThat(getPremiumPrice("blah", "ghost")).isAbsent(); diff --git a/javatests/google/registry/pricing/PricingEngineProxyTest.java b/javatests/google/registry/pricing/PricingEngineProxyTest.java index caa68edc3..d23915cca 100644 --- a/javatests/google/registry/pricing/PricingEngineProxyTest.java +++ b/javatests/google/registry/pricing/PricingEngineProxyTest.java @@ -26,7 +26,7 @@ import static org.joda.money.CurrencyUnit.USD; import com.google.common.collect.ImmutableSortedMap; -import google.registry.model.pricing.PricingEngine; +import google.registry.model.pricing.PremiumPricingEngine; import google.registry.model.registry.Registry; import google.registry.model.registry.label.PremiumList; import google.registry.testing.AppEngineRule; @@ -147,7 +147,7 @@ public class PricingEngineProxyTest { public void testFailure_cantLoadPricingEngine() throws Exception { createTld("example"); persistResource( - Registry.get("example").asBuilder().setPricingEngineClass(FakePricingEngine.class).build()); + Registry.get("example").asBuilder().setPremiumPricingEngineClass(FakePricingEngine.class).build()); thrown.expect( IllegalStateException.class, String.format( @@ -156,5 +156,5 @@ public class PricingEngineProxyTest { getDomainCreateCost("bad.example", clock.nowUtc(), 1); } - private abstract static class FakePricingEngine implements PricingEngine {} + private abstract static class FakePricingEngine implements PremiumPricingEngine {} } diff --git a/javatests/google/registry/testing/DatastoreHelper.java b/javatests/google/registry/testing/DatastoreHelper.java index e2214f7ba..fc3b037af 100644 --- a/javatests/google/registry/testing/DatastoreHelper.java +++ b/javatests/google/registry/testing/DatastoreHelper.java @@ -235,7 +235,7 @@ public class DatastoreHelper { .setServerStatusChangeBillingCost(Money.of(USD, 19)) // Always set a default premium list. Tests that don't want it can delete it. .setPremiumList(persistPremiumList(tld, DEFAULT_PREMIUM_LIST_CONTENTS.get())) - .setPricingEngineClass(StaticPremiumListPricingEngine.class) + .setPremiumPricingEngineClass(StaticPremiumListPricingEngine.class) .build(); }