diff --git a/java/google/registry/model/EppResourceUtils.java b/java/google/registry/model/EppResourceUtils.java index 65a5a891e..24a8cf477 100644 --- a/java/google/registry/model/EppResourceUtils.java +++ b/java/google/registry/model/EppResourceUtils.java @@ -347,10 +347,12 @@ public final class EppResourceUtils { public static List> queryDomainsUsingResource( Class clazz, Key key, DateTime now, int limit) { checkArgument(ContactResource.class.equals(clazz) || HostResource.class.equals(clazz)); - return ofy() - .load() - .type(DomainBase.class) - .filter(clazz.equals(ContactResource.class) ? "allContacts.contact" : "nsHosts", key) + return ofy().load().type(DomainBase.class) + .filter( + clazz.equals(ContactResource.class) + ? "allContacts.contactId.linked" + : "nameservers.linked", + key) .filter("deletionTime >", now) .limit(limit) .keys() diff --git a/java/google/registry/model/domain/DesignatedContact.java b/java/google/registry/model/domain/DesignatedContact.java index 96c3e8003..0712f42cf 100644 --- a/java/google/registry/model/domain/DesignatedContact.java +++ b/java/google/registry/model/domain/DesignatedContact.java @@ -72,6 +72,6 @@ public class DesignatedContact extends ImmutableObject { } public Key getContactKey() { - return contact; + return contactId.getLinked(); } } diff --git a/java/google/registry/model/domain/DomainBase.java b/java/google/registry/model/domain/DomainBase.java index 987618974..9c37eebda 100644 --- a/java/google/registry/model/domain/DomainBase.java +++ b/java/google/registry/model/domain/DomainBase.java @@ -183,7 +183,11 @@ public abstract class DomainBase extends EppResource { } public ImmutableSet> getNameservers() { - return nullToEmptyImmutableCopy(nsHosts); + ImmutableSet.Builder> builder = new ImmutableSet.Builder<>(); + for (ReferenceUnion union : nullToEmptyImmutableCopy(nameservers)) { + builder.add(union.getLinked()); + } + return builder.build(); } /** Loads and returns the fully qualified host names of all linked nameservers. */ @@ -238,13 +242,13 @@ public abstract class DomainBase extends EppResource { @OnSave void dualSaveReferenceUnions() { for (DesignatedContact contact : nullToEmptyImmutableCopy(allContacts)) { - contact.contactId = ReferenceUnion.create(contact.contact); + contact.contact = contact.contactId.getLinked(); } - ImmutableSet.Builder> hosts = new ImmutableSet.Builder<>(); - for (Key hostKey : nullToEmptyImmutableCopy(nsHosts)) { - hosts.add(ReferenceUnion.create(hostKey)); + ImmutableSet.Builder> hostKeys = new ImmutableSet.Builder<>(); + for (ReferenceUnion refUnion : nullToEmptyImmutableCopy(nameservers)) { + hostKeys.add(refUnion.getLinked()); } - nameservers = hosts.build(); + nsHosts = hostKeys.build(); } /** Predicate to determine if a given {@link DesignatedContact} is the registrant. */ @@ -303,7 +307,11 @@ public abstract class DomainBase extends EppResource { } public B setNameservers(ImmutableSet> nameservers) { - getInstance().nsHosts = nameservers; + ImmutableSet.Builder> builder = new ImmutableSet.Builder<>(); + for (Key key : nullToEmpty(nameservers)) { + builder.add(ReferenceUnion.create(key)); + } + getInstance().nameservers = builder.build(); return thisCastToDerived(); } diff --git a/java/google/registry/rdap/RdapDomainSearchAction.java b/java/google/registry/rdap/RdapDomainSearchAction.java index fb8912c38..15b2144bd 100644 --- a/java/google/registry/rdap/RdapDomainSearchAction.java +++ b/java/google/registry/rdap/RdapDomainSearchAction.java @@ -269,7 +269,7 @@ public class RdapDomainSearchAction extends RdapActionBase { for (List> chunk : Iterables.partition(hostKeys, 30)) { for (DomainResource domain : ofy().load() .type(DomainResource.class) - .filter("nsHosts in", chunk) + .filter("nameservers.linked in", chunk) .filter("deletionTime >", now) .limit(rdapResultSetMaxSize + 1)) { if (!domains.contains(domain)) { diff --git a/javatests/google/registry/model/domain/DomainApplicationTest.java b/javatests/google/registry/model/domain/DomainApplicationTest.java index cbe4d2c0c..c76997ff2 100644 --- a/javatests/google/registry/model/domain/DomainApplicationTest.java +++ b/javatests/google/registry/model/domain/DomainApplicationTest.java @@ -145,16 +145,16 @@ public class DomainApplicationTest extends EntityTestCase { @Test public void testEmptySetsAndArraysBecomeNull() { - assertThat(emptyBuilder().setNameservers(null).build().nsHosts).isNull(); + assertThat(emptyBuilder().setNameservers(null).build().nameservers).isNull(); assertThat(emptyBuilder() .setNameservers(ImmutableSet.>of()) .build() - .nsHosts) + .nameservers) .isNull(); assertThat(emptyBuilder() .setNameservers(ImmutableSet.of(Key.create(newHostResource("foo.example.tld")))) .build() - .nsHosts) + .nameservers) .isNotNull(); // This behavior should also hold true for ImmutableObjects nested in collections. assertThat(emptyBuilder() diff --git a/javatests/google/registry/model/domain/DomainResourceTest.java b/javatests/google/registry/model/domain/DomainResourceTest.java index e15f8d8d3..3d7bfd4bd 100644 --- a/javatests/google/registry/model/domain/DomainResourceTest.java +++ b/javatests/google/registry/model/domain/DomainResourceTest.java @@ -207,13 +207,13 @@ public class DomainResourceTest extends EntityTestCase { @Test public void testEmptySetsAndArraysBecomeNull() { assertThat(newDomainResource("example.com").asBuilder() - .setNameservers(null).build().nsHosts).isNull(); + .setNameservers(null).build().nameservers).isNull(); assertThat(newDomainResource("example.com").asBuilder() - .setNameservers(ImmutableSet.>of()).build().nsHosts) + .setNameservers(ImmutableSet.>of()).build().nameservers) .isNull(); assertThat(newDomainResource("example.com").asBuilder() .setNameservers(ImmutableSet.of(Key.create(newHostResource("foo.example.tld")))) - .build().nsHosts) + .build().nameservers) .isNotNull(); // This behavior should also hold true for ImmutableObjects nested in collections. assertThat(newDomainResource("example.com").asBuilder() @@ -462,22 +462,21 @@ public class DomainResourceTest extends EntityTestCase { public void testDualSavingOfDesignatedContact() { ContactResource contact = persistActiveContact("time1006"); DesignatedContact designatedContact = new DesignatedContact(); - designatedContact.contact = Key.create(contact); + designatedContact.contactId = ReferenceUnion.create(Key.create(contact)); designatedContact.type = Type.ADMIN; DomainResource domainWithContact = domain.asBuilder().setContacts(ImmutableSet.of(designatedContact)).build(); - assertThat(getOnlyElement(domainWithContact.getContacts()).contactId).isNull(); + assertThat(getOnlyElement(domainWithContact.getContacts()).contact).isNull(); DomainResource reloadedDomain = persistResource(domainWithContact); - assertThat(getOnlyElement(reloadedDomain.getContacts()).contactId) - .isEqualTo(ReferenceUnion.create(Key.create(contact))); + assertThat(getOnlyElement(reloadedDomain.getContacts()).contact).isEqualTo(Key.create(contact)); } @Test public void testDualSavingOfNameservers() { HostResource host = persistActiveHost("zzz.xxx.yyy"); DomainResource domain = newDomainResource("python-django-unchained.com", host); - assertThat(domain.nameservers).isNull(); + assertThat(domain.nsHosts).isNull(); DomainResource djangoReloaded = persistResource(domain); - assertThat(djangoReloaded.nameservers).containsExactly(ReferenceUnion.create(Key.create(host))); + assertThat(djangoReloaded.nsHosts).containsExactly(Key.create(host)); } }