diff --git a/core/src/main/java/google/registry/model/contact/ContactHistory.java b/core/src/main/java/google/registry/model/contact/ContactHistory.java index 79311fa77..d3cb17a48 100644 --- a/core/src/main/java/google/registry/model/contact/ContactHistory.java +++ b/core/src/main/java/google/registry/model/contact/ContactHistory.java @@ -14,7 +14,6 @@ package google.registry.model.contact; -import com.google.common.collect.ImmutableList; import com.googlecode.objectify.Key; import com.googlecode.objectify.annotation.EntitySubclass; import google.registry.model.ImmutableObject; @@ -111,8 +110,8 @@ public class ContactHistory extends HistoryEntry implements SqlEntity { // In Datastore, save as a HistoryEntry object regardless of this object's type @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(asHistoryEntry()); + public Optional toDatastoreEntity() { + return Optional.of(asHistoryEntry()); } /** Class to represent the composite primary key of {@link ContactHistory} entity. */ diff --git a/core/src/main/java/google/registry/model/domain/DomainHistory.java b/core/src/main/java/google/registry/model/domain/DomainHistory.java index 4003c8767..64f2bc7c2 100644 --- a/core/src/main/java/google/registry/model/domain/DomainHistory.java +++ b/core/src/main/java/google/registry/model/domain/DomainHistory.java @@ -17,7 +17,6 @@ package google.registry.model.domain; import static com.google.common.collect.ImmutableSet.toImmutableSet; import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.googlecode.objectify.Key; import com.googlecode.objectify.annotation.EntitySubclass; @@ -250,8 +249,8 @@ public class DomainHistory extends HistoryEntry implements SqlEntity { // In Datastore, save as a HistoryEntry object regardless of this object's type @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(asHistoryEntry()); + public Optional toDatastoreEntity() { + return Optional.of(asHistoryEntry()); } /** Class to represent the composite primary key of {@link DomainHistory} entity. */ diff --git a/core/src/main/java/google/registry/model/domain/secdns/DomainDsDataHistory.java b/core/src/main/java/google/registry/model/domain/secdns/DomainDsDataHistory.java index db2175645..86c5c6950 100644 --- a/core/src/main/java/google/registry/model/domain/secdns/DomainDsDataHistory.java +++ b/core/src/main/java/google/registry/model/domain/secdns/DomainDsDataHistory.java @@ -14,11 +14,11 @@ package google.registry.model.domain.secdns; -import com.google.common.collect.ImmutableList; import google.registry.model.domain.DomainHistory; import google.registry.model.ofy.ObjectifyService; import google.registry.schema.replay.DatastoreEntity; import google.registry.schema.replay.SqlEntity; +import java.util.Optional; import javax.persistence.Access; import javax.persistence.AccessType; import javax.persistence.Column; @@ -86,7 +86,7 @@ public class DomainDsDataHistory extends DomainDsDataBase implements SqlEntity { } @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(); // not persisted in Datastore + public Optional toDatastoreEntity() { + return Optional.empty(); // Not persisted in Datastore } } diff --git a/core/src/main/java/google/registry/model/host/HostHistory.java b/core/src/main/java/google/registry/model/host/HostHistory.java index 984a4d958..aea9e516f 100644 --- a/core/src/main/java/google/registry/model/host/HostHistory.java +++ b/core/src/main/java/google/registry/model/host/HostHistory.java @@ -14,7 +14,6 @@ package google.registry.model.host; -import com.google.common.collect.ImmutableList; import com.googlecode.objectify.Key; import com.googlecode.objectify.annotation.EntitySubclass; import google.registry.model.ImmutableObject; @@ -112,8 +111,8 @@ public class HostHistory extends HistoryEntry implements SqlEntity { // In Datastore, save as a HistoryEntry object regardless of this object's type @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(asHistoryEntry()); + public Optional toDatastoreEntity() { + return Optional.of(asHistoryEntry()); } /** Class to represent the composite primary key of {@link HostHistory} entity. */ diff --git a/core/src/main/java/google/registry/model/ofy/TransactionInfo.java b/core/src/main/java/google/registry/model/ofy/TransactionInfo.java index 115bd690c..ec81810a9 100644 --- a/core/src/main/java/google/registry/model/ofy/TransactionInfo.java +++ b/core/src/main/java/google/registry/model/ofy/TransactionInfo.java @@ -29,7 +29,6 @@ import com.google.common.collect.ImmutableSet; import com.googlecode.objectify.Key; import google.registry.persistence.VKey; import google.registry.schema.replay.DatastoreEntity; -import google.registry.schema.replay.SqlEntity; import java.util.Map; import org.joda.time.DateTime; @@ -137,10 +136,9 @@ class TransactionInfo { if (entry.getValue().equals(Delete.SENTINEL)) { jpaTm().delete(VKey.from(entry.getKey())); } else { - for (SqlEntity entity : - ((DatastoreEntity) entry.getValue()).toSqlEntities()) { - jpaTm().put(entity); - } + ((DatastoreEntity) entry.getValue()) + .toSqlEntity() + .ifPresent(jpaTm()::put); } }); }); diff --git a/core/src/main/java/google/registry/model/reporting/HistoryEntry.java b/core/src/main/java/google/registry/model/reporting/HistoryEntry.java index c5e38912f..ed3113b9b 100644 --- a/core/src/main/java/google/registry/model/reporting/HistoryEntry.java +++ b/core/src/main/java/google/registry/model/reporting/HistoryEntry.java @@ -18,7 +18,6 @@ import static com.googlecode.objectify.Key.getKind; import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy; import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.googlecode.objectify.Key; import com.googlecode.objectify.annotation.Entity; @@ -45,6 +44,7 @@ import google.registry.model.host.HostResource; import google.registry.persistence.VKey; import google.registry.schema.replay.DatastoreEntity; import google.registry.schema.replay.SqlEntity; +import java.util.Optional; import java.util.Set; import javax.annotation.Nullable; import javax.persistence.Access; @@ -314,8 +314,8 @@ public class HistoryEntry extends ImmutableObject implements Buildable, Datastor // In SQL, save the child type @Override - public ImmutableList toSqlEntities() { - return ImmutableList.of((SqlEntity) toChildHistoryEntity()); + public Optional toSqlEntity() { + return Optional.of((SqlEntity) toChildHistoryEntity()); } /** Creates a {@link VKey} instance from a {@link Key} instance. */ diff --git a/core/src/main/java/google/registry/model/reporting/Spec11ThreatMatch.java b/core/src/main/java/google/registry/model/reporting/Spec11ThreatMatch.java index 1e1027fc0..1e7016b15 100644 --- a/core/src/main/java/google/registry/model/reporting/Spec11ThreatMatch.java +++ b/core/src/main/java/google/registry/model/reporting/Spec11ThreatMatch.java @@ -18,13 +18,13 @@ import static com.google.common.base.Preconditions.checkArgument; import static google.registry.util.CollectionUtils.isNullOrEmpty; import static google.registry.util.PreconditionsUtils.checkArgumentNotNull; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import google.registry.model.Buildable; import google.registry.model.ImmutableObject; import google.registry.schema.replay.DatastoreEntity; import google.registry.schema.replay.SqlEntity; import google.registry.util.DomainNameUtils; +import java.util.Optional; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; @@ -111,8 +111,8 @@ public class Spec11ThreatMatch extends ImmutableObject implements Buildable, Sql } @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(); // not stored in Datastore + public Optional toDatastoreEntity() { + return Optional.empty(); // Not persisted in Datastore } @Override diff --git a/core/src/main/java/google/registry/model/tmch/TmchCrl.java b/core/src/main/java/google/registry/model/tmch/TmchCrl.java index fb3a378a4..f17983dde 100644 --- a/core/src/main/java/google/registry/model/tmch/TmchCrl.java +++ b/core/src/main/java/google/registry/model/tmch/TmchCrl.java @@ -20,7 +20,6 @@ import static google.registry.persistence.transaction.TransactionManagerFactory. import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm; import static google.registry.persistence.transaction.TransactionManagerFactory.tm; -import com.google.common.collect.ImmutableList; import com.googlecode.objectify.Key; import com.googlecode.objectify.annotation.Entity; import google.registry.model.annotations.NotBackedUp; @@ -28,9 +27,7 @@ import google.registry.model.annotations.NotBackedUp.Reason; import google.registry.model.common.CrossTldSingleton; import google.registry.model.tmch.TmchCrl.TmchCrlId; import google.registry.persistence.VKey; -import google.registry.schema.replay.DatastoreEntity; import google.registry.schema.replay.NonReplicatedEntity; -import google.registry.schema.replay.SqlEntity; import java.io.Serializable; import java.util.Optional; import javax.annotation.concurrent.Immutable; @@ -106,16 +103,6 @@ public final class TmchCrl extends CrossTldSingleton implements NonReplicatedEnt return updated; } - @Override - public ImmutableList toSqlEntities() { - return ImmutableList.of(); // dually-written - } - - @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(); // dually-written - } - static class TmchCrlId implements Serializable { @Column(name = "certificateRevocations") diff --git a/core/src/main/java/google/registry/persistence/transaction/TransactionEntity.java b/core/src/main/java/google/registry/persistence/transaction/TransactionEntity.java index c295c56a1..483af8343 100644 --- a/core/src/main/java/google/registry/persistence/transaction/TransactionEntity.java +++ b/core/src/main/java/google/registry/persistence/transaction/TransactionEntity.java @@ -14,9 +14,9 @@ package google.registry.persistence.transaction; -import com.google.common.collect.ImmutableList; import google.registry.schema.replay.DatastoreEntity; import google.registry.schema.replay.SqlEntity; +import java.util.Optional; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @@ -45,7 +45,7 @@ public class TransactionEntity implements SqlEntity { } @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(); // not stored in Datastore per se + public Optional toDatastoreEntity() { + return Optional.empty(); // Not persisted in Datastore per se } } diff --git a/core/src/main/java/google/registry/schema/cursor/Cursor.java b/core/src/main/java/google/registry/schema/cursor/Cursor.java index 399ce29db..6074032c0 100644 --- a/core/src/main/java/google/registry/schema/cursor/Cursor.java +++ b/core/src/main/java/google/registry/schema/cursor/Cursor.java @@ -16,7 +16,6 @@ package google.registry.schema.cursor; import static com.google.appengine.api.search.checkers.Preconditions.checkNotNull; -import com.google.common.collect.ImmutableList; import google.registry.model.ImmutableObject; import google.registry.model.UpdateAutoTimestamp; import google.registry.model.common.Cursor.CursorType; @@ -26,6 +25,7 @@ import google.registry.schema.replay.SqlEntity; import google.registry.util.DateTimeUtils; import java.io.Serializable; import java.time.ZonedDateTime; +import java.util.Optional; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; @@ -104,8 +104,8 @@ public class Cursor implements SqlEntity { } @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(); // Cursors are not converted since they are ephemeral + public Optional toDatastoreEntity() { + return Optional.empty(); // Cursors are not converted since they are ephemeral } static class CursorId extends ImmutableObject implements Serializable { diff --git a/core/src/main/java/google/registry/schema/domain/RegistryLock.java b/core/src/main/java/google/registry/schema/domain/RegistryLock.java index fdbccb35c..d7cdce8bb 100644 --- a/core/src/main/java/google/registry/schema/domain/RegistryLock.java +++ b/core/src/main/java/google/registry/schema/domain/RegistryLock.java @@ -19,7 +19,6 @@ import static google.registry.util.DateTimeUtils.isBeforeOrAt; import static google.registry.util.DateTimeUtils.toZonedDateTime; import static google.registry.util.PreconditionsUtils.checkArgumentNotNull; -import com.google.common.collect.ImmutableList; import google.registry.model.Buildable; import google.registry.model.CreateAutoTimestamp; import google.registry.model.ImmutableObject; @@ -234,8 +233,8 @@ public final class RegistryLock extends ImmutableObject implements Buildable, Sq } @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(); // not stored in Datastore + public Optional toDatastoreEntity() { + return Optional.empty(); // Not persisted in Datastore } /** Builder for {@link google.registry.schema.domain.RegistryLock}. */ diff --git a/core/src/main/java/google/registry/schema/replay/DatastoreAndSqlEntity.java b/core/src/main/java/google/registry/schema/replay/DatastoreAndSqlEntity.java index 8b61fde75..d7968021d 100644 --- a/core/src/main/java/google/registry/schema/replay/DatastoreAndSqlEntity.java +++ b/core/src/main/java/google/registry/schema/replay/DatastoreAndSqlEntity.java @@ -14,18 +14,18 @@ package google.registry.schema.replay; -import com.google.common.collect.ImmutableList; +import java.util.Optional; /** An entity that has the same Java object representation in SQL and Datastore. */ public interface DatastoreAndSqlEntity extends DatastoreEntity, SqlEntity { @Override - default ImmutableList toDatastoreEntities() { - return ImmutableList.of(this); + default Optional toDatastoreEntity() { + return Optional.of(this); } @Override - default ImmutableList toSqlEntities() { - return ImmutableList.of(this); + default Optional toSqlEntity() { + return Optional.of(this); } } diff --git a/core/src/main/java/google/registry/schema/replay/DatastoreEntity.java b/core/src/main/java/google/registry/schema/replay/DatastoreEntity.java index ecc3f6808..a1de6eef3 100644 --- a/core/src/main/java/google/registry/schema/replay/DatastoreEntity.java +++ b/core/src/main/java/google/registry/schema/replay/DatastoreEntity.java @@ -14,7 +14,7 @@ package google.registry.schema.replay; -import com.google.common.collect.ImmutableList; +import java.util.Optional; /** * An object that can be stored in Datastore and serialized using Objectify's {@link @@ -26,5 +26,5 @@ import com.google.common.collect.ImmutableList; */ public interface DatastoreEntity { - ImmutableList toSqlEntities(); + Optional toSqlEntity(); } diff --git a/core/src/main/java/google/registry/schema/replay/DatastoreOnlyEntity.java b/core/src/main/java/google/registry/schema/replay/DatastoreOnlyEntity.java index f47a34345..4a0c746d8 100644 --- a/core/src/main/java/google/registry/schema/replay/DatastoreOnlyEntity.java +++ b/core/src/main/java/google/registry/schema/replay/DatastoreOnlyEntity.java @@ -14,11 +14,12 @@ package google.registry.schema.replay; -import com.google.common.collect.ImmutableList; +import java.util.Optional; +/** An entity that is only stored in Datastore, that should not be replayed to SQL. */ public interface DatastoreOnlyEntity extends DatastoreEntity { @Override - default ImmutableList toSqlEntities() { - return ImmutableList.of(); + default Optional toSqlEntity() { + return Optional.empty(); } } diff --git a/core/src/main/java/google/registry/schema/replay/NonReplicatedEntity.java b/core/src/main/java/google/registry/schema/replay/NonReplicatedEntity.java index cb3a9555d..d8ea2ca5a 100644 --- a/core/src/main/java/google/registry/schema/replay/NonReplicatedEntity.java +++ b/core/src/main/java/google/registry/schema/replay/NonReplicatedEntity.java @@ -14,7 +14,7 @@ package google.registry.schema.replay; -import com.google.common.collect.ImmutableList; +import java.util.Optional; /** * Represents an entity that should not participate in asynchronous replication. @@ -24,12 +24,12 @@ import com.google.common.collect.ImmutableList; public interface NonReplicatedEntity extends DatastoreEntity, SqlEntity { @Override - default ImmutableList toDatastoreEntities() { - return ImmutableList.of(); + default Optional toDatastoreEntity() { + return Optional.empty(); } @Override - default ImmutableList toSqlEntities() { - return ImmutableList.of(); + default Optional toSqlEntity() { + return Optional.empty(); } } diff --git a/core/src/main/java/google/registry/schema/replay/SqlEntity.java b/core/src/main/java/google/registry/schema/replay/SqlEntity.java index 1a8ea63bc..0fec88168 100644 --- a/core/src/main/java/google/registry/schema/replay/SqlEntity.java +++ b/core/src/main/java/google/registry/schema/replay/SqlEntity.java @@ -14,7 +14,7 @@ package google.registry.schema.replay; -import com.google.common.collect.ImmutableList; +import java.util.Optional; /** * An object that can be stored in Cloud SQL using {@link @@ -25,5 +25,5 @@ import com.google.common.collect.ImmutableList; */ public interface SqlEntity { - ImmutableList toDatastoreEntities(); + Optional toDatastoreEntity(); } diff --git a/core/src/main/java/google/registry/schema/replay/SqlReplayCheckpoint.java b/core/src/main/java/google/registry/schema/replay/SqlReplayCheckpoint.java index 6826d537d..d5d2c62ac 100644 --- a/core/src/main/java/google/registry/schema/replay/SqlReplayCheckpoint.java +++ b/core/src/main/java/google/registry/schema/replay/SqlReplayCheckpoint.java @@ -18,7 +18,7 @@ import static google.registry.model.common.CrossTldSingleton.SINGLETON_ID; import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm; import static google.registry.util.DateTimeUtils.START_OF_TIME; -import com.google.common.collect.ImmutableList; +import java.util.Optional; import javax.persistence.Entity; import javax.persistence.Id; import org.joda.time.DateTime; @@ -32,8 +32,8 @@ public class SqlReplayCheckpoint implements SqlEntity { private DateTime lastReplayTime; @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(); // not necessary to persist in Datastore + public Optional toDatastoreEntity() { + return Optional.empty(); // Not necessary to persist in Datastore } public static DateTime get() { diff --git a/core/src/main/java/google/registry/schema/server/Lock.java b/core/src/main/java/google/registry/schema/server/Lock.java index 1b3ea8f2f..b6695ead6 100644 --- a/core/src/main/java/google/registry/schema/server/Lock.java +++ b/core/src/main/java/google/registry/schema/server/Lock.java @@ -16,7 +16,6 @@ package google.registry.schema.server; import static google.registry.util.PreconditionsUtils.checkArgumentNotNull; -import com.google.common.collect.ImmutableList; import google.registry.model.ImmutableObject; import google.registry.schema.replay.DatastoreEntity; import google.registry.schema.replay.SqlEntity; @@ -24,6 +23,7 @@ import google.registry.schema.server.Lock.LockId; import google.registry.util.DateTimeUtils; import java.io.Serializable; import java.time.ZonedDateTime; +import java.util.Optional; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; @@ -120,8 +120,8 @@ public class Lock implements SqlEntity { } @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(); // Locks are not converted since they are ephemeral + public Optional toDatastoreEntity() { + return Optional.empty(); // Locks are not converted since they are ephemeral } static class LockId extends ImmutableObject implements Serializable { diff --git a/core/src/main/java/google/registry/schema/tld/PremiumEntry.java b/core/src/main/java/google/registry/schema/tld/PremiumEntry.java index ea0ad7c1c..dd2801aff 100644 --- a/core/src/main/java/google/registry/schema/tld/PremiumEntry.java +++ b/core/src/main/java/google/registry/schema/tld/PremiumEntry.java @@ -14,13 +14,13 @@ package google.registry.schema.tld; -import com.google.common.collect.ImmutableList; import google.registry.model.ImmutableObject; import google.registry.model.registry.label.PremiumList; import google.registry.schema.replay.DatastoreEntity; import google.registry.schema.replay.SqlEntity; import java.io.Serializable; import java.math.BigDecimal; +import java.util.Optional; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; @@ -47,7 +47,7 @@ public class PremiumEntry extends ImmutableObject implements Serializable, SqlEn private PremiumEntry() {} @Override - public ImmutableList toDatastoreEntities() { - return ImmutableList.of(); // PremiumList is dually-written + public Optional toDatastoreEntity() { + return Optional.empty(); // PremiumList is dually-written } }