diff --git a/java/google/registry/model/pricing/StaticPremiumListPricingEngine.java b/java/google/registry/model/pricing/StaticPremiumListPricingEngine.java index 18a8bd9e3..e9786e40d 100644 --- a/java/google/registry/model/pricing/StaticPremiumListPricingEngine.java +++ b/java/google/registry/model/pricing/StaticPremiumListPricingEngine.java @@ -34,6 +34,9 @@ import org.joda.time.DateTime; /** A premium list pricing engine that stores static pricing information in Datastore entities. */ public final class StaticPremiumListPricingEngine implements PremiumPricingEngine { + /** The name of the pricing engine, as used in {@code Registry.pricingEngineClassName}. */ + public static final String NAME = "google.registry.model.pricing.StaticPremiumListPricingEngine"; + @Inject StaticPremiumListPricingEngine() {} @Override diff --git a/java/google/registry/model/registry/Registry.java b/java/google/registry/model/registry/Registry.java index faf93bc65..b0e8de742 100644 --- a/java/google/registry/model/registry/Registry.java +++ b/java/google/registry/model/registry/Registry.java @@ -58,7 +58,6 @@ import google.registry.model.common.EntityGroupRoot; import google.registry.model.common.TimedTransitionProperty; import google.registry.model.common.TimedTransitionProperty.TimedTransition; import google.registry.model.domain.fee.EapFee; -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; @@ -252,15 +251,18 @@ public class Registry extends ImmutableObject implements Buildable { @OnLoad void backfillPricingEngine() { if (pricingEngineClassName == null) { - pricingEngineClassName = StaticPremiumListPricingEngine.class.getCanonicalName(); + pricingEngineClassName = StaticPremiumListPricingEngine.NAME; } } /** - * The fully qualified canonical classname of the pricing engine that this TLD uses. + * The name of the pricing engine that this TLD uses. * *
This must be a valid key for the map of pricing engines injected by
- * Note that it used to be the canonical class name, hence the name of this field, but this
+ * restriction has since been relaxed and it may now be any unique string.
*/
String pricingEngineClassName;
@@ -609,10 +611,8 @@ public class Registry extends ImmutableObject implements Buildable {
return this;
}
- public Builder setPremiumPricingEngineClass(
- Class extends PremiumPricingEngine> pricingEngineClass) {
- getInstance().pricingEngineClassName =
- checkArgumentNotNull(pricingEngineClass).getCanonicalName();
+ public Builder setPremiumPricingEngine(String pricingEngineClass) {
+ getInstance().pricingEngineClassName = checkArgumentNotNull(pricingEngineClass);
return this;
}
diff --git a/java/google/registry/pricing/PricingComponent.java b/java/google/registry/pricing/PricingComponent.java
index a57f1e6a2..ef190b485 100644
--- a/java/google/registry/pricing/PricingComponent.java
+++ b/java/google/registry/pricing/PricingComponent.java
@@ -29,5 +29,5 @@ import javax.inject.Singleton;
@Singleton
@Component(modules = {PricingModule.class})
interface PricingComponent {
- Map To add a new pricing engine, create a new class that implements {@link PremiumPricingEngine},
- * and add a module that provides an instance of {@link PremiumPricingEngine} with a
- * {@link PremiumPricingEngineClassKey} annotation with the class of the implementation and also
- * @Inject Map
+ * {@code @Inject Map@Provides @IntoMap
annotations.
+ * and add a module that provides an instance of {@link PremiumPricingEngine} with a unique
+ * {@link StringKey} annotation, and also @Provides @IntoMap
annotations.
*/
@Module
public class PricingModule {
- /** The annotation used for PricingEngine implementation keys. */
- @MapKey
- @interface PremiumPricingEngineClassKey {
- Class extends PremiumPricingEngine> value();
- }
-
@Provides @IntoMap
- @PremiumPricingEngineClassKey(StaticPremiumListPricingEngine.class)
+ @StringKey(StaticPremiumListPricingEngine.NAME)
static PremiumPricingEngine provideStaticPremiumList(StaticPremiumListPricingEngine engine) {
return engine;
}
diff --git a/java/google/registry/tools/CreateOrUpdateTldCommand.java b/java/google/registry/tools/CreateOrUpdateTldCommand.java
index c0788b66f..63018a38c 100644
--- a/java/google/registry/tools/CreateOrUpdateTldCommand.java
+++ b/java/google/registry/tools/CreateOrUpdateTldCommand.java
@@ -252,7 +252,7 @@ abstract class CreateOrUpdateTldCommand extends MutatingCommand {
oldRegistry == null
? new Registry.Builder()
.setTldStr(tld)
- .setPremiumPricingEngineClass(StaticPremiumListPricingEngine.class)
+ .setPremiumPricingEngine(StaticPremiumListPricingEngine.NAME)
: 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 4754f4b28..43ce9fe62 100644
--- a/javatests/google/registry/model/registry/label/PremiumListTest.java
+++ b/javatests/google/registry/model/registry/label/PremiumListTest.java
@@ -70,7 +70,7 @@ public class PremiumListTest {
persistResource(
new Registry.Builder()
.setTldStr("ghost")
- .setPremiumPricingEngineClass(StaticPremiumListPricingEngine.class)
+ .setPremiumPricingEngine(StaticPremiumListPricingEngine.NAME)
.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 bd671098d..5f86e3659 100644
--- a/javatests/google/registry/pricing/PricingEngineProxyTest.java
+++ b/javatests/google/registry/pricing/PricingEngineProxyTest.java
@@ -25,7 +25,6 @@ import static google.registry.util.DateTimeUtils.START_OF_TIME;
import static org.joda.money.CurrencyUnit.USD;
import com.google.common.collect.ImmutableSortedMap;
-import google.registry.model.pricing.PremiumPricingEngine;
import google.registry.model.registry.Registry;
import google.registry.model.registry.label.PremiumList;
import google.registry.testing.AppEngineRule;
@@ -145,14 +144,12 @@ public class PricingEngineProxyTest {
public void testFailure_cantLoadPricingEngine() throws Exception {
createTld("example");
persistResource(
- Registry.get("example").asBuilder().setPremiumPricingEngineClass(FakePricingEngine.class).build());
+ Registry.get("example")
+ .asBuilder()
+ .setPremiumPricingEngine("fake")
+ .build());
thrown.expect(
- IllegalStateException.class,
- String.format(
- "Could not load pricing engine %s for TLD example",
- FakePricingEngine.class.getCanonicalName()));
+ IllegalStateException.class, "Could not load pricing engine fake for TLD example");
getDomainCreateCost("bad.example", clock.nowUtc(), 1);
}
-
- private abstract static class FakePricingEngine implements PremiumPricingEngine {}
}
diff --git a/javatests/google/registry/testing/DatastoreHelper.java b/javatests/google/registry/testing/DatastoreHelper.java
index be50b90d9..fa00e5a25 100644
--- a/javatests/google/registry/testing/DatastoreHelper.java
+++ b/javatests/google/registry/testing/DatastoreHelper.java
@@ -233,7 +233,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()))
- .setPremiumPricingEngineClass(StaticPremiumListPricingEngine.class)
+ .setPremiumPricingEngine(StaticPremiumListPricingEngine.NAME)
.build();
}