176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia/* 276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * Copyright (C) 2010 Google Inc. 376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * 476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * Licensed under the Apache License, Version 2.0 (the "License"); 576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * you may not use this file except in compliance with the License. 676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * You may obtain a copy of the License at 776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * 876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * http://www.apache.org/licenses/LICENSE-2.0 976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * 1076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * Unless required by applicable law or agreed to in writing, software 1176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * distributed under the License is distributed on an "AS IS" BASIS, 1276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * See the License for the specific language governing permissions and 1476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * limitations under the License. 1576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia */ 1676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 1776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia/** 1852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia * Definition of the class representing international telephone numbers. This class is hand-created 1976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * based on the class file compiled from phonenumber.proto. Please refer to that file for detailed 2076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia * descriptions of the meaning of each field. 2176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia */ 221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 2393f6965c2c041ac707bf1b3bcf5a3f60e452f421Shaopeng Jiapackage com.android.i18n.phonenumbers; 241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia 25372bff8dd464574d36737d47e495cad14346653cShaopeng Jiaimport java.io.Serializable; 26372bff8dd464574d36737d47e495cad14346653cShaopeng Jia 271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiapublic final class Phonenumber { 281524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private Phonenumber() {} 29372bff8dd464574d36737d47e495cad14346653cShaopeng Jia public static class PhoneNumber implements Serializable { 30372bff8dd464574d36737d47e495cad14346653cShaopeng Jia private static final long serialVersionUID = 1L; 3176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public enum CountryCodeSource { 3276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia FROM_NUMBER_WITH_PLUS_SIGN, 3376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia FROM_NUMBER_WITH_IDD, 3476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia FROM_NUMBER_WITHOUT_PLUS_SIGN, 3576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia FROM_DEFAULT_COUNTRY 361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 375c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 3876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber() { 3976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia countryCodeSource_ = CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN; 405c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 415c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia 421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // required int32 country_code = 1; 431524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private boolean hasCountryCode; 441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private int countryCode_ = 0; 451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public boolean hasCountryCode() { return hasCountryCode; } 461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public int getCountryCode() { return countryCode_; } 4776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber setCountryCode(int value) { 4876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasCountryCode = true; 4976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia countryCode_ = value; 5076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 5176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 5276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber clearCountryCode() { 5376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasCountryCode = false; 5476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia countryCode_ = 0; 5576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 5676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 5776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // required uint64 national_number = 2; 591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private boolean hasNationalNumber; 601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private long nationalNumber_ = 0L; 611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public boolean hasNationalNumber() { return hasNationalNumber; } 621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public long getNationalNumber() { return nationalNumber_; } 6376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber setNationalNumber(long value) { 6476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasNationalNumber = true; 6576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nationalNumber_ = value; 6676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 6776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 6876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber clearNationalNumber() { 6976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasNationalNumber = false; 7076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia nationalNumber_ = 0L; 7176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 7276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 7376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 741524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // optional string extension = 3; 751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private boolean hasExtension; 761524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private java.lang.String extension_ = ""; 771524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public boolean hasExtension() { return hasExtension; } 7876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public String getExtension() { return extension_; } 7976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber setExtension(String value) { 8076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (value == null) { 8176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia throw new NullPointerException(); 8276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 8376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasExtension = true; 8476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia extension_ = value; 8576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 8676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 8776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber clearExtension() { 8876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasExtension = false; 8976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia extension_ = ""; 9076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 9176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 9276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia // optional bool italian_leading_zero = 4; 941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private boolean hasItalianLeadingZero; 951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia private boolean italianLeadingZero_ = false; 961524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia public boolean hasItalianLeadingZero() { return hasItalianLeadingZero; } 97d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia public boolean isItalianLeadingZero() { return italianLeadingZero_; } 9876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber setItalianLeadingZero(boolean value) { 9976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasItalianLeadingZero = true; 10076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianLeadingZero_ = value; 10176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 10276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 10376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber clearItalianLeadingZero() { 10476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasItalianLeadingZero = false; 10576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia italianLeadingZero_ = false; 10676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 10776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia } 10876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 1097900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia // optional string raw_input = 5; 1107900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia private boolean hasRawInput; 11176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia private String rawInput_ = ""; 1127900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia public boolean hasRawInput() { return hasRawInput; } 11376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public String getRawInput() { return rawInput_; } 11476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber setRawInput(String value) { 11576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (value == null) { 11676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia throw new NullPointerException(); 1171524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 11876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasRawInput = true; 11976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia rawInput_ = value; 12076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 12276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber clearRawInput() { 12376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasRawInput = false; 12476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia rawInput_ = ""; 12576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 12776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 12876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia // optional CountryCodeSource country_code_source = 6; 12976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia private boolean hasCountryCodeSource; 13076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia private CountryCodeSource countryCodeSource_; 13176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public boolean hasCountryCodeSource() { return hasCountryCodeSource; } 13276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public CountryCodeSource getCountryCodeSource() { return countryCodeSource_; } 13376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber setCountryCodeSource(CountryCodeSource value) { 13476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (value == null) { 13576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia throw new NullPointerException(); 1361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 13776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasCountryCodeSource = true; 13876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia countryCodeSource_ = value; 13976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber clearCountryCodeSource() { 14276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasCountryCodeSource = false; 14376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia countryCodeSource_ = CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN; 14476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1451524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 14752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // optional string preferred_domestic_carrier_code = 7; 14852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private boolean hasPreferredDomesticCarrierCode; 14952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private java.lang.String preferredDomesticCarrierCode_ = ""; 15052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia public boolean hasPreferredDomesticCarrierCode() { return hasPreferredDomesticCarrierCode; } 15152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia public String getPreferredDomesticCarrierCode() { return preferredDomesticCarrierCode_; } 15252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia public PhoneNumber setPreferredDomesticCarrierCode(String value) { 15352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia if (value == null) { 15452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia throw new NullPointerException(); 15552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 15652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hasPreferredDomesticCarrierCode = true; 15752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia preferredDomesticCarrierCode_ = value; 15852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia return this; 15952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 16052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia public PhoneNumber clearPreferredDomesticCarrierCode() { 16152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hasPreferredDomesticCarrierCode = false; 16252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia preferredDomesticCarrierCode_ = ""; 16352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia return this; 16452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 16552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 16676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public final PhoneNumber clear() { 16776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearCountryCode(); 16876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearNationalNumber(); 16976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearExtension(); 17076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearItalianLeadingZero(); 17176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearRawInput(); 17276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearCountryCodeSource(); 17352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia clearPreferredDomesticCarrierCode(); 17476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1751524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 17676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 17776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber mergeFrom(PhoneNumber other) { 17876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasCountryCode()) { 17976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCode(other.getCountryCode()); 1807900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia } 18176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasNationalNumber()) { 18276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setNationalNumber(other.getNationalNumber()); 1837900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia } 18476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasExtension()) { 18576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setExtension(other.getExtension()); 1865c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 18776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasItalianLeadingZero()) { 188d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia setItalianLeadingZero(other.isItalianLeadingZero()); 1895c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 19076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasRawInput()) { 19176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setRawInput(other.getRawInput()); 1925c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 19376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasCountryCodeSource()) { 19476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCodeSource(other.getCountryCodeSource()); 1955c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 19652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia if (other.hasPreferredDomesticCarrierCode()) { 19752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setPreferredDomesticCarrierCode(other.getPreferredDomesticCarrierCode()); 19852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 19976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 2001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 20176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 20276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public boolean exactlySameAs(PhoneNumber other) { 20374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia if (other == null) { 20474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia return false; 20574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 20674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia if (this == other) { 20774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia return true; 20874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 20976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return (countryCode_ == other.countryCode_ && nationalNumber_ == other.nationalNumber_ && 21076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia extension_.equals(other.extension_) && italianLeadingZero_ == other.italianLeadingZero_ && 21152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia rawInput_.equals(other.rawInput_) && countryCodeSource_ == other.countryCodeSource_ && 21252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia preferredDomesticCarrierCode_.equals(other.preferredDomesticCarrierCode_) && 21352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hasPreferredDomesticCarrierCode() == other.hasPreferredDomesticCarrierCode()); 2141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 215256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie 216256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie @Override 21774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia public boolean equals(Object that) { 21874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia return (that instanceof PhoneNumber) && exactlySameAs((PhoneNumber) that); 21974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 22074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 22174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia @Override 22274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia public int hashCode() { 22374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Simplified rendition of the hashCode function automatically generated from the proto 22474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // compiler with java_generate_equals_and_hash set to true. We are happy with unset values to 22574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // be considered equal to their explicitly-set equivalents, so don't check if any value is 22652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // unknown. The only exception to this is the preferred domestic carrier code. 22774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia int hash = 41; 22874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + getCountryCode(); 22974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + Long.valueOf(getNationalNumber()).hashCode(); 23074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + getExtension().hashCode(); 231d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia hash = (53 * hash) + (isItalianLeadingZero() ? 1231 : 1237); 23274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + getRawInput().hashCode(); 23374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + getCountryCodeSource().hashCode(); 23452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hash = (53 * hash) + getPreferredDomesticCarrierCode().hashCode(); 23552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hash = (53 * hash) + (hasPreferredDomesticCarrierCode() ? 1231 : 1237); 23674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia return hash; 23774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 23874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 23974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia @Override 240256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie public String toString() { 241372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder outputString = new StringBuilder(); 242256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie outputString.append("Country Code: ").append(countryCode_); 243256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie outputString.append(" National Number: ").append(nationalNumber_); 244d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia if (hasItalianLeadingZero() && isItalianLeadingZero()) { 245256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie outputString.append(" Leading Zero: true"); 246256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 247256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie if (hasExtension()) { 248256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie outputString.append(" Extension: ").append(extension_); 249256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 250256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie if (hasCountryCodeSource()) { 251256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie outputString.append(" Country Code Source: ").append(countryCodeSource_); 252256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 25352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia if (hasPreferredDomesticCarrierCode()) { 25452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia outputString.append(" Preferred Domestic Carrier Code: "). 25552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia append(preferredDomesticCarrierCode_); 25652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 257256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie return outputString.toString(); 258256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 2591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia} 261