google-nomulus/java/google/registry/rde/RegistrarToXjcConverter.java
mmuller b70f57b7c7 Update copyright year on all license headers
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=146111211
2017-02-02 16:27:22 -05:00

186 lines
7.5 KiB
Java

// 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.rde;
import static com.google.common.base.MoreObjects.firstNonNull;
import google.registry.model.registrar.Registrar;
import google.registry.model.registrar.RegistrarAddress;
import google.registry.xjc.contact.XjcContactE164Type;
import google.registry.xjc.rderegistrar.XjcRdeRegistrar;
import google.registry.xjc.rderegistrar.XjcRdeRegistrarAddrType;
import google.registry.xjc.rderegistrar.XjcRdeRegistrarElement;
import google.registry.xjc.rderegistrar.XjcRdeRegistrarPostalInfoEnumType;
import google.registry.xjc.rderegistrar.XjcRdeRegistrarPostalInfoType;
import google.registry.xjc.rderegistrar.XjcRdeRegistrarStatusType;
import google.registry.xjc.rderegistrar.XjcRdeRegistrarWhoisInfoType;
import java.math.BigInteger;
/** Utility class that turns {@link Registrar} as {@link XjcRdeRegistrarElement}. */
final class RegistrarToXjcConverter {
private static final String UNKNOWN_EMAIL = "unknown@crr.com";
private static final String UNKNOWN_CITY = "Unknown";
private static final String UNKNOWN_ZIP = "00000";
private static final String UNKNOWN_CC = "US";
/** Converts {@link Registrar} to {@link XjcRdeRegistrarElement}. */
static XjcRdeRegistrarElement convert(Registrar registrar) {
return new XjcRdeRegistrarElement(convertRegistrar(registrar));
}
/** Converts {@link Registrar} to {@link XjcRdeRegistrar}. */
static XjcRdeRegistrar convertRegistrar(Registrar model) {
XjcRdeRegistrar bean = new XjcRdeRegistrar();
// o An <id> element that contains the Registry-unique identifier of
// the registrar object. This <id> has a superordinate relationship
// to a subordinate <clID>, <crRr> or <upRr> of domain, contact and
// host objects.
bean.setId(model.getClientId());
// o An <name> element that contains the name of the registrar.
bean.setName(model.getRegistrarName());
// o An OPTIONAL <gurid> element that contains the ID assigned by
// ICANN.
Long ianaId = model.getIanaIdentifier();
if (ianaId != null) {
bean.setGurid(BigInteger.valueOf(ianaId));
}
// o A <status> element that contains the operational status of the
// registrar. Possible values are: ok, readonly and terminated.
switch (model.getState()) {
case ACTIVE:
bean.setStatus(XjcRdeRegistrarStatusType.OK);
break;
case PENDING:
case SUSPENDED:
bean.setStatus(XjcRdeRegistrarStatusType.READONLY);
break;
default:
throw new IllegalStateException(String.format("Bad state: %s", model.getState()));
}
// o One or two <postalInfo> elements that contain postal- address
// information. Two elements are provided so that address
// information can be provided in both internationalized and
// localized forms; a "type" attribute is used to identify the two
// forms. If an internationalized form (type="int") is provided,
// element content MUST be represented in a subset of UTF-8 that can
// be represented in the 7-bit US-ASCII character set. If a
// localized form (type="loc") is provided, element content MAY be
// represented in unrestricted UTF-8.
RegistrarAddress localizedAddress = model.getLocalizedAddress();
if (localizedAddress != null) {
bean.getPostalInfos().add(convertPostalInfo(false, localizedAddress));
}
RegistrarAddress internationalizedAddress = model.getInternationalizedAddress();
if (internationalizedAddress != null) {
bean.getPostalInfos().add(convertPostalInfo(true, internationalizedAddress));
}
// o An OPTIONAL <voice> element that contains the registrar's voice
// telephone number.
// XXX: Make Registrar use PhoneNumber.
if (model.getPhoneNumber() != null) {
XjcContactE164Type phone = new XjcContactE164Type();
phone.setValue(model.getPhoneNumber());
bean.setVoice(phone);
}
// o An OPTIONAL <fax> element that contains the registrar's facsimile
// telephone number.
if (model.getFaxNumber() != null) {
XjcContactE164Type fax = new XjcContactE164Type();
fax.setValue(model.getFaxNumber());
bean.setFax(fax);
}
// o An <email> element that contains the registrar's email address.
bean.setEmail(firstNonNull(model.getEmailAddress(), UNKNOWN_EMAIL));
// o An OPTIONAL <url> element that contains the registrar's URL.
bean.setUrl(model.getUrl());
// o An OPTIONAL <whoisInfo> elements that contains whois information.
// The <whoisInfo> element contains the following child elements:
//
// * An OPTIONAL <name> element that contains the name of the
// registrar WHOIS server listening on TCP port 43 as specified in
// [RFC3912].
//
// * An OPTIONAL <url> element that contains the name of the
// registrar WHOIS server listening on TCP port 80/443.
if (model.getWhoisServer() != null) {
XjcRdeRegistrarWhoisInfoType whoisInfo = new XjcRdeRegistrarWhoisInfoType();
whoisInfo.setName(model.getWhoisServer());
bean.setWhoisInfo(whoisInfo);
}
// o A <crDate> element that contains the date and time of registrar-
// object creation.
bean.setCrDate(model.getCreationTime());
// o An OPTIONAL <upDate> element that contains the date and time of
// the most recent RDE registrar-object modification. This element
// MUST NOT be present if the rdeRegistrar object has never been
// modified.
bean.setUpDate(model.getLastUpdateTime());
return bean;
}
private static XjcRdeRegistrarPostalInfoType convertPostalInfo(
boolean isInt, RegistrarAddress model) {
XjcRdeRegistrarPostalInfoType bean = new XjcRdeRegistrarPostalInfoType();
bean.setType(isInt
? XjcRdeRegistrarPostalInfoEnumType.INT
: XjcRdeRegistrarPostalInfoEnumType.LOC);
bean.setAddr(convertAddress(model));
return bean;
}
private static XjcRdeRegistrarAddrType convertAddress(RegistrarAddress model) {
XjcRdeRegistrarAddrType bean = new XjcRdeRegistrarAddrType();
// * A <addr> element that contains address information associated
// with the registrar. The <addr> element contains the following
// child elements:
//
// + One, two, or three OPTIONAL <street> elements that contain
// the registrar's street address.
bean.getStreets().addAll(model.getStreet());
// + A <city> element that contains the registrar's city.
bean.setCity(firstNonNull(model.getCity(), UNKNOWN_CITY));
// + An OPTIONAL <sp> element that contains the registrar's state
// or province.
bean.setSp(model.getState());
// + An OPTIONAL <pc> element that contains the registrar's
// postal code.
bean.setPc(firstNonNull(model.getZip(), UNKNOWN_ZIP));
// + A <cc> element that contains the registrar's country code.
bean.setCc(firstNonNull(model.getCountryCode(), UNKNOWN_CC));
return bean;
}
private RegistrarToXjcConverter() {}
}