Get rid of cloneWithLinkedStatus

Now that we return an Info object rather than the resource itself,
there's no reason for the cloning pattern.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=145426484
This commit is contained in:
cgoldfeder 2017-01-24 09:16:22 -08:00 committed by Ben McIlwain
parent 2bb61b82f4
commit d5160213e5
3 changed files with 24 additions and 17 deletions

View file

@ -17,9 +17,12 @@ package google.registry.flows.contact;
import static google.registry.flows.FlowUtils.validateClientIsLoggedIn; import static google.registry.flows.FlowUtils.validateClientIsLoggedIn;
import static google.registry.flows.ResourceFlowUtils.loadAndVerifyExistence; import static google.registry.flows.ResourceFlowUtils.loadAndVerifyExistence;
import static google.registry.flows.ResourceFlowUtils.verifyOptionalAuthInfo; import static google.registry.flows.ResourceFlowUtils.verifyOptionalAuthInfo;
import static google.registry.model.EppResourceUtils.cloneResourceWithLinkedStatus; import static google.registry.model.EppResourceUtils.isLinked;
import static google.registry.util.CollectionUtils.difference;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.collect.ImmutableSet;
import com.googlecode.objectify.Key;
import google.registry.flows.EppException; import google.registry.flows.EppException;
import google.registry.flows.ExtensionManager; import google.registry.flows.ExtensionManager;
import google.registry.flows.Flow; import google.registry.flows.Flow;
@ -28,6 +31,7 @@ import google.registry.flows.FlowModule.TargetId;
import google.registry.model.contact.ContactInfoData; import google.registry.model.contact.ContactInfoData;
import google.registry.model.contact.ContactResource; import google.registry.model.contact.ContactResource;
import google.registry.model.eppcommon.AuthInfo; import google.registry.model.eppcommon.AuthInfo;
import google.registry.model.eppcommon.StatusValue;
import google.registry.model.eppoutput.EppResponse; import google.registry.model.eppoutput.EppResponse;
import google.registry.util.Clock; import google.registry.util.Clock;
import javax.inject.Inject; import javax.inject.Inject;
@ -60,14 +64,19 @@ public final class ContactInfoFlow implements Flow {
validateClientIsLoggedIn(clientId); validateClientIsLoggedIn(clientId);
ContactResource contact = loadAndVerifyExistence(ContactResource.class, targetId, now); ContactResource contact = loadAndVerifyExistence(ContactResource.class, targetId, now);
verifyOptionalAuthInfo(authInfo, contact); verifyOptionalAuthInfo(authInfo, contact);
contact = (ContactResource) cloneResourceWithLinkedStatus(contact, now);
boolean includeAuthInfo = boolean includeAuthInfo =
clientId.equals(contact.getCurrentSponsorClientId()) || authInfo.isPresent(); clientId.equals(contact.getCurrentSponsorClientId()) || authInfo.isPresent();
ImmutableSet.Builder<StatusValue> statusValues = new ImmutableSet.Builder<>();
// TODO(b/34664935): When LINKED is no longer persisted we won't need to filter it out.
statusValues.addAll(difference(contact.getStatusValues(), StatusValue.LINKED));
if (isLinked(Key.create(contact), now)) {
statusValues.add(StatusValue.LINKED);
}
return responseBuilder return responseBuilder
.setResData(ContactInfoData.newBuilder() .setResData(ContactInfoData.newBuilder()
.setContactId(contact.getContactId()) .setContactId(contact.getContactId())
.setRepoId(contact.getRepoId()) .setRepoId(contact.getRepoId())
.setStatusValues(contact.getStatusValues()) .setStatusValues(statusValues.build())
.setPostalInfos(contact.getPostalInfosAsList()) .setPostalInfos(contact.getPostalInfosAsList())
.setVoiceNumber(contact.getVoiceNumber()) .setVoiceNumber(contact.getVoiceNumber())
.setFaxNumber(contact.getFaxNumber()) .setFaxNumber(contact.getFaxNumber())

View file

@ -17,13 +17,17 @@ package google.registry.flows.host;
import static google.registry.flows.FlowUtils.validateClientIsLoggedIn; import static google.registry.flows.FlowUtils.validateClientIsLoggedIn;
import static google.registry.flows.ResourceFlowUtils.loadAndVerifyExistence; import static google.registry.flows.ResourceFlowUtils.loadAndVerifyExistence;
import static google.registry.flows.host.HostFlowUtils.validateHostName; import static google.registry.flows.host.HostFlowUtils.validateHostName;
import static google.registry.model.EppResourceUtils.cloneResourceWithLinkedStatus; import static google.registry.model.EppResourceUtils.isLinked;
import static google.registry.util.CollectionUtils.difference;
import com.google.common.collect.ImmutableSet;
import com.googlecode.objectify.Key;
import google.registry.flows.EppException; import google.registry.flows.EppException;
import google.registry.flows.ExtensionManager; import google.registry.flows.ExtensionManager;
import google.registry.flows.Flow; import google.registry.flows.Flow;
import google.registry.flows.FlowModule.ClientId; import google.registry.flows.FlowModule.ClientId;
import google.registry.flows.FlowModule.TargetId; import google.registry.flows.FlowModule.TargetId;
import google.registry.model.eppcommon.StatusValue;
import google.registry.model.eppoutput.EppResponse; import google.registry.model.eppoutput.EppResponse;
import google.registry.model.host.HostInfoData; import google.registry.model.host.HostInfoData;
import google.registry.model.host.HostResource; import google.registry.model.host.HostResource;
@ -58,12 +62,17 @@ public final class HostInfoFlow implements Flow {
validateHostName(targetId); validateHostName(targetId);
DateTime now = clock.nowUtc(); DateTime now = clock.nowUtc();
HostResource host = loadAndVerifyExistence(HostResource.class, targetId, now); HostResource host = loadAndVerifyExistence(HostResource.class, targetId, now);
host = (HostResource) cloneResourceWithLinkedStatus(host, now); ImmutableSet.Builder<StatusValue> statusValues = new ImmutableSet.Builder<>();
// TODO(b/34664935): When LINKED is no longer persisted we won't need to filter it out.
statusValues.addAll(difference(host.getStatusValues(), StatusValue.LINKED));
if (isLinked(Key.create(host), now)) {
statusValues.add(StatusValue.LINKED);
}
return responseBuilder return responseBuilder
.setResData(HostInfoData.newBuilder() .setResData(HostInfoData.newBuilder()
.setFullyQualifiedHostName(host.getFullyQualifiedHostName()) .setFullyQualifiedHostName(host.getFullyQualifiedHostName())
.setRepoId(host.getRepoId()) .setRepoId(host.getRepoId())
.setStatusValues(host.getStatusValues()) .setStatusValues(statusValues.build())
.setInetAddresses(host.getInetAddresses()) .setInetAddresses(host.getInetAddresses())
.setCurrentSponsorClientId(host.getCurrentSponsorClientId()) .setCurrentSponsorClientId(host.getCurrentSponsorClientId())
.setCreationClientId(host.getCreationClientId()) .setCreationClientId(host.getCreationClientId())

View file

@ -360,17 +360,6 @@ public final class EppResourceUtils {
return queryForLinkedDomains(key, now).limit(1).count() > 0; return queryForLinkedDomains(key, now).limit(1).count() > 0;
} }
/** Clone a contact or host with an eventually-consistent notion of LINKED. */
public static EppResource cloneResourceWithLinkedStatus(EppResource resource, DateTime now) {
Builder<?, ?> builder = resource.asBuilder();
if (isLinked(Key.create(resource), now)) {
builder.addStatusValue(StatusValue.LINKED);
} else {
builder.removeStatusValue(StatusValue.LINKED);
}
return builder.build();
}
/** Exception to throw when failing to parse a repo id. */ /** Exception to throw when failing to parse a repo id. */
public static class InvalidRepoIdException extends Exception { public static class InvalidRepoIdException extends Exception {