mirror of
https://github.com/google/nomulus.git
synced 2025-04-30 12:07:51 +02:00
Refactor TransferData to remove unused fields in Contact table (#623)
* Add DomainTransferData and ContactTransferData * Refactor TransferData to remove unused fields in Contact table * Add scope for TransferData's type parameter
This commit is contained in:
parent
3a3adcde0c
commit
56c9e81bcd
38 changed files with 491 additions and 324 deletions
|
@ -46,7 +46,7 @@ import google.registry.model.eppoutput.EppResponse;
|
||||||
import google.registry.model.poll.PollMessage;
|
import google.registry.model.poll.PollMessage;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.ContactTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
@ -112,21 +112,22 @@ public final class ContactTransferRequestFlow implements TransactionalFlow {
|
||||||
.setParent(Key.create(existingContact))
|
.setParent(Key.create(existingContact))
|
||||||
.build();
|
.build();
|
||||||
DateTime transferExpirationTime = now.plus(automaticTransferLength);
|
DateTime transferExpirationTime = now.plus(automaticTransferLength);
|
||||||
TransferData serverApproveTransferData = new TransferData.Builder()
|
ContactTransferData serverApproveTransferData =
|
||||||
.setTransferRequestTime(now)
|
new ContactTransferData.Builder()
|
||||||
.setTransferRequestTrid(trid)
|
.setTransferRequestTime(now)
|
||||||
.setGainingClientId(gainingClientId)
|
.setTransferRequestTrid(trid)
|
||||||
.setLosingClientId(losingClientId)
|
.setGainingClientId(gainingClientId)
|
||||||
.setPendingTransferExpirationTime(transferExpirationTime)
|
.setLosingClientId(losingClientId)
|
||||||
.setTransferStatus(TransferStatus.SERVER_APPROVED)
|
.setPendingTransferExpirationTime(transferExpirationTime)
|
||||||
.build();
|
.setTransferStatus(TransferStatus.SERVER_APPROVED)
|
||||||
|
.build();
|
||||||
// If the transfer is server approved, this message will be sent to the losing registrar. */
|
// If the transfer is server approved, this message will be sent to the losing registrar. */
|
||||||
PollMessage serverApproveLosingPollMessage =
|
PollMessage serverApproveLosingPollMessage =
|
||||||
createLosingTransferPollMessage(targetId, serverApproveTransferData, historyEntry);
|
createLosingTransferPollMessage(targetId, serverApproveTransferData, historyEntry);
|
||||||
// If the transfer is server approved, this message will be sent to the gaining registrar. */
|
// If the transfer is server approved, this message will be sent to the gaining registrar. */
|
||||||
PollMessage serverApproveGainingPollMessage =
|
PollMessage serverApproveGainingPollMessage =
|
||||||
createGainingTransferPollMessage(targetId, serverApproveTransferData, historyEntry);
|
createGainingTransferPollMessage(targetId, serverApproveTransferData, historyEntry);
|
||||||
TransferData pendingTransferData =
|
ContactTransferData pendingTransferData =
|
||||||
serverApproveTransferData
|
serverApproveTransferData
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
|
|
|
@ -58,7 +58,7 @@ import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.DomainTransactionRecord;
|
import google.registry.model.reporting.DomainTransactionRecord;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
@ -112,7 +112,7 @@ public final class DomainTransferApproveFlow implements TransactionalFlow {
|
||||||
if (!isSuperuser) {
|
if (!isSuperuser) {
|
||||||
checkAllowedAccessToTld(clientId, tld);
|
checkAllowedAccessToTld(clientId, tld);
|
||||||
}
|
}
|
||||||
TransferData transferData = existingDomain.getTransferData();
|
DomainTransferData transferData = existingDomain.getTransferData();
|
||||||
String gainingClientId = transferData.getGainingClientId();
|
String gainingClientId = transferData.getGainingClientId();
|
||||||
Registry registry = Registry.get(existingDomain.getTld());
|
Registry registry = Registry.get(existingDomain.getTld());
|
||||||
HistoryEntry historyEntry = buildHistoryEntry(existingDomain, registry, now, gainingClientId);
|
HistoryEntry historyEntry = buildHistoryEntry(existingDomain, registry, now, gainingClientId);
|
||||||
|
|
|
@ -32,7 +32,7 @@ import google.registry.model.domain.DomainBase;
|
||||||
import google.registry.model.eppcommon.AuthInfo;
|
import google.registry.model.eppcommon.AuthInfo;
|
||||||
import google.registry.model.eppoutput.EppResponse;
|
import google.registry.model.eppoutput.EppResponse;
|
||||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.util.Clock;
|
import google.registry.util.Clock;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
@ -74,7 +74,7 @@ public final class DomainTransferQueryFlow implements Flow {
|
||||||
verifyOptionalAuthInfo(authInfo, domain);
|
verifyOptionalAuthInfo(authInfo, domain);
|
||||||
// Most of the fields on the transfer response are required, so there's no way to return valid
|
// Most of the fields on the transfer response are required, so there's no way to return valid
|
||||||
// XML if the object has never been transferred (and hence the fields aren't populated).
|
// XML if the object has never been transferred (and hence the fields aren't populated).
|
||||||
TransferData transferData = domain.getTransferData();
|
DomainTransferData transferData = domain.getTransferData();
|
||||||
if (transferData.getTransferStatus() == null) {
|
if (transferData.getTransferStatus() == null) {
|
||||||
throw new NoTransferHistoryToQueryException();
|
throw new NoTransferHistoryToQueryException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ import google.registry.model.reporting.DomainTransactionRecord;
|
||||||
import google.registry.model.reporting.DomainTransactionRecord.TransactionReportField;
|
import google.registry.model.reporting.DomainTransactionRecord.TransactionReportField;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
import google.registry.model.reporting.IcannReportingTypes.ActivityReportField;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferData.TransferServerApproveEntity;
|
import google.registry.model.transfer.TransferData.TransferServerApproveEntity;
|
||||||
import google.registry.model.transfer.TransferResponse.DomainTransferResponse;
|
import google.registry.model.transfer.TransferResponse.DomainTransferResponse;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
|
@ -198,9 +198,9 @@ public final class DomainTransferRequestFlow implements TransactionalFlow {
|
||||||
feesAndCredits.map(FeesAndCredits::getTotalCost),
|
feesAndCredits.map(FeesAndCredits::getTotalCost),
|
||||||
now);
|
now);
|
||||||
// Create the transfer data that represents the pending transfer.
|
// Create the transfer data that represents the pending transfer.
|
||||||
TransferData pendingTransferData =
|
DomainTransferData pendingTransferData =
|
||||||
createPendingTransferData(
|
createPendingTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setTransferRequestTrid(trid)
|
.setTransferRequestTrid(trid)
|
||||||
.setTransferRequestTime(now)
|
.setTransferRequestTime(now)
|
||||||
.setGainingClientId(gainingClientId)
|
.setGainingClientId(gainingClientId)
|
||||||
|
|
|
@ -32,6 +32,7 @@ import google.registry.model.poll.PendingActionNotificationResponse.DomainPendin
|
||||||
import google.registry.model.poll.PollMessage;
|
import google.registry.model.poll.PollMessage;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.TransferData;
|
||||||
import google.registry.model.transfer.TransferData.TransferServerApproveEntity;
|
import google.registry.model.transfer.TransferData.TransferServerApproveEntity;
|
||||||
import google.registry.model.transfer.TransferResponse.DomainTransferResponse;
|
import google.registry.model.transfer.TransferResponse.DomainTransferResponse;
|
||||||
|
@ -48,8 +49,8 @@ import org.joda.time.DateTime;
|
||||||
public final class DomainTransferUtils {
|
public final class DomainTransferUtils {
|
||||||
|
|
||||||
/** Sets up {@link TransferData} for a domain with links to entities for server approval. */
|
/** Sets up {@link TransferData} for a domain with links to entities for server approval. */
|
||||||
public static TransferData createPendingTransferData(
|
public static DomainTransferData createPendingTransferData(
|
||||||
TransferData.Builder transferDataBuilder,
|
DomainTransferData.Builder transferDataBuilder,
|
||||||
ImmutableSet<TransferServerApproveEntity> serverApproveEntities,
|
ImmutableSet<TransferServerApproveEntity> serverApproveEntities,
|
||||||
Period transferPeriod) {
|
Period transferPeriod) {
|
||||||
ImmutableSet.Builder<VKey<? extends TransferServerApproveEntity>> serverApproveEntityKeys =
|
ImmutableSet.Builder<VKey<? extends TransferServerApproveEntity>> serverApproveEntityKeys =
|
||||||
|
@ -110,8 +111,8 @@ public final class DomainTransferUtils {
|
||||||
DateTime now) {
|
DateTime now) {
|
||||||
String targetId = existingDomain.getFullyQualifiedDomainName();
|
String targetId = existingDomain.getFullyQualifiedDomainName();
|
||||||
// Create a TransferData for the server-approve case to use for the speculative poll messages.
|
// Create a TransferData for the server-approve case to use for the speculative poll messages.
|
||||||
TransferData serverApproveTransferData =
|
DomainTransferData serverApproveTransferData =
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setTransferRequestTrid(trid)
|
.setTransferRequestTrid(trid)
|
||||||
.setTransferRequestTime(now)
|
.setTransferRequestTime(now)
|
||||||
.setGainingClientId(gainingClientId)
|
.setGainingClientId(gainingClientId)
|
||||||
|
|
|
@ -193,8 +193,8 @@ public abstract class EppResource extends BackupGroupRoot implements Buildable {
|
||||||
public interface ForeignKeyedEppResource {}
|
public interface ForeignKeyedEppResource {}
|
||||||
|
|
||||||
/** An interface for resources that have transfer data. */
|
/** An interface for resources that have transfer data. */
|
||||||
public interface ResourceWithTransferData {
|
public interface ResourceWithTransferData<T extends TransferData> {
|
||||||
TransferData getTransferData();
|
T getTransferData();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The time that this resource was last transferred.
|
* The time that this resource was last transferred.
|
||||||
|
@ -205,8 +205,9 @@ public abstract class EppResource extends BackupGroupRoot implements Buildable {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** An interface for builders of resources that have transfer data. */
|
/** An interface for builders of resources that have transfer data. */
|
||||||
public interface BuilderWithTransferData<B extends BuilderWithTransferData<B>> {
|
public interface BuilderWithTransferData<
|
||||||
B setTransferData(TransferData transferData);
|
T extends TransferData, B extends BuilderWithTransferData<T, B>> {
|
||||||
|
B setTransferData(T transferData);
|
||||||
|
|
||||||
/** Set the time when this resource was transferred. */
|
/** Set the time when this resource was transferred. */
|
||||||
B setLastTransferTime(DateTime lastTransferTime);
|
B setLastTransferTime(DateTime lastTransferTime);
|
||||||
|
|
|
@ -39,6 +39,7 @@ import google.registry.model.index.ForeignKeyIndex;
|
||||||
import google.registry.model.ofy.CommitLogManifest;
|
import google.registry.model.ofy.CommitLogManifest;
|
||||||
import google.registry.model.ofy.CommitLogMutation;
|
import google.registry.model.ofy.CommitLogMutation;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.TransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -222,17 +223,23 @@ public final class EppResourceUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Process an automatic transfer on a resource. */
|
/** Process an automatic transfer on a resource. */
|
||||||
public static <B extends EppResource.Builder<?, B> & BuilderWithTransferData<B>>
|
public static <
|
||||||
|
T extends TransferData,
|
||||||
|
B extends EppResource.Builder<?, B> & BuilderWithTransferData<T, B>>
|
||||||
void setAutomaticTransferSuccessProperties(B builder, TransferData transferData) {
|
void setAutomaticTransferSuccessProperties(B builder, TransferData transferData) {
|
||||||
checkArgument(TransferStatus.PENDING.equals(transferData.getTransferStatus()));
|
checkArgument(TransferStatus.PENDING.equals(transferData.getTransferStatus()));
|
||||||
builder.removeStatusValue(StatusValue.PENDING_TRANSFER)
|
TransferData.Builder transferDataBuilder = transferData.asBuilder();
|
||||||
.setTransferData(transferData.asBuilder()
|
transferDataBuilder.setTransferStatus(TransferStatus.SERVER_APPROVED);
|
||||||
.setTransferStatus(TransferStatus.SERVER_APPROVED)
|
transferDataBuilder.setServerApproveEntities(null);
|
||||||
.setServerApproveEntities(null)
|
if (transferData instanceof DomainTransferData) {
|
||||||
.setServerApproveBillingEvent(null)
|
((DomainTransferData.Builder) transferDataBuilder)
|
||||||
.setServerApproveAutorenewEvent(null)
|
.setServerApproveBillingEvent(null)
|
||||||
.setServerApproveAutorenewPollMessage(null)
|
.setServerApproveAutorenewEvent(null)
|
||||||
.build())
|
.setServerApproveAutorenewPollMessage(null);
|
||||||
|
}
|
||||||
|
builder
|
||||||
|
.removeStatusValue(StatusValue.PENDING_TRANSFER)
|
||||||
|
.setTransferData((T) transferDataBuilder.build())
|
||||||
.setLastTransferTime(transferData.getPendingTransferExpirationTime())
|
.setLastTransferTime(transferData.getPendingTransferExpirationTime())
|
||||||
.setPersistedCurrentSponsorClientId(transferData.getGainingClientId());
|
.setPersistedCurrentSponsorClientId(transferData.getGainingClientId());
|
||||||
}
|
}
|
||||||
|
@ -245,10 +252,11 @@ public final class EppResourceUtils {
|
||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public static <
|
public static <
|
||||||
T extends EppResource & ResourceWithTransferData,
|
T extends TransferData,
|
||||||
B extends EppResource.Builder<?, B> & BuilderWithTransferData<B>>
|
E extends EppResource & ResourceWithTransferData<T>,
|
||||||
void projectResourceOntoBuilderAtTime(T resource, B builder, DateTime now) {
|
B extends EppResource.Builder<?, B> & BuilderWithTransferData<T, B>>
|
||||||
TransferData transferData = resource.getTransferData();
|
void projectResourceOntoBuilderAtTime(E resource, B builder, DateTime now) {
|
||||||
|
T transferData = resource.getTransferData();
|
||||||
// If there's a pending transfer that has expired, process it.
|
// If there's a pending transfer that has expired, process it.
|
||||||
DateTime expirationTime = transferData.getPendingTransferExpirationTime();
|
DateTime expirationTime = transferData.getPendingTransferExpirationTime();
|
||||||
if (TransferStatus.PENDING.equals(transferData.getTransferStatus())
|
if (TransferStatus.PENDING.equals(transferData.getTransferStatus())
|
||||||
|
|
|
@ -36,6 +36,7 @@ import google.registry.model.poll.PendingActionNotificationResponse.ContactPendi
|
||||||
import google.registry.model.poll.PendingActionNotificationResponse.DomainPendingActionNotificationResponse;
|
import google.registry.model.poll.PendingActionNotificationResponse.DomainPendingActionNotificationResponse;
|
||||||
import google.registry.model.poll.PollMessage;
|
import google.registry.model.poll.PollMessage;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.TransferData;
|
||||||
import google.registry.model.transfer.TransferResponse;
|
import google.registry.model.transfer.TransferResponse;
|
||||||
import google.registry.model.transfer.TransferResponse.ContactTransferResponse;
|
import google.registry.model.transfer.TransferResponse.ContactTransferResponse;
|
||||||
|
@ -63,12 +64,13 @@ public final class ResourceTransferUtils {
|
||||||
if (eppResource instanceof ContactResource) {
|
if (eppResource instanceof ContactResource) {
|
||||||
builder = new ContactTransferResponse.Builder().setContactId(eppResource.getForeignKey());
|
builder = new ContactTransferResponse.Builder().setContactId(eppResource.getForeignKey());
|
||||||
} else {
|
} else {
|
||||||
|
DomainTransferData domainTransferData = (DomainTransferData) transferData;
|
||||||
builder =
|
builder =
|
||||||
new DomainTransferResponse.Builder()
|
new DomainTransferResponse.Builder()
|
||||||
.setFullyQualifiedDomainName(eppResource.getForeignKey())
|
.setFullyQualifiedDomainName(eppResource.getForeignKey())
|
||||||
.setExtendedRegistrationExpirationTime(
|
.setExtendedRegistrationExpirationTime(
|
||||||
ADD_EXDATE_STATUSES.contains(transferData.getTransferStatus())
|
ADD_EXDATE_STATUSES.contains(domainTransferData.getTransferStatus())
|
||||||
? transferData.getTransferredRegistrationExpirationTime()
|
? domainTransferData.getTransferredRegistrationExpirationTime()
|
||||||
: null);
|
: null);
|
||||||
}
|
}
|
||||||
builder.setGainingClientId(transferData.getGainingClientId())
|
builder.setGainingClientId(transferData.getGainingClientId())
|
||||||
|
@ -142,23 +144,25 @@ public final class ResourceTransferUtils {
|
||||||
*/
|
*/
|
||||||
private static <
|
private static <
|
||||||
R extends EppResource & ResourceWithTransferData,
|
R extends EppResource & ResourceWithTransferData,
|
||||||
B extends EppResource.Builder<R, B> & BuilderWithTransferData<B>>
|
B extends EppResource.Builder<R, B> & BuilderWithTransferData<TransferData, B>>
|
||||||
B resolvePendingTransfer(R resource, TransferStatus transferStatus, DateTime now) {
|
B resolvePendingTransfer(R resource, TransferStatus transferStatus, DateTime now) {
|
||||||
checkArgument(
|
checkArgument(
|
||||||
resource.getStatusValues().contains(StatusValue.PENDING_TRANSFER),
|
resource.getStatusValues().contains(StatusValue.PENDING_TRANSFER),
|
||||||
"Resource is not in pending transfer status.");
|
"Resource is not in pending transfer status.");
|
||||||
checkArgument(
|
checkArgument(!resource.getTransferData().isEmpty(), "No old transfer data to resolve.");
|
||||||
!TransferData.EMPTY.equals(resource.getTransferData()),
|
|
||||||
"No old transfer data to resolve.");
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
B builder = (B) resource.asBuilder();
|
B builder = (B) resource.asBuilder();
|
||||||
|
|
||||||
return builder
|
return builder
|
||||||
.removeStatusValue(StatusValue.PENDING_TRANSFER)
|
.removeStatusValue(StatusValue.PENDING_TRANSFER)
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
resource.getTransferData().copyConstantFieldsToBuilder()
|
(TransferData)
|
||||||
.setTransferStatus(transferStatus)
|
resource
|
||||||
.setPendingTransferExpirationTime(checkNotNull(now))
|
.getTransferData()
|
||||||
.build());
|
.copyConstantFieldsToBuilder()
|
||||||
|
.setTransferStatus(transferStatus)
|
||||||
|
.setPendingTransferExpirationTime(checkNotNull(now))
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -171,7 +175,7 @@ public final class ResourceTransferUtils {
|
||||||
*/
|
*/
|
||||||
public static <
|
public static <
|
||||||
R extends EppResource & ResourceWithTransferData,
|
R extends EppResource & ResourceWithTransferData,
|
||||||
B extends EppResource.Builder<R, B> & BuilderWithTransferData<B>>
|
B extends EppResource.Builder<R, B> & BuilderWithTransferData<TransferData, B>>
|
||||||
R approvePendingTransfer(R resource, TransferStatus transferStatus, DateTime now) {
|
R approvePendingTransfer(R resource, TransferStatus transferStatus, DateTime now) {
|
||||||
checkArgument(transferStatus.isApproved(), "Not an approval transfer status");
|
checkArgument(transferStatus.isApproved(), "Not an approval transfer status");
|
||||||
B builder = resolvePendingTransfer(resource, transferStatus, now);
|
B builder = resolvePendingTransfer(resource, transferStatus, now);
|
||||||
|
|
|
@ -30,7 +30,7 @@ import google.registry.model.EppResource.ResourceWithTransferData;
|
||||||
import google.registry.model.annotations.ExternalMessagingName;
|
import google.registry.model.annotations.ExternalMessagingName;
|
||||||
import google.registry.model.annotations.ReportedOn;
|
import google.registry.model.annotations.ReportedOn;
|
||||||
import google.registry.model.contact.PostalInfo.Type;
|
import google.registry.model.contact.PostalInfo.Type;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.ContactTransferData;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
import google.registry.persistence.WithStringVKey;
|
import google.registry.persistence.WithStringVKey;
|
||||||
import google.registry.schema.replay.DatastoreAndSqlEntity;
|
import google.registry.schema.replay.DatastoreAndSqlEntity;
|
||||||
|
@ -170,7 +170,7 @@ public class ContactResource extends EppResource
|
||||||
ContactAuthInfo authInfo;
|
ContactAuthInfo authInfo;
|
||||||
|
|
||||||
/** Data about any pending or past transfers on this contact. */
|
/** Data about any pending or past transfers on this contact. */
|
||||||
TransferData transferData;
|
ContactTransferData transferData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The time that this resource was last transferred.
|
* The time that this resource was last transferred.
|
||||||
|
@ -242,8 +242,8 @@ public class ContactResource extends EppResource
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final TransferData getTransferData() {
|
public final ContactTransferData getTransferData() {
|
||||||
return Optional.ofNullable(transferData).orElse(TransferData.EMPTY);
|
return Optional.ofNullable(transferData).orElse(ContactTransferData.EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -285,7 +285,7 @@ public class ContactResource extends EppResource
|
||||||
|
|
||||||
/** A builder for constructing {@link ContactResource}, since it is immutable. */
|
/** A builder for constructing {@link ContactResource}, since it is immutable. */
|
||||||
public static class Builder extends EppResource.Builder<ContactResource, Builder>
|
public static class Builder extends EppResource.Builder<ContactResource, Builder>
|
||||||
implements BuilderWithTransferData<Builder> {
|
implements BuilderWithTransferData<ContactTransferData, Builder> {
|
||||||
|
|
||||||
public Builder() {}
|
public Builder() {}
|
||||||
|
|
||||||
|
@ -350,7 +350,7 @@ public class ContactResource extends EppResource
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder setTransferData(TransferData transferData) {
|
public Builder setTransferData(ContactTransferData transferData) {
|
||||||
getInstance().transferData = transferData;
|
getInstance().transferData = transferData;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -380,7 +380,7 @@ public class ContactResource extends EppResource
|
||||||
public ContactResource build() {
|
public ContactResource build() {
|
||||||
ContactResource instance = getInstance();
|
ContactResource instance = getInstance();
|
||||||
// If TransferData is totally empty, set it to null.
|
// If TransferData is totally empty, set it to null.
|
||||||
if (TransferData.EMPTY.equals(instance.transferData)) {
|
if (ContactTransferData.EMPTY.equals(instance.transferData)) {
|
||||||
setTransferData(null);
|
setTransferData(null);
|
||||||
}
|
}
|
||||||
// Set the searchName using the internationalized and localized postal info names.
|
// Set the searchName using the internationalized and localized postal info names.
|
||||||
|
|
|
@ -63,7 +63,7 @@ import google.registry.model.eppcommon.StatusValue;
|
||||||
import google.registry.model.host.HostResource;
|
import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.poll.PollMessage;
|
import google.registry.model.poll.PollMessage;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
import google.registry.persistence.WithStringVKey;
|
import google.registry.persistence.WithStringVKey;
|
||||||
|
@ -110,7 +110,9 @@ import org.joda.time.Interval;
|
||||||
@WithStringVKey
|
@WithStringVKey
|
||||||
@ExternalMessagingName("domain")
|
@ExternalMessagingName("domain")
|
||||||
public class DomainBase extends EppResource
|
public class DomainBase extends EppResource
|
||||||
implements DatastoreAndSqlEntity, ForeignKeyedEppResource, ResourceWithTransferData {
|
implements DatastoreAndSqlEntity,
|
||||||
|
ForeignKeyedEppResource,
|
||||||
|
ResourceWithTransferData<DomainTransferData> {
|
||||||
|
|
||||||
/** The max number of years that a domain can be registered for, as set by ICANN policy. */
|
/** The max number of years that a domain can be registered for, as set by ICANN policy. */
|
||||||
public static final int MAX_REGISTRATION_YEARS = 10;
|
public static final int MAX_REGISTRATION_YEARS = 10;
|
||||||
|
@ -253,7 +255,7 @@ public class DomainBase extends EppResource
|
||||||
String smdId;
|
String smdId;
|
||||||
|
|
||||||
/** Data about any pending or past transfers on this domain. */
|
/** Data about any pending or past transfers on this domain. */
|
||||||
TransferData transferData;
|
DomainTransferData transferData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The time that this resource was last transferred.
|
* The time that this resource was last transferred.
|
||||||
|
@ -322,8 +324,8 @@ public class DomainBase extends EppResource
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TransferData getTransferData() {
|
public DomainTransferData getTransferData() {
|
||||||
return Optional.ofNullable(transferData).orElse(TransferData.EMPTY);
|
return Optional.ofNullable(transferData).orElse(DomainTransferData.EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -402,7 +404,7 @@ public class DomainBase extends EppResource
|
||||||
@Override
|
@Override
|
||||||
public DomainBase cloneProjectedAtTime(final DateTime now) {
|
public DomainBase cloneProjectedAtTime(final DateTime now) {
|
||||||
|
|
||||||
TransferData transferData = getTransferData();
|
DomainTransferData transferData = getTransferData();
|
||||||
DateTime transferExpirationTime = transferData.getPendingTransferExpirationTime();
|
DateTime transferExpirationTime = transferData.getPendingTransferExpirationTime();
|
||||||
|
|
||||||
// If there's a pending transfer that has expired, handle it.
|
// If there's a pending transfer that has expired, handle it.
|
||||||
|
@ -644,7 +646,7 @@ public class DomainBase extends EppResource
|
||||||
|
|
||||||
/** A builder for constructing {@link DomainBase}, since it is immutable. */
|
/** A builder for constructing {@link DomainBase}, since it is immutable. */
|
||||||
public static class Builder extends EppResource.Builder<DomainBase, Builder>
|
public static class Builder extends EppResource.Builder<DomainBase, Builder>
|
||||||
implements BuilderWithTransferData<Builder> {
|
implements BuilderWithTransferData<DomainTransferData, Builder> {
|
||||||
|
|
||||||
public Builder() {}
|
public Builder() {}
|
||||||
|
|
||||||
|
@ -656,7 +658,7 @@ public class DomainBase extends EppResource
|
||||||
public DomainBase build() {
|
public DomainBase build() {
|
||||||
DomainBase instance = getInstance();
|
DomainBase instance = getInstance();
|
||||||
// If TransferData is totally empty, set it to null.
|
// If TransferData is totally empty, set it to null.
|
||||||
if (TransferData.EMPTY.equals(getInstance().transferData)) {
|
if (DomainTransferData.EMPTY.equals(getInstance().transferData)) {
|
||||||
setTransferData(null);
|
setTransferData(null);
|
||||||
}
|
}
|
||||||
// A DomainBase has status INACTIVE if there are no nameservers.
|
// A DomainBase has status INACTIVE if there are no nameservers.
|
||||||
|
@ -830,7 +832,7 @@ public class DomainBase extends EppResource
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder setTransferData(TransferData transferData) {
|
public Builder setTransferData(DomainTransferData transferData) {
|
||||||
getInstance().transferData = transferData;
|
getInstance().transferData = transferData;
|
||||||
return thisCastToDerived();
|
return thisCastToDerived();
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,5 +121,10 @@ public abstract class BaseTransferObject extends ImmutableObject {
|
||||||
getInstance().pendingTransferExpirationTime = pendingTransferExpirationTime;
|
getInstance().pendingTransferExpirationTime = pendingTransferExpirationTime;
|
||||||
return thisCastToDerived();
|
return thisCastToDerived();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T build() {
|
||||||
|
return super.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
// Copyright 2020 The Nomulus Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package google.registry.model.transfer;
|
||||||
|
|
||||||
|
import com.googlecode.objectify.annotation.Embed;
|
||||||
|
import com.googlecode.objectify.annotation.Unindex;
|
||||||
|
import javax.persistence.Embeddable;
|
||||||
|
|
||||||
|
/** Transfer data for contact. */
|
||||||
|
@Embed
|
||||||
|
@Unindex
|
||||||
|
@Embeddable
|
||||||
|
public class ContactTransferData extends TransferData<ContactTransferData.Builder> {
|
||||||
|
public static final ContactTransferData EMPTY = new ContactTransferData();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return EMPTY.equals(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder asBuilder() {
|
||||||
|
return new Builder(clone(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder
|
||||||
|
extends TransferData.Builder<ContactTransferData, ContactTransferData.Builder> {
|
||||||
|
/** Create a {@link ContactTransferData.Builder} wrapping a new instance. */
|
||||||
|
public Builder() {}
|
||||||
|
|
||||||
|
/** Create a {@link ContactTransferData.Builder} wrapping the given instance. */
|
||||||
|
private Builder(ContactTransferData instance) {
|
||||||
|
super(instance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,186 @@
|
||||||
|
// Copyright 2020 The Nomulus Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package google.registry.model.transfer;
|
||||||
|
|
||||||
|
import com.googlecode.objectify.annotation.Embed;
|
||||||
|
import com.googlecode.objectify.annotation.Ignore;
|
||||||
|
import com.googlecode.objectify.annotation.IgnoreSave;
|
||||||
|
import com.googlecode.objectify.annotation.Unindex;
|
||||||
|
import com.googlecode.objectify.condition.IfNull;
|
||||||
|
import google.registry.model.billing.BillingEvent;
|
||||||
|
import google.registry.model.domain.Period;
|
||||||
|
import google.registry.model.domain.Period.Unit;
|
||||||
|
import google.registry.model.poll.PollMessage;
|
||||||
|
import google.registry.persistence.VKey;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import javax.persistence.AttributeOverride;
|
||||||
|
import javax.persistence.AttributeOverrides;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Embeddable;
|
||||||
|
import javax.persistence.Embedded;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
|
/** Transfer data for domain. */
|
||||||
|
@Embed
|
||||||
|
@Unindex
|
||||||
|
@Embeddable
|
||||||
|
public class DomainTransferData extends TransferData<DomainTransferData.Builder> {
|
||||||
|
public static final DomainTransferData EMPTY = new DomainTransferData();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The period to extend the registration upon completion of the transfer.
|
||||||
|
*
|
||||||
|
* <p>By default, domain transfers are for one year. This can be changed to zero by using the
|
||||||
|
* superuser EPP extension.
|
||||||
|
*/
|
||||||
|
@Embedded
|
||||||
|
@AttributeOverrides({
|
||||||
|
@AttributeOverride(name = "unit", column = @Column(name = "transfer_renew_period_unit")),
|
||||||
|
@AttributeOverride(name = "value", column = @Column(name = "transfer_renew_period_value"))
|
||||||
|
})
|
||||||
|
Period transferPeriod = Period.create(1, Unit.YEARS);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The registration expiration time resulting from the approval - speculative or actual - of the
|
||||||
|
* most recent transfer request, applicable for domains only.
|
||||||
|
*
|
||||||
|
* <p>For pending transfers, this is the expiration time that will take effect under a projected
|
||||||
|
* server approval. For approved transfers, this is the actual expiration time of the domain as of
|
||||||
|
* the moment of transfer completion. For rejected or cancelled transfers, this field will be
|
||||||
|
* reset to null.
|
||||||
|
*
|
||||||
|
* <p>Note that even when this field is set, it does not necessarily mean that the post-transfer
|
||||||
|
* domain has a new expiration time. Superuser transfers may not include a bundled 1 year renewal
|
||||||
|
* at all, or even when a renewal is bundled, for a transfer during the autorenew grace period the
|
||||||
|
* bundled renewal simply subsumes the recent autorenewal, resulting in the same expiration time.
|
||||||
|
*/
|
||||||
|
// TODO(b/36405140): backfill this field for existing domains to which it should apply.
|
||||||
|
@Column(name = "transfer_registration_expiration_time")
|
||||||
|
DateTime transferredRegistrationExpirationTime;
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
@Column(name = "transfer_billing_cancellation_id")
|
||||||
|
Long billingCancellationId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The regular one-time billing event that will be charged for a server-approved transfer.
|
||||||
|
*
|
||||||
|
* <p>This field should be null if there is not currently a pending transfer or if the object
|
||||||
|
* being transferred is not a domain.
|
||||||
|
*
|
||||||
|
* <p>TODO(b/158230654) Remove unused columns for TransferData in Contact table.
|
||||||
|
*/
|
||||||
|
@IgnoreSave(IfNull.class)
|
||||||
|
@Column(name = "transfer_billing_event_id")
|
||||||
|
VKey<BillingEvent.OneTime> serverApproveBillingEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The autorenew billing event that should be associated with this resource after the transfer.
|
||||||
|
*
|
||||||
|
* <p>This field should be null if there is not currently a pending transfer or if the object
|
||||||
|
* being transferred is not a domain.
|
||||||
|
*/
|
||||||
|
@IgnoreSave(IfNull.class)
|
||||||
|
@Column(name = "transfer_billing_recurrence_id")
|
||||||
|
VKey<BillingEvent.Recurring> serverApproveAutorenewEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The autorenew poll message that should be associated with this resource after the transfer.
|
||||||
|
*
|
||||||
|
* <p>This field should be null if there is not currently a pending transfer or if the object
|
||||||
|
* being transferred is not a domain.
|
||||||
|
*/
|
||||||
|
@IgnoreSave(IfNull.class)
|
||||||
|
@Column(name = "transfer_autorenew_poll_message_id")
|
||||||
|
VKey<PollMessage.Autorenew> serverApproveAutorenewPollMessage;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder copyConstantFieldsToBuilder() {
|
||||||
|
return super.copyConstantFieldsToBuilder().setTransferPeriod(this.transferPeriod);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Period getTransferPeriod() {
|
||||||
|
return transferPeriod;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public DateTime getTransferredRegistrationExpirationTime() {
|
||||||
|
return transferredRegistrationExpirationTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public VKey<BillingEvent.OneTime> getServerApproveBillingEvent() {
|
||||||
|
return serverApproveBillingEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public VKey<BillingEvent.Recurring> getServerApproveAutorenewEvent() {
|
||||||
|
return serverApproveAutorenewEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public VKey<PollMessage.Autorenew> getServerApproveAutorenewPollMessage() {
|
||||||
|
return serverApproveAutorenewPollMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return EMPTY.equals(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder asBuilder() {
|
||||||
|
return new Builder(clone(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder extends TransferData.Builder<DomainTransferData, Builder> {
|
||||||
|
/** Create a {@link DomainTransferData.Builder} wrapping a new instance. */
|
||||||
|
public Builder() {}
|
||||||
|
|
||||||
|
/** Create a {@link Builder} wrapping the given instance. */
|
||||||
|
private Builder(DomainTransferData instance) {
|
||||||
|
super(instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setTransferPeriod(Period transferPeriod) {
|
||||||
|
getInstance().transferPeriod = transferPeriod;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setTransferredRegistrationExpirationTime(
|
||||||
|
DateTime transferredRegistrationExpirationTime) {
|
||||||
|
getInstance().transferredRegistrationExpirationTime = transferredRegistrationExpirationTime;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setServerApproveBillingEvent(
|
||||||
|
VKey<BillingEvent.OneTime> serverApproveBillingEvent) {
|
||||||
|
getInstance().serverApproveBillingEvent = serverApproveBillingEvent;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setServerApproveAutorenewEvent(
|
||||||
|
VKey<BillingEvent.Recurring> serverApproveAutorenewEvent) {
|
||||||
|
getInstance().serverApproveAutorenewEvent = serverApproveAutorenewEvent;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setServerApproveAutorenewPollMessage(
|
||||||
|
VKey<PollMessage.Autorenew> serverApproveAutorenewPollMessage) {
|
||||||
|
getInstance().serverApproveAutorenewPollMessage = serverApproveAutorenewPollMessage;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,38 +17,31 @@ package google.registry.model.transfer;
|
||||||
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.googlecode.objectify.annotation.Embed;
|
|
||||||
import com.googlecode.objectify.annotation.Ignore;
|
import com.googlecode.objectify.annotation.Ignore;
|
||||||
import com.googlecode.objectify.annotation.IgnoreSave;
|
import com.googlecode.objectify.annotation.IgnoreSave;
|
||||||
import com.googlecode.objectify.annotation.Unindex;
|
|
||||||
import com.googlecode.objectify.condition.IfNull;
|
import com.googlecode.objectify.condition.IfNull;
|
||||||
import google.registry.model.Buildable;
|
import google.registry.model.Buildable;
|
||||||
import google.registry.model.EppResource;
|
import google.registry.model.EppResource;
|
||||||
import google.registry.model.billing.BillingEvent;
|
|
||||||
import google.registry.model.domain.Period;
|
|
||||||
import google.registry.model.domain.Period.Unit;
|
|
||||||
import google.registry.model.eppcommon.Trid;
|
import google.registry.model.eppcommon.Trid;
|
||||||
import google.registry.model.poll.PollMessage;
|
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
|
import google.registry.util.TypeUtils.TypeInstantiator;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.persistence.AttributeOverride;
|
import javax.persistence.AttributeOverride;
|
||||||
import javax.persistence.AttributeOverrides;
|
import javax.persistence.AttributeOverrides;
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.Embedded;
|
import javax.persistence.Embedded;
|
||||||
|
import javax.persistence.MappedSuperclass;
|
||||||
import javax.persistence.Transient;
|
import javax.persistence.Transient;
|
||||||
import org.joda.time.DateTime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common transfer data for {@link EppResource} types. Only applies to domains and contacts; hosts
|
* Common transfer data for {@link EppResource} types. Only applies to domains and contacts; hosts
|
||||||
* are implicitly transferred with their superordinate domain.
|
* are implicitly transferred with their superordinate domain.
|
||||||
*/
|
*/
|
||||||
@Embed
|
@MappedSuperclass
|
||||||
@Unindex
|
public abstract class TransferData<
|
||||||
@javax.persistence.Embeddable
|
B extends TransferData.Builder<? extends TransferData, ? extends TransferData.Builder>>
|
||||||
public class TransferData extends BaseTransferObject implements Buildable {
|
extends BaseTransferObject implements Buildable {
|
||||||
|
|
||||||
public static final TransferData EMPTY = new TransferData();
|
|
||||||
|
|
||||||
/** The transaction id of the most recent transfer request (or null if there never was one). */
|
/** The transaction id of the most recent transfer request (or null if there never was one). */
|
||||||
@Embedded
|
@Embedded
|
||||||
|
@ -62,37 +55,6 @@ public class TransferData extends BaseTransferObject implements Buildable {
|
||||||
})
|
})
|
||||||
Trid transferRequestTrid;
|
Trid transferRequestTrid;
|
||||||
|
|
||||||
/**
|
|
||||||
* The period to extend the registration upon completion of the transfer.
|
|
||||||
*
|
|
||||||
* <p>By default, domain transfers are for one year. This can be changed to zero by using the
|
|
||||||
* superuser EPP extension.
|
|
||||||
*/
|
|
||||||
@Embedded
|
|
||||||
@AttributeOverrides({
|
|
||||||
@AttributeOverride(name = "unit", column = @Column(name = "transfer_renew_period_unit")),
|
|
||||||
@AttributeOverride(name = "value", column = @Column(name = "transfer_renew_period_value"))
|
|
||||||
})
|
|
||||||
Period transferPeriod = Period.create(1, Unit.YEARS);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The registration expiration time resulting from the approval - speculative or actual - of the
|
|
||||||
* most recent transfer request, applicable for domains only.
|
|
||||||
*
|
|
||||||
* <p>For pending transfers, this is the expiration time that will take effect under a projected
|
|
||||||
* server approval. For approved transfers, this is the actual expiration time of the domain as of
|
|
||||||
* the moment of transfer completion. For rejected or cancelled transfers, this field will be
|
|
||||||
* reset to null.
|
|
||||||
*
|
|
||||||
* <p>Note that even when this field is set, it does not necessarily mean that the post-transfer
|
|
||||||
* domain has a new expiration time. Superuser transfers may not include a bundled 1 year renewal
|
|
||||||
* at all, or even when a renewal is bundled, for a transfer during the autorenew grace period the
|
|
||||||
* bundled renewal simply subsumes the recent autorenewal, resulting in the same expiration time.
|
|
||||||
*/
|
|
||||||
// TODO(b/36405140): backfill this field for existing domains to which it should apply.
|
|
||||||
@Column(name = "transfer_registration_expiration_time")
|
|
||||||
DateTime transferredRegistrationExpirationTime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The billing event and poll messages associated with a server-approved transfer.
|
* The billing event and poll messages associated with a server-approved transfer.
|
||||||
*
|
*
|
||||||
|
@ -116,85 +78,26 @@ public class TransferData extends BaseTransferObject implements Buildable {
|
||||||
@Column(name = "transfer_losing_poll_message_id")
|
@Column(name = "transfer_losing_poll_message_id")
|
||||||
Long losingTransferPollMessageId;
|
Long losingTransferPollMessageId;
|
||||||
|
|
||||||
@Ignore
|
public abstract boolean isEmpty();
|
||||||
@Column(name = "transfer_billing_cancellation_id")
|
|
||||||
Long billingCancellationId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The regular one-time billing event that will be charged for a server-approved transfer.
|
|
||||||
*
|
|
||||||
* <p>This field should be null if there is not currently a pending transfer or if the object
|
|
||||||
* being transferred is not a domain.
|
|
||||||
*
|
|
||||||
* <p>TODO(b/158230654) Remove unused columns for TransferData in Contact table.
|
|
||||||
*/
|
|
||||||
@IgnoreSave(IfNull.class)
|
|
||||||
@Column(name = "transfer_billing_event_id")
|
|
||||||
VKey<BillingEvent.OneTime> serverApproveBillingEvent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The autorenew billing event that should be associated with this resource after the transfer.
|
|
||||||
*
|
|
||||||
* <p>This field should be null if there is not currently a pending transfer or if the object
|
|
||||||
* being transferred is not a domain.
|
|
||||||
*/
|
|
||||||
@IgnoreSave(IfNull.class)
|
|
||||||
@Column(name = "transfer_billing_recurrence_id")
|
|
||||||
VKey<BillingEvent.Recurring> serverApproveAutorenewEvent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The autorenew poll message that should be associated with this resource after the transfer.
|
|
||||||
*
|
|
||||||
* <p>This field should be null if there is not currently a pending transfer or if the object
|
|
||||||
* being transferred is not a domain.
|
|
||||||
*/
|
|
||||||
@IgnoreSave(IfNull.class)
|
|
||||||
@Column(name = "transfer_autorenew_poll_message_id")
|
|
||||||
VKey<PollMessage.Autorenew> serverApproveAutorenewPollMessage;
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public Trid getTransferRequestTrid() {
|
public Trid getTransferRequestTrid() {
|
||||||
return transferRequestTrid;
|
return transferRequestTrid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Period getTransferPeriod() {
|
|
||||||
return transferPeriod;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public DateTime getTransferredRegistrationExpirationTime() {
|
|
||||||
return transferredRegistrationExpirationTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImmutableSet<VKey<? extends TransferServerApproveEntity>> getServerApproveEntities() {
|
public ImmutableSet<VKey<? extends TransferServerApproveEntity>> getServerApproveEntities() {
|
||||||
return nullToEmptyImmutableCopy(serverApproveEntities);
|
return nullToEmptyImmutableCopy(serverApproveEntities);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public VKey<BillingEvent.OneTime> getServerApproveBillingEvent() {
|
|
||||||
return serverApproveBillingEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public VKey<BillingEvent.Recurring> getServerApproveAutorenewEvent() {
|
|
||||||
return serverApproveAutorenewEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public VKey<PollMessage.Autorenew> getServerApproveAutorenewPollMessage() {
|
|
||||||
return serverApproveAutorenewPollMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Builder asBuilder() {
|
public abstract Builder asBuilder();
|
||||||
return new Builder(clone(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a fresh Builder populated only with the constant fields of this TransferData, i.e.
|
* Returns a fresh Builder populated only with the constant fields of this TransferData, i.e.
|
||||||
* those that are fixed and unchanging throughout the transfer process.
|
* those that are fixed and unchanging throughout the transfer process.
|
||||||
*
|
*
|
||||||
* <p>These fields are:
|
* <p>These fields are:
|
||||||
|
*
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>transferRequestTrid
|
* <li>transferRequestTrid
|
||||||
* <li>transferRequestTime
|
* <li>transferRequestTime
|
||||||
|
@ -203,64 +106,43 @@ public class TransferData extends BaseTransferObject implements Buildable {
|
||||||
* <li>transferPeriod
|
* <li>transferPeriod
|
||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public Builder copyConstantFieldsToBuilder() {
|
public B copyConstantFieldsToBuilder() {
|
||||||
return new Builder()
|
B newBuilder = new TypeInstantiator<B>(getClass()) {}.instantiate();
|
||||||
|
newBuilder
|
||||||
|
// .setTransferPeriod(this.transferPeriod)
|
||||||
.setTransferRequestTrid(this.transferRequestTrid)
|
.setTransferRequestTrid(this.transferRequestTrid)
|
||||||
.setTransferRequestTime(this.transferRequestTime)
|
.setTransferRequestTime(this.transferRequestTime)
|
||||||
.setGainingClientId(this.gainingClientId)
|
.setGainingClientId(this.gainingClientId)
|
||||||
.setLosingClientId(this.losingClientId)
|
.setLosingClientId(this.losingClientId);
|
||||||
.setTransferPeriod(this.transferPeriod);
|
return newBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Builder for {@link TransferData} because it is immutable. */
|
/** Builder for {@link TransferData} because it is immutable. */
|
||||||
public static class Builder extends BaseTransferObject.Builder<TransferData, Builder> {
|
public abstract static class Builder<T extends TransferData, B extends Builder<T, B>>
|
||||||
|
extends BaseTransferObject.Builder<T, B> {
|
||||||
|
|
||||||
/** Create a {@link Builder} wrapping a new instance. */
|
/** Create a {@link Builder} wrapping a new instance. */
|
||||||
public Builder() {}
|
public Builder() {}
|
||||||
|
|
||||||
/** Create a {@link Builder} wrapping the given instance. */
|
/** Create a {@link Builder} wrapping the given instance. */
|
||||||
private Builder(TransferData instance) {
|
protected Builder(T instance) {
|
||||||
super(instance);
|
super(instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder setTransferRequestTrid(Trid transferRequestTrid) {
|
public B setTransferRequestTrid(Trid transferRequestTrid) {
|
||||||
getInstance().transferRequestTrid = transferRequestTrid;
|
getInstance().transferRequestTrid = transferRequestTrid;
|
||||||
return this;
|
return thisCastToDerived();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder setTransferPeriod(Period transferPeriod) {
|
public B setServerApproveEntities(
|
||||||
getInstance().transferPeriod = transferPeriod;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setTransferredRegistrationExpirationTime(
|
|
||||||
DateTime transferredRegistrationExpirationTime) {
|
|
||||||
getInstance().transferredRegistrationExpirationTime = transferredRegistrationExpirationTime;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setServerApproveEntities(
|
|
||||||
ImmutableSet<VKey<? extends TransferServerApproveEntity>> serverApproveEntities) {
|
ImmutableSet<VKey<? extends TransferServerApproveEntity>> serverApproveEntities) {
|
||||||
getInstance().serverApproveEntities = serverApproveEntities;
|
getInstance().serverApproveEntities = serverApproveEntities;
|
||||||
return this;
|
return thisCastToDerived();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder setServerApproveBillingEvent(
|
@Override
|
||||||
VKey<BillingEvent.OneTime> serverApproveBillingEvent) {
|
public T build() {
|
||||||
getInstance().serverApproveBillingEvent = serverApproveBillingEvent;
|
return super.build();
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setServerApproveAutorenewEvent(
|
|
||||||
VKey<BillingEvent.Recurring> serverApproveAutorenewEvent) {
|
|
||||||
getInstance().serverApproveAutorenewEvent = serverApproveAutorenewEvent;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setServerApproveAutorenewPollMessage(
|
|
||||||
VKey<PollMessage.Autorenew> serverApproveAutorenewPollMessage) {
|
|
||||||
getInstance().serverApproveAutorenewPollMessage = serverApproveAutorenewPollMessage;
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,6 @@ import google.registry.xjc.eppcom.XjcEppcomTrStatusType;
|
||||||
import google.registry.xjc.rdecontact.XjcRdeContact;
|
import google.registry.xjc.rdecontact.XjcRdeContact;
|
||||||
import google.registry.xjc.rdecontact.XjcRdeContactElement;
|
import google.registry.xjc.rdecontact.XjcRdeContactElement;
|
||||||
import google.registry.xjc.rdecontact.XjcRdeContactTransferDataType;
|
import google.registry.xjc.rdecontact.XjcRdeContactTransferDataType;
|
||||||
import java.util.Objects;
|
|
||||||
import javax.annotation.CheckForNull;
|
import javax.annotation.CheckForNull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
@ -102,7 +101,7 @@ final class ContactResourceToXjcConverter {
|
||||||
// required before an automated response action will be taken by
|
// required before an automated response action will be taken by
|
||||||
// the registry. For all other status types, the value identifies
|
// the registry. For all other status types, the value identifies
|
||||||
// the date and time when the request was completed.
|
// the date and time when the request was completed.
|
||||||
if (!Objects.equals(model.getTransferData(), TransferData.EMPTY)) {
|
if (!model.getTransferData().isEmpty()) {
|
||||||
bean.setTrnData(convertTransferData(model.getTransferData()));
|
bean.setTrnData(convertTransferData(model.getTransferData()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import google.registry.model.domain.rgp.GracePeriodStatus;
|
||||||
import google.registry.model.domain.secdns.DelegationSignerData;
|
import google.registry.model.domain.secdns.DelegationSignerData;
|
||||||
import google.registry.model.eppcommon.StatusValue;
|
import google.registry.model.eppcommon.StatusValue;
|
||||||
import google.registry.model.rde.RdeMode;
|
import google.registry.model.rde.RdeMode;
|
||||||
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.TransferData;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
import google.registry.util.Idn;
|
import google.registry.util.Idn;
|
||||||
|
@ -234,7 +235,7 @@ final class DomainBaseToXjcConverter {
|
||||||
// * An OPTIONAL <exDate> element that contains the end of the
|
// * An OPTIONAL <exDate> element that contains the end of the
|
||||||
// domain name object's validity period (expiry date) if the
|
// domain name object's validity period (expiry date) if the
|
||||||
// transfer caused or causes a change in the validity period.
|
// transfer caused or causes a change in the validity period.
|
||||||
if (!model.getTransferData().equals(TransferData.EMPTY)) {
|
if (!model.getTransferData().isEmpty()) {
|
||||||
// Temporary check to make sure that there really was a transfer. A bug caused spurious
|
// Temporary check to make sure that there really was a transfer. A bug caused spurious
|
||||||
// empty transfer records to get generated for deleted domains.
|
// empty transfer records to get generated for deleted domains.
|
||||||
// TODO(b/33289763): remove the hasGainingAndLosingRegistrars check in February 2017
|
// TODO(b/33289763): remove the hasGainingAndLosingRegistrars check in February 2017
|
||||||
|
@ -258,7 +259,7 @@ final class DomainBaseToXjcConverter {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Converts {@link TransferData} to {@link XjcRdeDomainTransferDataType}. */
|
/** Converts {@link TransferData} to {@link XjcRdeDomainTransferDataType}. */
|
||||||
private static XjcRdeDomainTransferDataType convertTransferData(TransferData model) {
|
private static XjcRdeDomainTransferDataType convertTransferData(DomainTransferData model) {
|
||||||
XjcRdeDomainTransferDataType bean = new XjcRdeDomainTransferDataType();
|
XjcRdeDomainTransferDataType bean = new XjcRdeDomainTransferDataType();
|
||||||
bean.setTrStatus(
|
bean.setTrStatus(
|
||||||
XjcEppcomTrStatusType.fromValue(model.getTransferStatus().getXmlName()));
|
XjcEppcomTrStatusType.fromValue(model.getTransferStatus().getXmlName()));
|
||||||
|
|
|
@ -87,6 +87,7 @@ import google.registry.model.poll.PollMessage.OneTime;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.server.Lock;
|
import google.registry.model.server.Lock;
|
||||||
|
import google.registry.model.transfer.ContactTransferData;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.TransferData;
|
||||||
import google.registry.model.transfer.TransferResponse;
|
import google.registry.model.transfer.TransferResponse;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
|
@ -303,7 +304,7 @@ public class DeleteContactsAndHostsActionTest
|
||||||
false);
|
false);
|
||||||
runMapreduce();
|
runMapreduce();
|
||||||
ContactResource contactAfterDeletion = ofy().load().entity(contact).now();
|
ContactResource contactAfterDeletion = ofy().load().entity(contact).now();
|
||||||
assertThat(contactAfterDeletion.getTransferData()).isEqualTo(TransferData.EMPTY);
|
assertThat(contactAfterDeletion.getTransferData()).isEqualTo(ContactTransferData.EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -43,14 +43,12 @@ import google.registry.flows.exceptions.ObjectAlreadySponsoredException;
|
||||||
import google.registry.flows.exceptions.ResourceStatusProhibitsOperationException;
|
import google.registry.flows.exceptions.ResourceStatusProhibitsOperationException;
|
||||||
import google.registry.model.contact.ContactAuthInfo;
|
import google.registry.model.contact.ContactAuthInfo;
|
||||||
import google.registry.model.contact.ContactResource;
|
import google.registry.model.contact.ContactResource;
|
||||||
import google.registry.model.domain.Period;
|
|
||||||
import google.registry.model.domain.Period.Unit;
|
|
||||||
import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
|
import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
|
||||||
import google.registry.model.eppcommon.StatusValue;
|
import google.registry.model.eppcommon.StatusValue;
|
||||||
import google.registry.model.eppcommon.Trid;
|
import google.registry.model.eppcommon.Trid;
|
||||||
import google.registry.model.poll.PollMessage;
|
import google.registry.model.poll.PollMessage;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.ContactTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
@ -95,13 +93,11 @@ public class ContactTransferRequestFlowTest
|
||||||
contact.getTransferData().getTransferRequestTrid().getServerTransactionId());
|
contact.getTransferData().getTransferRequestTrid().getServerTransactionId());
|
||||||
assertThat(contact.getTransferData())
|
assertThat(contact.getTransferData())
|
||||||
.isEqualTo(
|
.isEqualTo(
|
||||||
new TransferData.Builder()
|
new ContactTransferData.Builder()
|
||||||
.setTransferRequestTrid(expectedTrid)
|
.setTransferRequestTrid(expectedTrid)
|
||||||
.setTransferRequestTime(clock.nowUtc())
|
.setTransferRequestTime(clock.nowUtc())
|
||||||
.setGainingClientId("NewRegistrar")
|
.setGainingClientId("NewRegistrar")
|
||||||
.setLosingClientId("TheRegistrar")
|
.setLosingClientId("TheRegistrar")
|
||||||
// Period is meaningless for contact transfers, but this is the default.
|
|
||||||
.setTransferPeriod(Period.create(1, Unit.YEARS))
|
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setPendingTransferExpirationTime(afterTransfer)
|
.setPendingTransferExpirationTime(afterTransfer)
|
||||||
// Make the server-approve entities field a no-op comparison; it's easier to
|
// Make the server-approve entities field a no-op comparison; it's easier to
|
||||||
|
|
|
@ -90,7 +90,7 @@ import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.registry.Registry.TldType;
|
import google.registry.model.registry.Registry.TldType;
|
||||||
import google.registry.model.reporting.DomainTransactionRecord;
|
import google.registry.model.reporting.DomainTransactionRecord;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferResponse;
|
import google.registry.model.transfer.TransferResponse;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
|
@ -595,7 +595,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
|
||||||
clock.advanceOneMilli();
|
clock.advanceOneMilli();
|
||||||
runFlowAssertResponse(loadFile("domain_delete_response_pending.xml"));
|
runFlowAssertResponse(loadFile("domain_delete_response_pending.xml"));
|
||||||
DomainBase domain = reloadResourceByForeignKey();
|
DomainBase domain = reloadResourceByForeignKey();
|
||||||
assertThat(domain.getTransferData()).isEqualTo(TransferData.EMPTY);
|
assertThat(domain.getTransferData()).isEqualTo(DomainTransferData.EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -603,7 +603,7 @@ public class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow,
|
||||||
setClientIdForFlow("TheRegistrar");
|
setClientIdForFlow("TheRegistrar");
|
||||||
setUpSuccessfulTest();
|
setUpSuccessfulTest();
|
||||||
// Modify the domain we are testing to include a pending transfer.
|
// Modify the domain we are testing to include a pending transfer.
|
||||||
TransferData oldTransferData =
|
DomainTransferData oldTransferData =
|
||||||
persistWithPendingTransfer(reloadResourceByForeignKey()).getTransferData();
|
persistWithPendingTransfer(reloadResourceByForeignKey()).getTransferData();
|
||||||
clock.advanceOneMilli();
|
clock.advanceOneMilli();
|
||||||
runFlowAssertResponse(loadFile("domain_delete_response_pending.xml"));
|
runFlowAssertResponse(loadFile("domain_delete_response_pending.xml"));
|
||||||
|
|
|
@ -68,7 +68,7 @@ import google.registry.model.poll.PollMessage;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.DomainTransactionRecord;
|
import google.registry.model.reporting.DomainTransactionRecord;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferResponse.DomainTransferResponse;
|
import google.registry.model.transfer.TransferResponse.DomainTransferResponse;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
|
@ -109,7 +109,7 @@ public class DomainTransferApproveFlowTest
|
||||||
clock.advanceOneMilli();
|
clock.advanceOneMilli();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertTransferApproved(DomainBase domain, TransferData oldTransferData) {
|
private void assertTransferApproved(DomainBase domain, DomainTransferData oldTransferData) {
|
||||||
assertAboutDomains()
|
assertAboutDomains()
|
||||||
.that(domain)
|
.that(domain)
|
||||||
.hasCurrentSponsorClientId("NewRegistrar")
|
.hasCurrentSponsorClientId("NewRegistrar")
|
||||||
|
@ -178,7 +178,7 @@ public class DomainTransferApproveFlowTest
|
||||||
assertThat(getPollMessages(domain, "NewRegistrar", clock.nowUtc().plusMonths(1))).hasSize(1);
|
assertThat(getPollMessages(domain, "NewRegistrar", clock.nowUtc().plusMonths(1))).hasSize(1);
|
||||||
assertThat(getPollMessages(domain, "TheRegistrar", clock.nowUtc().plusMonths(1))).hasSize(1);
|
assertThat(getPollMessages(domain, "TheRegistrar", clock.nowUtc().plusMonths(1))).hasSize(1);
|
||||||
// Setup done; run the test.
|
// Setup done; run the test.
|
||||||
TransferData originalTransferData = domain.getTransferData();
|
DomainTransferData originalTransferData = domain.getTransferData();
|
||||||
assertTransactionalFlow(true);
|
assertTransactionalFlow(true);
|
||||||
runFlowAssertResponse(loadFile(expectedXmlFilename));
|
runFlowAssertResponse(loadFile(expectedXmlFilename));
|
||||||
// Transfer should have succeeded. Verify correct fields were set.
|
// Transfer should have succeeded. Verify correct fields were set.
|
||||||
|
@ -616,7 +616,7 @@ public class DomainTransferApproveFlowTest
|
||||||
@Test
|
@Test
|
||||||
public void testSuccess_superuserExtension_transferPeriodZero() throws Exception {
|
public void testSuccess_superuserExtension_transferPeriodZero() throws Exception {
|
||||||
domain = reloadResourceByForeignKey();
|
domain = reloadResourceByForeignKey();
|
||||||
TransferData.Builder transferDataBuilder = domain.getTransferData().asBuilder();
|
DomainTransferData.Builder transferDataBuilder = domain.getTransferData().asBuilder();
|
||||||
persistResource(
|
persistResource(
|
||||||
domain
|
domain
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
|
@ -641,7 +641,7 @@ public class DomainTransferApproveFlowTest
|
||||||
// active autorenew grace period spanning the entire transfer window.
|
// active autorenew grace period spanning the entire transfer window.
|
||||||
DateTime autorenewTime = clock.nowUtc().minusDays(1);
|
DateTime autorenewTime = clock.nowUtc().minusDays(1);
|
||||||
DateTime expirationTime = autorenewTime.plusYears(1);
|
DateTime expirationTime = autorenewTime.plusYears(1);
|
||||||
TransferData.Builder transferDataBuilder = domain.getTransferData().asBuilder();
|
DomainTransferData.Builder transferDataBuilder = domain.getTransferData().asBuilder();
|
||||||
domain =
|
domain =
|
||||||
persistResource(
|
persistResource(
|
||||||
domain
|
domain
|
||||||
|
|
|
@ -98,7 +98,7 @@ import google.registry.model.registrar.Registrar.State;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.DomainTransactionRecord;
|
import google.registry.model.reporting.DomainTransactionRecord;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferResponse;
|
import google.registry.model.transfer.TransferResponse;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
|
@ -213,7 +213,7 @@ public class DomainTransferRequestFlowTest
|
||||||
domain.getTransferData().getTransferRequestTrid().getServerTransactionId());
|
domain.getTransferData().getTransferRequestTrid().getServerTransactionId());
|
||||||
assertThat(domain.getTransferData())
|
assertThat(domain.getTransferData())
|
||||||
.isEqualTo(
|
.isEqualTo(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setGainingClientId("NewRegistrar")
|
.setGainingClientId("NewRegistrar")
|
||||||
.setLosingClientId("TheRegistrar")
|
.setLosingClientId("TheRegistrar")
|
||||||
.setTransferRequestTrid(expectedTrid)
|
.setTransferRequestTrid(expectedTrid)
|
||||||
|
|
|
@ -44,7 +44,7 @@ import google.registry.model.eppcommon.Trid;
|
||||||
import google.registry.model.host.HostResource;
|
import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
@ -226,7 +226,7 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
|
||||||
.setPersistedCurrentSponsorClientId("NewRegistrar") // Shouldn't hurt.
|
.setPersistedCurrentSponsorClientId("NewRegistrar") // Shouldn't hurt.
|
||||||
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setGainingClientId("NewRegistrar")
|
.setGainingClientId("NewRegistrar")
|
||||||
.setTransferRequestTime(requestTime)
|
.setTransferRequestTime(requestTime)
|
||||||
|
@ -259,7 +259,7 @@ public class HostDeleteFlowTest extends ResourceFlowTestCase<HostDeleteFlow, Hos
|
||||||
.setPersistedCurrentSponsorClientId("NewRegistrar") // Shouldn't help.
|
.setPersistedCurrentSponsorClientId("NewRegistrar") // Shouldn't help.
|
||||||
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setGainingClientId("TheRegistrar")
|
.setGainingClientId("TheRegistrar")
|
||||||
.setTransferRequestTime(requestTime)
|
.setTransferRequestTime(requestTime)
|
||||||
|
|
|
@ -74,7 +74,7 @@ import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.index.ForeignKeyIndex;
|
import google.registry.model.index.ForeignKeyIndex;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.testing.TaskQueueHelper.TaskMatcher;
|
import google.registry.testing.TaskQueueHelper.TaskMatcher;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
@ -117,7 +117,7 @@ public class HostUpdateFlowTest extends ResourceFlowTestCase<HostUpdateFlow, Hos
|
||||||
.setPersistedCurrentSponsorClientId("TheRegistrar")
|
.setPersistedCurrentSponsorClientId("TheRegistrar")
|
||||||
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setGainingClientId("NewRegistrar")
|
.setGainingClientId("NewRegistrar")
|
||||||
.setTransferRequestTime(requestTime)
|
.setTransferRequestTime(requestTime)
|
||||||
|
|
|
@ -37,7 +37,7 @@ import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
|
||||||
import google.registry.model.eppcommon.PresenceMarker;
|
import google.registry.model.eppcommon.PresenceMarker;
|
||||||
import google.registry.model.eppcommon.StatusValue;
|
import google.registry.model.eppcommon.StatusValue;
|
||||||
import google.registry.model.eppcommon.Trid;
|
import google.registry.model.eppcommon.Trid;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.ContactTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
@ -108,7 +108,7 @@ public class ContactResourceTest extends EntityTestCase {
|
||||||
.build())
|
.build())
|
||||||
.setStatusValues(ImmutableSet.of(StatusValue.OK))
|
.setStatusValues(ImmutableSet.of(StatusValue.OK))
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new ContactTransferData.Builder()
|
||||||
.setGainingClientId("gaining")
|
.setGainingClientId("gaining")
|
||||||
.setLosingClientId("losing")
|
.setLosingClientId("losing")
|
||||||
.setPendingTransferExpirationTime(fakeClock.nowUtc())
|
.setPendingTransferExpirationTime(fakeClock.nowUtc())
|
||||||
|
@ -205,7 +205,8 @@ public class ContactResourceTest extends EntityTestCase {
|
||||||
@Test
|
@Test
|
||||||
public void testEmptyTransferDataBecomesNull() {
|
public void testEmptyTransferDataBecomesNull() {
|
||||||
ContactResource withNull = new ContactResource.Builder().setTransferData(null).build();
|
ContactResource withNull = new ContactResource.Builder().setTransferData(null).build();
|
||||||
ContactResource withEmpty = withNull.asBuilder().setTransferData(TransferData.EMPTY).build();
|
ContactResource withEmpty =
|
||||||
|
withNull.asBuilder().setTransferData(ContactTransferData.EMPTY).build();
|
||||||
assertThat(withNull).isEqualTo(withEmpty);
|
assertThat(withNull).isEqualTo(withEmpty);
|
||||||
assertThat(withEmpty.transferData).isNull();
|
assertThat(withEmpty.transferData).isNull();
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ import google.registry.model.domain.secdns.DelegationSignerData;
|
||||||
import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
|
import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
|
||||||
import google.registry.model.eppcommon.StatusValue;
|
import google.registry.model.eppcommon.StatusValue;
|
||||||
import google.registry.model.host.HostResource;
|
import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.ContactTransferData;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
import google.registry.persistence.transaction.JpaTestRules;
|
import google.registry.persistence.transaction.JpaTestRules;
|
||||||
import google.registry.persistence.transaction.JpaTestRules.JpaIntegrationWithCoverageExtension;
|
import google.registry.persistence.transaction.JpaTestRules.JpaIntegrationWithCoverageExtension;
|
||||||
|
@ -191,7 +191,7 @@ public class DomainBaseSqlTest {
|
||||||
return new ContactResource.Builder()
|
return new ContactResource.Builder()
|
||||||
.setRepoId(repoId)
|
.setRepoId(repoId)
|
||||||
.setCreationClientId("registrar1")
|
.setCreationClientId("registrar1")
|
||||||
.setTransferData(new TransferData.Builder().build())
|
.setTransferData(new ContactTransferData.Builder().build())
|
||||||
.setPersistedCurrentSponsorClientId("registrar1")
|
.setPersistedCurrentSponsorClientId("registrar1")
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.poll.PollMessage;
|
import google.registry.model.poll.PollMessage;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
import org.joda.money.Money;
|
import org.joda.money.Money;
|
||||||
|
@ -133,7 +133,7 @@ public class DomainBaseTest extends EntityTestCase {
|
||||||
.setLaunchNotice(
|
.setLaunchNotice(
|
||||||
LaunchNotice.create("tcnid", "validatorId", START_OF_TIME, START_OF_TIME))
|
LaunchNotice.create("tcnid", "validatorId", START_OF_TIME, START_OF_TIME))
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setGainingClientId("gaining")
|
.setGainingClientId("gaining")
|
||||||
.setLosingClientId("losing")
|
.setLosingClientId("losing")
|
||||||
.setPendingTransferExpirationTime(fakeClock.nowUtc())
|
.setPendingTransferExpirationTime(fakeClock.nowUtc())
|
||||||
|
@ -267,7 +267,7 @@ public class DomainBaseTest extends EntityTestCase {
|
||||||
@Test
|
@Test
|
||||||
public void testEmptyTransferDataBecomesNull() {
|
public void testEmptyTransferDataBecomesNull() {
|
||||||
DomainBase withNull = newDomainBase("example.com").asBuilder().setTransferData(null).build();
|
DomainBase withNull = newDomainBase("example.com").asBuilder().setTransferData(null).build();
|
||||||
DomainBase withEmpty = withNull.asBuilder().setTransferData(TransferData.EMPTY).build();
|
DomainBase withEmpty = withNull.asBuilder().setTransferData(DomainTransferData.EMPTY).build();
|
||||||
assertThat(withNull).isEqualTo(withEmpty);
|
assertThat(withNull).isEqualTo(withEmpty);
|
||||||
assertThat(withEmpty.transferData).isNull();
|
assertThat(withEmpty.transferData).isNull();
|
||||||
}
|
}
|
||||||
|
@ -478,7 +478,7 @@ public class DomainBaseTest extends EntityTestCase {
|
||||||
domain
|
domain
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
.setRegistrationExpirationTime(oldExpirationTime)
|
.setRegistrationExpirationTime(oldExpirationTime)
|
||||||
.setTransferData(TransferData.EMPTY)
|
.setTransferData(DomainTransferData.EMPTY)
|
||||||
.setGracePeriods(ImmutableSet.of())
|
.setGracePeriods(ImmutableSet.of())
|
||||||
.setLastEppUpdateTime(null)
|
.setLastEppUpdateTime(null)
|
||||||
.setLastEppUpdateClientId(null)
|
.setLastEppUpdateClientId(null)
|
||||||
|
@ -666,8 +666,8 @@ public class DomainBaseTest extends EntityTestCase {
|
||||||
DateTime transferExpirationTime = now.minusDays(1);
|
DateTime transferExpirationTime = now.minusDays(1);
|
||||||
DateTime previousExpiration = now.minusDays(2);
|
DateTime previousExpiration = now.minusDays(2);
|
||||||
|
|
||||||
TransferData transferData =
|
DomainTransferData transferData =
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setPendingTransferExpirationTime(transferExpirationTime)
|
.setPendingTransferExpirationTime(transferExpirationTime)
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setGainingClientId("TheRegistrar")
|
.setGainingClientId("TheRegistrar")
|
||||||
|
@ -694,8 +694,8 @@ public class DomainBaseTest extends EntityTestCase {
|
||||||
DateTime transferExpirationTime = now.minusDays(1);
|
DateTime transferExpirationTime = now.minusDays(1);
|
||||||
DateTime previousExpiration = now.plusWeeks(2);
|
DateTime previousExpiration = now.plusWeeks(2);
|
||||||
|
|
||||||
TransferData transferData =
|
DomainTransferData transferData =
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setPendingTransferExpirationTime(transferExpirationTime)
|
.setPendingTransferExpirationTime(transferExpirationTime)
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setGainingClientId("TheRegistrar")
|
.setGainingClientId("TheRegistrar")
|
||||||
|
@ -721,8 +721,8 @@ public class DomainBaseTest extends EntityTestCase {
|
||||||
DateTime transferExpirationTime = now.plusDays(1);
|
DateTime transferExpirationTime = now.plusDays(1);
|
||||||
DateTime previousExpiration = now.plusWeeks(2);
|
DateTime previousExpiration = now.plusWeeks(2);
|
||||||
|
|
||||||
TransferData transferData =
|
DomainTransferData transferData =
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setPendingTransferExpirationTime(transferExpirationTime)
|
.setPendingTransferExpirationTime(transferExpirationTime)
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setGainingClientId("TheRegistrar")
|
.setGainingClientId("TheRegistrar")
|
||||||
|
@ -747,8 +747,8 @@ public class DomainBaseTest extends EntityTestCase {
|
||||||
DateTime transferExpirationTime = now.minusDays(1);
|
DateTime transferExpirationTime = now.minusDays(1);
|
||||||
DateTime previousExpiration = now.minusDays(2);
|
DateTime previousExpiration = now.minusDays(2);
|
||||||
|
|
||||||
TransferData transferData =
|
DomainTransferData transferData =
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setPendingTransferExpirationTime(transferExpirationTime)
|
.setPendingTransferExpirationTime(transferExpirationTime)
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setGainingClientId("TheRegistrar")
|
.setGainingClientId("TheRegistrar")
|
||||||
|
|
|
@ -31,7 +31,7 @@ import google.registry.model.billing.BillingEvent;
|
||||||
import google.registry.model.domain.DomainBase;
|
import google.registry.model.domain.DomainBase;
|
||||||
import google.registry.model.eppcommon.StatusValue;
|
import google.registry.model.eppcommon.StatusValue;
|
||||||
import google.registry.model.eppcommon.Trid;
|
import google.registry.model.eppcommon.Trid;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
@ -58,7 +58,7 @@ public class HostResourceTest extends EntityTestCase {
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
.setRepoId("1-COM")
|
.setRepoId("1-COM")
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setGainingClientId("gaining")
|
.setGainingClientId("gaining")
|
||||||
.setLosingClientId("losing")
|
.setLosingClientId("losing")
|
||||||
.setPendingTransferExpirationTime(fakeClock.nowUtc())
|
.setPendingTransferExpirationTime(fakeClock.nowUtc())
|
||||||
|
|
|
@ -57,8 +57,8 @@ public class TransferDataTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test_copyConstantFieldsToBuilder() {
|
public void test_copyConstantFieldsToBuilder() {
|
||||||
TransferData constantTransferData =
|
DomainTransferData constantTransferData =
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setTransferRequestTrid(Trid.create("server-trid", "client-trid"))
|
.setTransferRequestTrid(Trid.create("server-trid", "client-trid"))
|
||||||
.setTransferRequestTime(now)
|
.setTransferRequestTime(now)
|
||||||
.setGainingClientId("NewRegistrar")
|
.setGainingClientId("NewRegistrar")
|
||||||
|
@ -66,7 +66,7 @@ public class TransferDataTest {
|
||||||
// Test must use a non-1-year period, since that's the default value.
|
// Test must use a non-1-year period, since that's the default value.
|
||||||
.setTransferPeriod(Period.create(5, Period.Unit.YEARS))
|
.setTransferPeriod(Period.create(5, Period.Unit.YEARS))
|
||||||
.build();
|
.build();
|
||||||
TransferData fullTransferData =
|
DomainTransferData fullTransferData =
|
||||||
constantTransferData
|
constantTransferData
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
.setPendingTransferExpirationTime(now)
|
.setPendingTransferExpirationTime(now)
|
||||||
|
|
|
@ -39,7 +39,7 @@ import google.registry.model.ofy.Ofy;
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.model.registrar.RegistrarContact;
|
import google.registry.model.registrar.RegistrarContact;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.rdap.RdapJsonFormatter.OutputDataType;
|
import google.registry.rdap.RdapJsonFormatter.OutputDataType;
|
||||||
import google.registry.rdap.RdapObjectClasses.BoilerplateType;
|
import google.registry.rdap.RdapObjectClasses.BoilerplateType;
|
||||||
|
@ -170,7 +170,7 @@ public class RdapJsonFormatterTest {
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setGainingClientId("NewRegistrar")
|
.setGainingClientId("NewRegistrar")
|
||||||
.setTransferRequestTime(clock.nowUtc().minusDays(1))
|
.setTransferRequestTime(clock.nowUtc().minusDays(1))
|
||||||
|
|
|
@ -31,7 +31,7 @@ import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
|
||||||
import google.registry.model.eppcommon.PresenceMarker;
|
import google.registry.model.eppcommon.PresenceMarker;
|
||||||
import google.registry.model.eppcommon.StatusValue;
|
import google.registry.model.eppcommon.StatusValue;
|
||||||
import google.registry.model.eppcommon.Trid;
|
import google.registry.model.eppcommon.Trid;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.ContactTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.testing.AppEngineRule;
|
import google.registry.testing.AppEngineRule;
|
||||||
import google.registry.xjc.contact.XjcContactPostalInfoEnumType;
|
import google.registry.xjc.contact.XjcContactPostalInfoEnumType;
|
||||||
|
@ -297,46 +297,49 @@ public class ContactResourceToXjcConverterTest {
|
||||||
.setLastTransferTime(DateTime.parse("1925-04-20TZ"))
|
.setLastTransferTime(DateTime.parse("1925-04-20TZ"))
|
||||||
.setLastEppUpdateTime(DateTime.parse("1930-04-20TZ"))
|
.setLastEppUpdateTime(DateTime.parse("1930-04-20TZ"))
|
||||||
.setEmailAddress("justine@crr.com")
|
.setEmailAddress("justine@crr.com")
|
||||||
.setStatusValues(ImmutableSet.of(
|
.setStatusValues(
|
||||||
StatusValue.CLIENT_DELETE_PROHIBITED,
|
ImmutableSet.of(
|
||||||
StatusValue.SERVER_UPDATE_PROHIBITED))
|
StatusValue.CLIENT_DELETE_PROHIBITED, StatusValue.SERVER_UPDATE_PROHIBITED))
|
||||||
.setInternationalizedPostalInfo(new PostalInfo.Builder()
|
.setInternationalizedPostalInfo(
|
||||||
.setType(PostalInfo.Type.INTERNATIONALIZED)
|
new PostalInfo.Builder()
|
||||||
.setName("Dipsy Doodle")
|
.setType(PostalInfo.Type.INTERNATIONALIZED)
|
||||||
.setOrg("Charleston Road Registry Incorporated")
|
.setName("Dipsy Doodle")
|
||||||
.setAddress(new ContactAddress.Builder()
|
.setOrg("Charleston Road Registry Incorporated")
|
||||||
.setStreet(ImmutableList.of("123 Charleston Road", "Suite 123"))
|
.setAddress(
|
||||||
.setCity("Mountain View")
|
new ContactAddress.Builder()
|
||||||
.setState("CA")
|
.setStreet(ImmutableList.of("123 Charleston Road", "Suite 123"))
|
||||||
.setZip("31337")
|
.setCity("Mountain View")
|
||||||
.setCountryCode("US")
|
.setState("CA")
|
||||||
|
.setZip("31337")
|
||||||
|
.setCountryCode("US")
|
||||||
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.build())
|
|
||||||
.setVoiceNumber(
|
.setVoiceNumber(
|
||||||
new ContactPhoneNumber.Builder()
|
new ContactPhoneNumber.Builder()
|
||||||
.setPhoneNumber("+1.2126660000")
|
.setPhoneNumber("+1.2126660000")
|
||||||
.setExtension("123")
|
.setExtension("123")
|
||||||
.build())
|
.build())
|
||||||
.setFaxNumber(
|
.setFaxNumber(new ContactPhoneNumber.Builder().setPhoneNumber("+1.2126660001").build())
|
||||||
new ContactPhoneNumber.Builder()
|
.setTransferData(
|
||||||
.setPhoneNumber("+1.2126660001")
|
new ContactTransferData.Builder()
|
||||||
|
.setGainingClientId("TheRegistrar")
|
||||||
|
.setLosingClientId("NewRegistrar")
|
||||||
|
.setTransferRequestTime(DateTime.parse("1925-04-19TZ"))
|
||||||
|
.setPendingTransferExpirationTime(DateTime.parse("1925-04-21TZ"))
|
||||||
|
.setTransferStatus(TransferStatus.SERVER_APPROVED)
|
||||||
|
.setTransferRequestTrid(Trid.create("client-trid", "server-trid"))
|
||||||
|
.build())
|
||||||
|
.setDisclose(
|
||||||
|
new Disclose.Builder()
|
||||||
|
.setFlag(true)
|
||||||
|
.setEmail(new PresenceMarker())
|
||||||
|
.setAddrs(
|
||||||
|
ImmutableList.of(
|
||||||
|
Disclose.PostalInfoChoice.create(PostalInfo.Type.INTERNATIONALIZED)))
|
||||||
|
.setNames(
|
||||||
|
ImmutableList.of(
|
||||||
|
Disclose.PostalInfoChoice.create(PostalInfo.Type.INTERNATIONALIZED)))
|
||||||
.build())
|
.build())
|
||||||
.setTransferData(new TransferData.Builder()
|
|
||||||
.setGainingClientId("TheRegistrar")
|
|
||||||
.setLosingClientId("NewRegistrar")
|
|
||||||
.setTransferRequestTime(DateTime.parse("1925-04-19TZ"))
|
|
||||||
.setPendingTransferExpirationTime(DateTime.parse("1925-04-21TZ"))
|
|
||||||
.setTransferStatus(TransferStatus.SERVER_APPROVED)
|
|
||||||
.setTransferRequestTrid(Trid.create("client-trid", "server-trid"))
|
|
||||||
.build())
|
|
||||||
.setDisclose(new Disclose.Builder()
|
|
||||||
.setFlag(true)
|
|
||||||
.setEmail(new PresenceMarker())
|
|
||||||
.setAddrs(ImmutableList.of(
|
|
||||||
Disclose.PostalInfoChoice.create(PostalInfo.Type.INTERNATIONALIZED)))
|
|
||||||
.setNames(ImmutableList.of(
|
|
||||||
Disclose.PostalInfoChoice.create(PostalInfo.Type.INTERNATIONALIZED)))
|
|
||||||
.build())
|
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ import google.registry.model.poll.PollMessage;
|
||||||
import google.registry.model.poll.PollMessage.Autorenew;
|
import google.registry.model.poll.PollMessage.Autorenew;
|
||||||
import google.registry.model.rde.RdeMode;
|
import google.registry.model.rde.RdeMode;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.testing.AppEngineRule;
|
import google.registry.testing.AppEngineRule;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
|
@ -328,7 +328,7 @@ public class DomainBaseToXjcConverterTest {
|
||||||
.setParent(historyEntry)
|
.setParent(historyEntry)
|
||||||
.build())))
|
.build())))
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setGainingClientId("gaining")
|
.setGainingClientId("gaining")
|
||||||
.setLosingClientId("losing")
|
.setLosingClientId("losing")
|
||||||
.setPendingTransferExpirationTime(DateTime.parse("1925-04-20T00:00:00Z"))
|
.setPendingTransferExpirationTime(DateTime.parse("1925-04-20T00:00:00Z"))
|
||||||
|
|
|
@ -47,7 +47,7 @@ import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.poll.PollMessage;
|
import google.registry.model.poll.PollMessage;
|
||||||
import google.registry.model.poll.PollMessage.Autorenew;
|
import google.registry.model.poll.PollMessage.Autorenew;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
import google.registry.util.Idn;
|
import google.registry.util.Idn;
|
||||||
|
@ -170,7 +170,7 @@ final class RdeFixtures {
|
||||||
.setParent(historyEntry)
|
.setParent(historyEntry)
|
||||||
.build())))
|
.build())))
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setGainingClientId("gaining")
|
.setGainingClientId("gaining")
|
||||||
.setLosingClientId("losing")
|
.setLosingClientId("losing")
|
||||||
.setPendingTransferExpirationTime(DateTime.parse("1993-04-20T00:00:00Z"))
|
.setPendingTransferExpirationTime(DateTime.parse("1993-04-20T00:00:00Z"))
|
||||||
|
|
|
@ -91,6 +91,8 @@ import google.registry.model.registry.label.PremiumList.PremiumListEntry;
|
||||||
import google.registry.model.registry.label.PremiumList.PremiumListRevision;
|
import google.registry.model.registry.label.PremiumList.PremiumListRevision;
|
||||||
import google.registry.model.registry.label.ReservedList;
|
import google.registry.model.registry.label.ReservedList;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
|
import google.registry.model.transfer.ContactTransferData;
|
||||||
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.TransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
|
@ -384,9 +386,19 @@ public class DatastoreHelper {
|
||||||
registrar.asBuilder().setAllowedTlds(difference(registrar.getAllowedTlds(), tld)).build());
|
registrar.asBuilder().setAllowedTlds(difference(registrar.getAllowedTlds(), tld)).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TransferData.Builder createTransferDataBuilder(
|
private static DomainTransferData.Builder createDomainTransferDataBuilder(
|
||||||
DateTime requestTime, DateTime expirationTime) {
|
DateTime requestTime, DateTime expirationTime) {
|
||||||
return new TransferData.Builder()
|
return new DomainTransferData.Builder()
|
||||||
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
|
.setGainingClientId("NewRegistrar")
|
||||||
|
.setTransferRequestTime(requestTime)
|
||||||
|
.setLosingClientId("TheRegistrar")
|
||||||
|
.setPendingTransferExpirationTime(expirationTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ContactTransferData.Builder createContactTransferDataBuilder(
|
||||||
|
DateTime requestTime, DateTime expirationTime) {
|
||||||
|
return new ContactTransferData.Builder()
|
||||||
.setTransferStatus(TransferStatus.PENDING)
|
.setTransferStatus(TransferStatus.PENDING)
|
||||||
.setGainingClientId("NewRegistrar")
|
.setGainingClientId("NewRegistrar")
|
||||||
.setTransferRequestTime(requestTime)
|
.setTransferRequestTime(requestTime)
|
||||||
|
@ -402,7 +414,7 @@ public class DatastoreHelper {
|
||||||
DateTime expirationTime,
|
DateTime expirationTime,
|
||||||
@Nullable DateTime extendedRegistrationExpirationTime) {
|
@Nullable DateTime extendedRegistrationExpirationTime) {
|
||||||
TransferData transferData =
|
TransferData transferData =
|
||||||
createTransferDataBuilder(requestTime, expirationTime)
|
createDomainTransferDataBuilder(requestTime, expirationTime)
|
||||||
.setTransferredRegistrationExpirationTime(extendedRegistrationExpirationTime)
|
.setTransferredRegistrationExpirationTime(extendedRegistrationExpirationTime)
|
||||||
.build();
|
.build();
|
||||||
return new PollMessage.OneTime.Builder()
|
return new PollMessage.OneTime.Builder()
|
||||||
|
@ -448,7 +460,7 @@ public class DatastoreHelper {
|
||||||
.setPersistedCurrentSponsorClientId("TheRegistrar")
|
.setPersistedCurrentSponsorClientId("TheRegistrar")
|
||||||
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
.addStatusValue(StatusValue.PENDING_TRANSFER)
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
createTransferDataBuilder(requestTime, expirationTime)
|
createContactTransferDataBuilder(requestTime, expirationTime)
|
||||||
.setPendingTransferExpirationTime(now.plus(getContactAutomaticTransferLength()))
|
.setPendingTransferExpirationTime(now.plus(getContactAutomaticTransferLength()))
|
||||||
.setServerApproveEntities(
|
.setServerApproveEntities(
|
||||||
ImmutableSet.of(
|
ImmutableSet.of(
|
||||||
|
@ -588,8 +600,8 @@ public class DatastoreHelper {
|
||||||
} else {
|
} else {
|
||||||
deleteResource(autorenewPollMessage);
|
deleteResource(autorenewPollMessage);
|
||||||
}
|
}
|
||||||
TransferData.Builder transferDataBuilder =
|
DomainTransferData.Builder transferDataBuilder =
|
||||||
createTransferDataBuilder(requestTime, expirationTime);
|
createDomainTransferDataBuilder(requestTime, expirationTime);
|
||||||
return persistResource(
|
return persistResource(
|
||||||
domain
|
domain
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
|
|
|
@ -51,7 +51,7 @@ import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.ofy.Ofy;
|
import google.registry.model.ofy.Ofy;
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.model.registry.Registry;
|
import google.registry.model.registry.Registry;
|
||||||
import google.registry.model.transfer.TransferData;
|
import google.registry.model.transfer.DomainTransferData;
|
||||||
import google.registry.model.transfer.TransferStatus;
|
import google.registry.model.transfer.TransferStatus;
|
||||||
import google.registry.testing.AppEngineRule;
|
import google.registry.testing.AppEngineRule;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
|
@ -178,7 +178,7 @@ public class WhoisActionTest {
|
||||||
makeDomainBaseWithRegistrar(registrar)
|
makeDomainBaseWithRegistrar(registrar)
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
.setTransferData(
|
.setTransferData(
|
||||||
new TransferData.Builder()
|
new DomainTransferData.Builder()
|
||||||
.setGainingClientId("TheRegistrar")
|
.setGainingClientId("TheRegistrar")
|
||||||
.setLosingClientId("NewRegistrar")
|
.setLosingClientId("NewRegistrar")
|
||||||
.setTransferRequestTime(DateTime.parse("2009-05-29T20:13:00Z"))
|
.setTransferRequestTime(DateTime.parse("2009-05-29T20:13:00Z"))
|
||||||
|
|
|
@ -114,7 +114,7 @@ class google.registry.model.contact.ContactResource {
|
||||||
google.registry.model.contact.Disclose disclose;
|
google.registry.model.contact.Disclose disclose;
|
||||||
google.registry.model.contact.PostalInfo internationalizedPostalInfo;
|
google.registry.model.contact.PostalInfo internationalizedPostalInfo;
|
||||||
google.registry.model.contact.PostalInfo localizedPostalInfo;
|
google.registry.model.contact.PostalInfo localizedPostalInfo;
|
||||||
google.registry.model.transfer.TransferData transferData;
|
google.registry.model.transfer.ContactTransferData transferData;
|
||||||
java.lang.String contactId;
|
java.lang.String contactId;
|
||||||
java.lang.String creationClientId;
|
java.lang.String creationClientId;
|
||||||
java.lang.String currentSponsorClientId;
|
java.lang.String currentSponsorClientId;
|
||||||
|
@ -171,7 +171,7 @@ class google.registry.model.domain.DomainBase {
|
||||||
google.registry.model.UpdateAutoTimestamp updateTimestamp;
|
google.registry.model.UpdateAutoTimestamp updateTimestamp;
|
||||||
google.registry.model.domain.DomainAuthInfo authInfo;
|
google.registry.model.domain.DomainAuthInfo authInfo;
|
||||||
google.registry.model.domain.launch.LaunchNotice launchNotice;
|
google.registry.model.domain.launch.LaunchNotice launchNotice;
|
||||||
google.registry.model.transfer.TransferData transferData;
|
google.registry.model.transfer.DomainTransferData transferData;
|
||||||
java.lang.String creationClientId;
|
java.lang.String creationClientId;
|
||||||
java.lang.String currentSponsorClientId;
|
java.lang.String currentSponsorClientId;
|
||||||
java.lang.String fullyQualifiedDomainName;
|
java.lang.String fullyQualifiedDomainName;
|
||||||
|
@ -715,7 +715,16 @@ class google.registry.model.tmch.TmchCrl {
|
||||||
java.lang.String url;
|
java.lang.String url;
|
||||||
org.joda.time.DateTime updated;
|
org.joda.time.DateTime updated;
|
||||||
}
|
}
|
||||||
class google.registry.model.transfer.TransferData {
|
class google.registry.model.transfer.ContactTransferData {
|
||||||
|
google.registry.model.eppcommon.Trid transferRequestTrid;
|
||||||
|
google.registry.model.transfer.TransferStatus transferStatus;
|
||||||
|
java.lang.String gainingClientId;
|
||||||
|
java.lang.String losingClientId;
|
||||||
|
java.util.Set<google.registry.persistence.VKey<? extends google.registry.model.transfer.TransferData$TransferServerApproveEntity>> serverApproveEntities;
|
||||||
|
org.joda.time.DateTime pendingTransferExpirationTime;
|
||||||
|
org.joda.time.DateTime transferRequestTime;
|
||||||
|
}
|
||||||
|
class google.registry.model.transfer.DomainTransferData {
|
||||||
google.registry.model.domain.Period transferPeriod;
|
google.registry.model.domain.Period transferPeriod;
|
||||||
google.registry.model.eppcommon.Trid transferRequestTrid;
|
google.registry.model.eppcommon.Trid transferRequestTrid;
|
||||||
google.registry.model.transfer.TransferStatus transferStatus;
|
google.registry.model.transfer.TransferStatus transferStatus;
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
-- Copyright 2020 The Nomulus Authors. All Rights Reserved.
|
||||||
|
--
|
||||||
|
-- Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
-- you may not use this file except in compliance with the License.
|
||||||
|
-- You may obtain a copy of the License at
|
||||||
|
--
|
||||||
|
-- http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
--
|
||||||
|
-- Unless required by applicable law or agreed to in writing, software
|
||||||
|
-- distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
-- See the License for the specific language governing permissions and
|
||||||
|
-- limitations under the License.
|
||||||
|
|
||||||
|
ALTER TABLE "Contact" DROP COLUMN transfer_billing_cancellation_id;
|
||||||
|
ALTER TABLE "Contact" DROP COLUMN transfer_billing_recurrence_id;
|
||||||
|
ALTER TABLE "Contact" DROP COLUMN transfer_autorenew_poll_message_id;
|
||||||
|
ALTER TABLE "Contact" DROP COLUMN transfer_billing_event_id;
|
||||||
|
ALTER TABLE "Contact" DROP COLUMN transfer_renew_period_unit;
|
||||||
|
ALTER TABLE "Contact" DROP COLUMN transfer_renew_period_value;
|
||||||
|
ALTER TABLE "Contact" DROP COLUMN transfer_registration_expiration_time;
|
|
@ -118,17 +118,10 @@
|
||||||
addr_local_org text,
|
addr_local_org text,
|
||||||
addr_local_type text,
|
addr_local_type text,
|
||||||
search_name text,
|
search_name text,
|
||||||
transfer_billing_cancellation_id int8,
|
|
||||||
transfer_gaining_poll_message_id int8,
|
transfer_gaining_poll_message_id int8,
|
||||||
transfer_losing_poll_message_id int8,
|
transfer_losing_poll_message_id int8,
|
||||||
transfer_billing_recurrence_id int8,
|
|
||||||
transfer_autorenew_poll_message_id int8,
|
|
||||||
transfer_billing_event_id int8,
|
|
||||||
transfer_renew_period_unit text,
|
|
||||||
transfer_renew_period_value int4,
|
|
||||||
transfer_client_txn_id text,
|
transfer_client_txn_id text,
|
||||||
transfer_server_txn_id text,
|
transfer_server_txn_id text,
|
||||||
transfer_registration_expiration_time timestamptz,
|
|
||||||
transfer_gaining_registrar_id text,
|
transfer_gaining_registrar_id text,
|
||||||
transfer_losing_registrar_id text,
|
transfer_losing_registrar_id text,
|
||||||
transfer_pending_expiration_time timestamptz,
|
transfer_pending_expiration_time timestamptz,
|
||||||
|
@ -182,16 +175,16 @@
|
||||||
tech_contact text,
|
tech_contact text,
|
||||||
tld text,
|
tld text,
|
||||||
transfer_billing_cancellation_id int8,
|
transfer_billing_cancellation_id int8,
|
||||||
transfer_gaining_poll_message_id int8,
|
|
||||||
transfer_losing_poll_message_id int8,
|
|
||||||
transfer_billing_recurrence_id int8,
|
transfer_billing_recurrence_id int8,
|
||||||
transfer_autorenew_poll_message_id int8,
|
transfer_autorenew_poll_message_id int8,
|
||||||
transfer_billing_event_id int8,
|
transfer_billing_event_id int8,
|
||||||
transfer_renew_period_unit text,
|
transfer_renew_period_unit text,
|
||||||
transfer_renew_period_value int4,
|
transfer_renew_period_value int4,
|
||||||
|
transfer_registration_expiration_time timestamptz,
|
||||||
|
transfer_gaining_poll_message_id int8,
|
||||||
|
transfer_losing_poll_message_id int8,
|
||||||
transfer_client_txn_id text,
|
transfer_client_txn_id text,
|
||||||
transfer_server_txn_id text,
|
transfer_server_txn_id text,
|
||||||
transfer_registration_expiration_time timestamptz,
|
|
||||||
transfer_gaining_registrar_id text,
|
transfer_gaining_registrar_id text,
|
||||||
transfer_losing_registrar_id text,
|
transfer_losing_registrar_id text,
|
||||||
transfer_pending_expiration_time timestamptz,
|
transfer_pending_expiration_time timestamptz,
|
||||||
|
|
|
@ -244,15 +244,8 @@ CREATE TABLE public."Contact" (
|
||||||
voice_phone_number text,
|
voice_phone_number text,
|
||||||
transfer_gaining_poll_message_id bigint,
|
transfer_gaining_poll_message_id bigint,
|
||||||
transfer_losing_poll_message_id bigint,
|
transfer_losing_poll_message_id bigint,
|
||||||
transfer_billing_cancellation_id bigint,
|
|
||||||
transfer_billing_event_id bigint,
|
|
||||||
transfer_billing_recurrence_id bigint,
|
|
||||||
transfer_autorenew_poll_message_id bigint,
|
|
||||||
transfer_renew_period_unit text,
|
|
||||||
transfer_renew_period_value integer,
|
|
||||||
transfer_client_txn_id text,
|
transfer_client_txn_id text,
|
||||||
transfer_server_txn_id text,
|
transfer_server_txn_id text,
|
||||||
transfer_registration_expiration_time timestamp with time zone,
|
|
||||||
transfer_gaining_registrar_id text,
|
transfer_gaining_registrar_id text,
|
||||||
transfer_losing_registrar_id text,
|
transfer_losing_registrar_id text,
|
||||||
transfer_pending_expiration_time timestamp with time zone,
|
transfer_pending_expiration_time timestamp with time zone,
|
||||||
|
|
Loading…
Add table
Reference in a new issue