176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia/* 2ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia * Copyright (C) 2010 The Libphonenumber Authors 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 109f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia // optional int32 number_of_leading_zeros = 8 [default = 1]; 110f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia private boolean hasNumberOfLeadingZeros; 111f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia private int numberOfLeadingZeros_ = 1; 112f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia public boolean hasNumberOfLeadingZeros() { return hasNumberOfLeadingZeros; } 113f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia public int getNumberOfLeadingZeros() { return numberOfLeadingZeros_; } 114f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia public PhoneNumber setNumberOfLeadingZeros(int value) { 115f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia hasNumberOfLeadingZeros = true; 116f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia numberOfLeadingZeros_ = value; 117f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia return this; 118f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia } 119f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia public PhoneNumber clearNumberOfLeadingZeros() { 120f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia hasNumberOfLeadingZeros = false; 121f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia numberOfLeadingZeros_ = 1; 122f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia return this; 123f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia } 124f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia 1257900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia // optional string raw_input = 5; 1267900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia private boolean hasRawInput; 12776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia private String rawInput_ = ""; 1287900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia public boolean hasRawInput() { return hasRawInput; } 12976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public String getRawInput() { return rawInput_; } 13076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber setRawInput(String value) { 13176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (value == null) { 13276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia throw new NullPointerException(); 1331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 13476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasRawInput = true; 13576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia rawInput_ = value; 13676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 13876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber clearRawInput() { 13976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasRawInput = false; 14076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia rawInput_ = ""; 14176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1421524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 14376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 14476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia // optional CountryCodeSource country_code_source = 6; 14576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia private boolean hasCountryCodeSource; 14676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia private CountryCodeSource countryCodeSource_; 14776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public boolean hasCountryCodeSource() { return hasCountryCodeSource; } 14876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public CountryCodeSource getCountryCodeSource() { return countryCodeSource_; } 14976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber setCountryCodeSource(CountryCodeSource value) { 15076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (value == null) { 15176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia throw new NullPointerException(); 1521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 15376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasCountryCodeSource = true; 15476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia countryCodeSource_ = value; 15576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1561524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 15776f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber clearCountryCodeSource() { 15876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia hasCountryCodeSource = false; 15976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia countryCodeSource_ = CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN; 16076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1611524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 16276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 16352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // optional string preferred_domestic_carrier_code = 7; 16452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private boolean hasPreferredDomesticCarrierCode; 16552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia private java.lang.String preferredDomesticCarrierCode_ = ""; 16652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia public boolean hasPreferredDomesticCarrierCode() { return hasPreferredDomesticCarrierCode; } 16752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia public String getPreferredDomesticCarrierCode() { return preferredDomesticCarrierCode_; } 16852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia public PhoneNumber setPreferredDomesticCarrierCode(String value) { 16952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia if (value == null) { 17052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia throw new NullPointerException(); 17152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 17252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hasPreferredDomesticCarrierCode = true; 17352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia preferredDomesticCarrierCode_ = value; 17452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia return this; 17552699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 17652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia public PhoneNumber clearPreferredDomesticCarrierCode() { 17752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hasPreferredDomesticCarrierCode = false; 17852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia preferredDomesticCarrierCode_ = ""; 17952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia return this; 18052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 18152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia 18276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public final PhoneNumber clear() { 18376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearCountryCode(); 18476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearNationalNumber(); 18576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearExtension(); 18676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearItalianLeadingZero(); 187f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia clearNumberOfLeadingZeros(); 18876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearRawInput(); 18976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia clearCountryCodeSource(); 19052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia clearPreferredDomesticCarrierCode(); 19176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 1921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 19376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 19476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public PhoneNumber mergeFrom(PhoneNumber other) { 19576f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasCountryCode()) { 19676f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCode(other.getCountryCode()); 1977900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia } 19876f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasNationalNumber()) { 19976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setNationalNumber(other.getNationalNumber()); 2007900ea273b8c33b3c6f70d7dd559127938d0fc3dShaopeng Jia } 20176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasExtension()) { 20276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setExtension(other.getExtension()); 2035c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 20476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasItalianLeadingZero()) { 205d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia setItalianLeadingZero(other.isItalianLeadingZero()); 2065c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 207f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia if (other.hasNumberOfLeadingZeros()) { 208f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia setNumberOfLeadingZeros(other.getNumberOfLeadingZeros()); 209f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia } 21076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasRawInput()) { 21176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setRawInput(other.getRawInput()); 2125c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 21376f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia if (other.hasCountryCodeSource()) { 21476f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia setCountryCodeSource(other.getCountryCodeSource()); 2155c24149d269da6e7d7b6b2797df096fdea64a019Shaopeng Jia } 21652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia if (other.hasPreferredDomesticCarrierCode()) { 21752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia setPreferredDomesticCarrierCode(other.getPreferredDomesticCarrierCode()); 21852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 21976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return this; 2201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 22176f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia 22276f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia public boolean exactlySameAs(PhoneNumber other) { 22374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia if (other == null) { 22474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia return false; 22574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 22674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia if (this == other) { 22774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia return true; 22874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 22976f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia return (countryCode_ == other.countryCode_ && nationalNumber_ == other.nationalNumber_ && 23076f6569af0619d12afd19991d8ff69a9bea4c142Shaopeng Jia extension_.equals(other.extension_) && italianLeadingZero_ == other.italianLeadingZero_ && 231f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia numberOfLeadingZeros_ == other.numberOfLeadingZeros_ && 23252699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia rawInput_.equals(other.rawInput_) && countryCodeSource_ == other.countryCodeSource_ && 23352699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia preferredDomesticCarrierCode_.equals(other.preferredDomesticCarrierCode_) && 23452699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hasPreferredDomesticCarrierCode() == other.hasPreferredDomesticCarrierCode()); 2351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 236256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie 237256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie @Override 23874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia public boolean equals(Object that) { 23974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia return (that instanceof PhoneNumber) && exactlySameAs((PhoneNumber) that); 24074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 24174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 24274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia @Override 24374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia public int hashCode() { 24474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // Simplified rendition of the hashCode function automatically generated from the proto 24574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // compiler with java_generate_equals_and_hash set to true. We are happy with unset values to 24674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia // be considered equal to their explicitly-set equivalents, so don't check if any value is 24752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia // unknown. The only exception to this is the preferred domestic carrier code. 24874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia int hash = 41; 24974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + getCountryCode(); 25074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + Long.valueOf(getNationalNumber()).hashCode(); 25174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + getExtension().hashCode(); 252d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia hash = (53 * hash) + (isItalianLeadingZero() ? 1231 : 1237); 253f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia hash = (53 * hash) + getNumberOfLeadingZeros(); 25474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + getRawInput().hashCode(); 25574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia hash = (53 * hash) + getCountryCodeSource().hashCode(); 25652699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hash = (53 * hash) + getPreferredDomesticCarrierCode().hashCode(); 25752699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia hash = (53 * hash) + (hasPreferredDomesticCarrierCode() ? 1231 : 1237); 25874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia return hash; 25974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia } 26074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia 26174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia @Override 262256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie public String toString() { 263372bff8dd464574d36737d47e495cad14346653cShaopeng Jia StringBuilder outputString = new StringBuilder(); 264256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie outputString.append("Country Code: ").append(countryCode_); 265256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie outputString.append(" National Number: ").append(nationalNumber_); 266d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia if (hasItalianLeadingZero() && isItalianLeadingZero()) { 267f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia outputString.append(" Leading Zero(s): true"); 268f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia } 269f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia if (hasNumberOfLeadingZeros()) { 270f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia outputString.append(" Number of leading zeros: ").append(numberOfLeadingZeros_); 271256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 272256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie if (hasExtension()) { 273256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie outputString.append(" Extension: ").append(extension_); 274256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 275256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie if (hasCountryCodeSource()) { 276256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie outputString.append(" Country Code Source: ").append(countryCodeSource_); 277256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 27852699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia if (hasPreferredDomesticCarrierCode()) { 27952699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia outputString.append(" Preferred Domestic Carrier Code: "). 28052699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia append(preferredDomesticCarrierCode_); 28152699e08e855fb0957944b4e73358ad9e0007c0cShaopeng Jia } 282256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie return outputString.toString(); 283256a5f71a05ffd182a0fda2cfed6f93345cc889fLara Rennie } 2841524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia } 2851524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia} 286