// Copyright 2017 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.domain; import com.google.common.annotations.VisibleForTesting; import com.googlecode.objectify.Key; import com.googlecode.objectify.annotation.Embed; import com.googlecode.objectify.annotation.Index; import google.registry.model.ImmutableObject; import google.registry.model.contact.ContactResource; import javax.xml.bind.annotation.XmlEnumValue; /** * Persisted type for storing a domain's contact associations. * *

A contact association on a domain consists of the contact key and the contact "type", which is * the designated role of this contact with respect to this domain. When converting to and from * EPP XML, we use {@link ForeignKeyedDesignatedContact} to replace the contact's Datastore key * with its foreign key, since that is what EPP exposes. * *

Note one could in principle store contact foreign keys here in addition to keys, unlike the * situation with hosts where client-side renames would make that data stale. However, we sometimes * rename contacts internally ourselves, and it's easier to use the same model for both cases. * * @see * RFC 5731 - EPP Domain Name Mapping - Contact and Client Identifiers */ @Embed public class DesignatedContact extends ImmutableObject { /** * XML type for contact types. This can be either: {@code "admin"}, {@code "billing"}, or * {@code "tech"} and corresponds to {@code contactAttrType} in {@code domain-1.0.xsd}. */ public enum Type { @XmlEnumValue("admin") ADMIN, @XmlEnumValue("billing") BILLING, @XmlEnumValue("tech") TECH, /** The registrant type is not reflected in XML and exists only for internal use. */ REGISTRANT; } @VisibleForTesting public static DesignatedContact create(Type type, Key contact) { DesignatedContact instance = new DesignatedContact(); instance.type = type; instance.contact = contact; return instance; } Type type; @Index Key contact; public Type getType() { return type; } public Key getContactKey() { return contact; } }