diff --git a/core/src/main/java/google/registry/flows/contact/ContactCreateFlow.java b/core/src/main/java/google/registry/flows/contact/ContactCreateFlow.java index 31f983225..cda40affa 100644 --- a/core/src/main/java/google/registry/flows/contact/ContactCreateFlow.java +++ b/core/src/main/java/google/registry/flows/contact/ContactCreateFlow.java @@ -19,9 +19,9 @@ import static google.registry.flows.ResourceFlowUtils.verifyResourceDoesNotExist import static google.registry.flows.contact.ContactFlowUtils.validateAsciiPostalInfo; import static google.registry.flows.contact.ContactFlowUtils.validateContactAgainstPolicy; import static google.registry.model.EppResourceUtils.createRepoId; -import static google.registry.model.ofy.ObjectifyService.ofy; import static google.registry.persistence.transaction.TransactionManagerFactory.tm; +import com.google.common.collect.ImmutableSet; import com.googlecode.objectify.Key; import google.registry.config.RegistryConfig.Config; import google.registry.flows.EppException; @@ -95,11 +95,12 @@ public final class ContactCreateFlow implements TransactionalFlow { .setModificationTime(now) .setXmlBytes(null) // We don't want to store contact details in the history entry. .setParent(Key.create(newContact)); - ofy().save().entities( - newContact, - historyBuilder.build(), - ForeignKeyIndex.create(newContact, newContact.getDeletionTime()), - EppResourceIndex.create(Key.create(newContact))); + tm().insertAll( + ImmutableSet.of( + newContact, + historyBuilder.build().toChildHistoryEntity(), + ForeignKeyIndex.create(newContact, newContact.getDeletionTime()), + EppResourceIndex.create(Key.create(newContact)))); return responseBuilder .setResData(ContactCreateData.create(newContact.getContactId(), now)) .build(); diff --git a/core/src/main/java/google/registry/flows/contact/ContactUpdateFlow.java b/core/src/main/java/google/registry/flows/contact/ContactUpdateFlow.java index 9255a851c..ba8080744 100644 --- a/core/src/main/java/google/registry/flows/contact/ContactUpdateFlow.java +++ b/core/src/main/java/google/registry/flows/contact/ContactUpdateFlow.java @@ -24,7 +24,6 @@ import static google.registry.flows.ResourceFlowUtils.verifyOptionalAuthInfo; import static google.registry.flows.ResourceFlowUtils.verifyResourceOwnership; import static google.registry.flows.contact.ContactFlowUtils.validateAsciiPostalInfo; import static google.registry.flows.contact.ContactFlowUtils.validateContactAgainstPolicy; -import static google.registry.model.ofy.ObjectifyService.ofy; import static google.registry.persistence.transaction.TransactionManagerFactory.tm; import com.google.common.collect.ImmutableSet; @@ -151,7 +150,8 @@ public final class ContactUpdateFlow implements TransactionalFlow { } validateAsciiPostalInfo(newContact.getInternationalizedPostalInfo()); validateContactAgainstPolicy(newContact); - ofy().save().entities(newContact, historyBuilder.build()); + tm().insert(historyBuilder.build().toChildHistoryEntity()); + tm().update(newContact); return responseBuilder.build(); } diff --git a/core/src/main/java/google/registry/model/eppcommon/Address.java b/core/src/main/java/google/registry/model/eppcommon/Address.java index 142511f7d..35bd61aad 100644 --- a/core/src/main/java/google/registry/model/eppcommon/Address.java +++ b/core/src/main/java/google/registry/model/eppcommon/Address.java @@ -35,6 +35,7 @@ import javax.persistence.Embeddable; import javax.persistence.MappedSuperclass; import javax.persistence.PostLoad; import javax.persistence.Transient; +import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; @@ -177,12 +178,7 @@ public class Address extends ImmutableObject implements Jsonifiable { * persisted in the Datastore. TODO(shicong): Delete this method after database migration. */ void onLoad(@AlsoLoad("street") List street) { - if (street == null || street.size() == 0) { - return; - } - streetLine1 = street.get(0); - streetLine2 = street.size() >= 2 ? street.get(1) : null; - streetLine3 = street.size() >= 3 ? street.get(2) : null; + mapStreetListToIndividualFields(street); } /** @@ -202,4 +198,23 @@ public class Address extends ImmutableObject implements Jsonifiable { .filter(Objects::nonNull) .collect(toImmutableList()); } + + /** + * Sets {@link #streetLine1}, {@link #streetLine2} and {@link #streetLine3} when the entity is + * reconstructed from XML message. + * + *

This is a callback function that JAXB invokes after unmarshalling the XML message. + */ + void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { + mapStreetListToIndividualFields(street); + } + + private void mapStreetListToIndividualFields(List street) { + if (street == null || street.size() == 0) { + return; + } + streetLine1 = street.get(0); + streetLine2 = street.size() >= 2 ? street.get(1) : null; + streetLine3 = street.size() >= 3 ? street.get(2) : null; + } } diff --git a/core/src/test/java/google/registry/flows/contact/ContactCheckFlowTest.java b/core/src/test/java/google/registry/flows/contact/ContactCheckFlowTest.java index 4dec51b42..e194eeead 100644 --- a/core/src/test/java/google/registry/flows/contact/ContactCheckFlowTest.java +++ b/core/src/test/java/google/registry/flows/contact/ContactCheckFlowTest.java @@ -24,16 +24,18 @@ import google.registry.flows.EppException; import google.registry.flows.ResourceCheckFlowTestCase; import google.registry.flows.exceptions.TooManyResourceChecksException; import google.registry.model.contact.ContactResource; -import org.junit.jupiter.api.Test; +import google.registry.testing.DualDatabaseTest; +import google.registry.testing.TestOfyAndSql; /** Unit tests for {@link ContactCheckFlow}. */ +@DualDatabaseTest class ContactCheckFlowTest extends ResourceCheckFlowTestCase { ContactCheckFlowTest() { setEppInput("contact_check.xml"); } - @Test + @TestOfyAndSql void testNothingExists() throws Exception { // These ids come from the check xml. doCheckTest( @@ -42,7 +44,7 @@ class ContactCheckFlowTest extends ResourceCheckFlowTestCase { ContactCreateFlowTest() { @@ -51,27 +54,29 @@ class ContactCreateFlowTest extends ResourceFlowTestCase { ContactUpdateFlowTest() { @@ -63,18 +65,18 @@ class ContactUpdateFlowTest extends ResourceFlowTestCase