15724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia/*
2ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia * Copyright (C) 2010 The Libphonenumber Authors
35724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia *
45724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * Licensed under the Apache License, Version 2.0 (the "License");
55724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * you may not use this file except in compliance with the License.
65724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * You may obtain a copy of the License at
75724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia *
85724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * http://www.apache.org/licenses/LICENSE-2.0
95724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia *
105724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * Unless required by applicable law or agreed to in writing, software
115724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * distributed under the License is distributed on an "AS IS" BASIS,
125724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * See the License for the specific language governing permissions and
145724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * limitations under the License.
155724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia */
165724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
175724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia/**
185724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * Definition of the class representing metadata for international telephone numbers. This class is
195724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * hand created based on the class file compiled from phonemetadata.proto. Please refer to that file
205724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia * for detailed descriptions of the meaning of each field.
215724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia */
221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia
23a77faddfc3b3e4cca8f585c82d669054aec221f4Narayan Kamathpackage com.google.i18n.phonenumbers;
241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia
25bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jiaimport java.io.Externalizable;
26bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jiaimport java.io.IOException;
27bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jiaimport java.io.ObjectInput;
28bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jiaimport java.io.ObjectOutput;
295724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jiapublic final class Phonemetadata {
311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia  private Phonemetadata() {}
32372bff8dd464574d36737d47e495cad14346653cShaopeng Jia  public static class NumberFormat implements Externalizable {
335724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private static final long serialVersionUID = 1;
345724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public NumberFormat() {}
355724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
36372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    /**
37372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     * Provides a dummy builder to 'emulate' the API of the code generated by the latest version of
38372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     * Protocol Buffers. This lets BuildMetadataFromXml class to build with both this hand created
39372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     * class and the one generated by the latest version of Protocol Buffers.
40372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     */
41372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public static final class Builder extends NumberFormat {
42372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      public NumberFormat build() {
43372bff8dd464574d36737d47e495cad14346653cShaopeng Jia        return this;
44372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      }
45372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
46203cf688f8d56e2c1f9828801b113110465f39a7Shaopeng Jia
47372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public static Builder newBuilder() {
48372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      return new Builder();
49372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
50372bff8dd464574d36737d47e495cad14346653cShaopeng Jia
511524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // required string pattern = 1;
521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasPattern;
535724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String pattern_ = "";
541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasPattern() { return hasPattern; }
555724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getPattern() { return pattern_; }
565724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public NumberFormat setPattern(String value) {
575724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasPattern = true;
585724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      pattern_ = value;
595724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
605724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
615724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
621524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // required string format = 2;
631524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasFormat;
645724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String format_ = "";
651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasFormat() { return hasFormat; }
665724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getFormat() { return format_; }
675724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public NumberFormat setFormat(String value) {
685724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasFormat = true;
695724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      format_ = value;
705724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
715724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
725724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
73df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    // repeated string leading_digits_pattern = 3;
74df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    private java.util.List<String> leadingDigitsPattern_ = new java.util.ArrayList<String>();
75372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public java.util.List<String> leadingDigitPatterns() {
76df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      return leadingDigitsPattern_;
77df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    }
78372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public int leadingDigitsPatternSize() { return leadingDigitsPattern_.size(); }
79df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    public String getLeadingDigitsPattern(int index) {
80df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      return leadingDigitsPattern_.get(index);
81df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    }
82df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    public NumberFormat addLeadingDigitsPattern(String value) {
83df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      if (value == null) {
84df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia        throw new NullPointerException();
85df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      }
86df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      leadingDigitsPattern_.add(value);
875724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
885724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
895724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional string national_prefix_formatting_rule = 4;
911524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasNationalPrefixFormattingRule;
925724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String nationalPrefixFormattingRule_ = "";
931524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasNationalPrefixFormattingRule() { return hasNationalPrefixFormattingRule; }
945724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getNationalPrefixFormattingRule() { return nationalPrefixFormattingRule_; }
955724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public NumberFormat setNationalPrefixFormattingRule(String value) {
965724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasNationalPrefixFormattingRule = true;
975724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      nationalPrefixFormattingRule_ = value;
985724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
991524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
100df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    public NumberFormat clearNationalPrefixFormattingRule() {
101df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      hasNationalPrefixFormattingRule = false;
102df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      nationalPrefixFormattingRule_ = "";
103df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      return this;
104df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    }
1055724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
106a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia    // optional bool national_prefix_optional_when_formatting = 6;
107a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia    private boolean hasNationalPrefixOptionalWhenFormatting;
108a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia    private boolean nationalPrefixOptionalWhenFormatting_ = false;
109a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia    public boolean hasNationalPrefixOptionalWhenFormatting() {
110a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia      return hasNationalPrefixOptionalWhenFormatting; }
111a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia    public boolean isNationalPrefixOptionalWhenFormatting() {
112a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia      return nationalPrefixOptionalWhenFormatting_; }
113a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia    public NumberFormat setNationalPrefixOptionalWhenFormatting(boolean value) {
114a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia      hasNationalPrefixOptionalWhenFormatting = true;
115a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia      nationalPrefixOptionalWhenFormatting_ = value;
116a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia      return this;
117a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia    }
118a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia
1194b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    // optional string domestic_carrier_code_formatting_rule = 5;
1204b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    private boolean hasDomesticCarrierCodeFormattingRule;
1214b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    private String domesticCarrierCodeFormattingRule_ = "";
1224b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    public boolean hasDomesticCarrierCodeFormattingRule() {
1234b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      return hasDomesticCarrierCodeFormattingRule; }
1244b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    public String getDomesticCarrierCodeFormattingRule() {
1254b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      return domesticCarrierCodeFormattingRule_; }
1264b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    public NumberFormat setDomesticCarrierCodeFormattingRule(String value) {
1274b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      hasDomesticCarrierCodeFormattingRule = true;
1284b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      domesticCarrierCodeFormattingRule_ = value;
1294b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      return this;
1304b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    }
1314b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia
132df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    public NumberFormat mergeFrom(NumberFormat other) {
133df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      if (other.hasPattern()) {
134df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia        setPattern(other.getPattern());
135df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      }
136df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      if (other.hasFormat()) {
137df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia        setFormat(other.getFormat());
138df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      }
139372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      int leadingDigitsPatternSize = other.leadingDigitsPatternSize();
140df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      for (int i = 0; i < leadingDigitsPatternSize; i++) {
141df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia        addLeadingDigitsPattern(other.getLeadingDigitsPattern(i));
142df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      }
143df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      if (other.hasNationalPrefixFormattingRule()) {
144df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia        setNationalPrefixFormattingRule(other.getNationalPrefixFormattingRule());
145df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      }
146df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      if (other.hasDomesticCarrierCodeFormattingRule()) {
147df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia        setDomesticCarrierCodeFormattingRule(other.getDomesticCarrierCodeFormattingRule());
148df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      }
149a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia      setNationalPrefixOptionalWhenFormatting(other.isNationalPrefixOptionalWhenFormatting());
150df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      return this;
151df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia    }
152df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia
153bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia    public void writeExternal(ObjectOutput objectOutput) throws IOException {
154bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeUTF(pattern_);
155bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeUTF(format_);
156372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      int leadingDigitsPatternSize = leadingDigitsPatternSize();
157df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      objectOutput.writeInt(leadingDigitsPatternSize);
158df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      for (int i = 0; i < leadingDigitsPatternSize; i++) {
159df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia        objectOutput.writeUTF(leadingDigitsPattern_.get(i));
1601524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      }
161df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia
162bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasNationalPrefixFormattingRule);
163bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasNationalPrefixFormattingRule) {
164bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        objectOutput.writeUTF(nationalPrefixFormattingRule_);
1651524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      }
1664b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      objectOutput.writeBoolean(hasDomesticCarrierCodeFormattingRule);
1674b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      if (hasDomesticCarrierCodeFormattingRule) {
1684b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia        objectOutput.writeUTF(domesticCarrierCodeFormattingRule_);
1694b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      }
170a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia      objectOutput.writeBoolean(nationalPrefixOptionalWhenFormatting_);
1711524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
1725724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
173f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia    public void readExternal(ObjectInput objectInput) throws IOException {
174bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      setPattern(objectInput.readUTF());
175bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      setFormat(objectInput.readUTF());
176df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      int leadingDigitsPatternSize = objectInput.readInt();
177df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia      for (int i = 0; i < leadingDigitsPatternSize; i++) {
178df19cbfb8a1e8720bae76bb763ab29622e057c42Shaopeng Jia        leadingDigitsPattern_.add(objectInput.readUTF());
179bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
180bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (objectInput.readBoolean()) {
181bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setNationalPrefixFormattingRule(objectInput.readUTF());
182bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
1834b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      if (objectInput.readBoolean()) {
1844b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia        setDomesticCarrierCodeFormattingRule(objectInput.readUTF());
1854b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      }
186a48b2d221ba46df7446d1a87244efa985e8e292fShaopeng Jia      setNationalPrefixOptionalWhenFormatting(objectInput.readBoolean());
1871524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
1881524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia  }
1895724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
190372bff8dd464574d36737d47e495cad14346653cShaopeng Jia  public static class PhoneNumberDesc implements Externalizable {
1915724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private static final long serialVersionUID = 1;
1925724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc() {}
1935724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
194372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    /**
195372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     * Provides a dummy builder.
196372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     *
197372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     * @see NumberFormat.Builder
198372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     */
199372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public static final class Builder extends PhoneNumberDesc {
200372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      public PhoneNumberDesc build() {
201372bff8dd464574d36737d47e495cad14346653cShaopeng Jia        return this;
202372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      }
203372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
204372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public static Builder newBuilder() {
205372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      return new Builder();
206372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
207372bff8dd464574d36737d47e495cad14346653cShaopeng Jia
2081524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional string national_number_pattern = 2;
2091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasNationalNumberPattern;
2105724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String nationalNumberPattern_ = "";
2111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasNationalNumberPattern() { return hasNationalNumberPattern; }
2125724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getNationalNumberPattern() { return nationalNumberPattern_; }
2135724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc setNationalNumberPattern(String value) {
2145724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasNationalNumberPattern = true;
2155724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      nationalNumberPattern_ = value;
2165724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
2175724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
2185724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
2191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional string possible_number_pattern = 3;
2201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasPossibleNumberPattern;
2215724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String possibleNumberPattern_ = "";
2221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasPossibleNumberPattern() { return hasPossibleNumberPattern; }
2235724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getPossibleNumberPattern() { return possibleNumberPattern_; }
2245724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc setPossibleNumberPattern(String value) {
2255724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasPossibleNumberPattern = true;
2265724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      possibleNumberPattern_ = value;
2275724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
2285724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
2295724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
2301524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional string example_number = 6;
2311524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasExampleNumber;
2325724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String exampleNumber_ = "";
2331524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasExampleNumber() { return hasExampleNumber; }
2345724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getExampleNumber() { return exampleNumber_; }
2355724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc setExampleNumber(String value) {
2365724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasExampleNumber = true;
2375724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      exampleNumber_ = value;
2385724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
2391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
2405724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
2415724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc mergeFrom(PhoneNumberDesc other) {
2425724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (other.hasNationalNumberPattern()) {
2435724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        setNationalNumberPattern(other.getNationalNumberPattern());
2441524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      }
2455724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (other.hasPossibleNumberPattern()) {
2465724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        setPossibleNumberPattern(other.getPossibleNumberPattern());
2471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      }
2485724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (other.hasExampleNumber()) {
2495724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        setExampleNumber(other.getExampleNumber());
2501524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      }
2515724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
2521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
2535724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
2545724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public boolean exactlySameAs(PhoneNumberDesc other) {
2555724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return nationalNumberPattern_.equals(other.nationalNumberPattern_) &&
2565724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia          possibleNumberPattern_.equals(other.possibleNumberPattern_) &&
2575724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia          exampleNumber_.equals(other.exampleNumber_);
2581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
259bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
260bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia    public void writeExternal(ObjectOutput objectOutput) throws IOException {
261bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasNationalNumberPattern);
262bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasNationalNumberPattern) {
263bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        objectOutput.writeUTF(nationalNumberPattern_);
264bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
265bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
266bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasPossibleNumberPattern);
267bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasPossibleNumberPattern) {
268bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        objectOutput.writeUTF(possibleNumberPattern_);
269bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
270bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
271bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasExampleNumber);
272bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasExampleNumber) {
273bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        objectOutput.writeUTF(exampleNumber_);
274bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
275bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia    }
276bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
277f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia    public void readExternal(ObjectInput objectInput) throws IOException {
278bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (objectInput.readBoolean()) {
279bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setNationalNumberPattern(objectInput.readUTF());
280bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
281bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
282bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (objectInput.readBoolean()) {
283bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setPossibleNumberPattern(objectInput.readUTF());
284bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
285bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
286bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (objectInput.readBoolean()) {
287bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setExampleNumber(objectInput.readUTF());
288bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
289bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia    }
2901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia  }
2915724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
292372bff8dd464574d36737d47e495cad14346653cShaopeng Jia  public static class PhoneMetadata implements Externalizable {
2935724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private static final long serialVersionUID = 1;
2945724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata() {}
2955724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
296372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    /**
297372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     * Provides a dummy builder.
298372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     *
299372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     * @see NumberFormat.Builder
300372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     */
301372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public static final class Builder extends PhoneMetadata {
302372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      public PhoneMetadata build() {
303372bff8dd464574d36737d47e495cad14346653cShaopeng Jia        return this;
304372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      }
305372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
306372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public static Builder newBuilder() {
307372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      return new Builder();
308372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
309372bff8dd464574d36737d47e495cad14346653cShaopeng Jia
310bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc general_desc = 1;
3115724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private boolean hasGeneralDesc;
3125724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private PhoneNumberDesc generalDesc_ = null;
3135724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public boolean hasGeneralDesc() { return hasGeneralDesc; }
3145724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc getGeneralDesc() { return generalDesc_; }
3155724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setGeneralDesc(PhoneNumberDesc value) {
3165724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
3175724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
3181524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      }
3195724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasGeneralDesc = true;
3205724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      generalDesc_ = value;
3215724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
3221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
3235724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
324bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc fixed_line = 2;
3251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasFixedLine;
3265724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private PhoneNumberDesc fixedLine_ = null;
3271524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasFixedLine() { return hasFixedLine; }
3285724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc getFixedLine() { return fixedLine_; }
3295724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setFixedLine(PhoneNumberDesc value) {
3305724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
3315724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
3325724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      }
3335724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasFixedLine = true;
3345724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      fixedLine_ = value;
3355724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
3365724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
3375724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
338bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc mobile = 3;
3391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasMobile;
3405724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private PhoneNumberDesc mobile_ = null;
3411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasMobile() { return hasMobile; }
3425724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc getMobile() { return mobile_; }
3435724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setMobile(PhoneNumberDesc value) {
3445724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
3455724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
3465724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      }
3475724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasMobile = true;
3485724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      mobile_ = value;
3495724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
3505724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
3515724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
352bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc toll_free = 4;
3531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasTollFree;
3545724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private PhoneNumberDesc tollFree_ = null;
3551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasTollFree() { return hasTollFree; }
3565724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc getTollFree() { return tollFree_; }
3575724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setTollFree(PhoneNumberDesc value) {
3585724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
3595724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
3605724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      }
3615724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasTollFree = true;
3625724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      tollFree_ = value;
3635724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
3645724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
3655724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
366bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc premium_rate = 5;
3671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasPremiumRate;
3685724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private PhoneNumberDesc premiumRate_ = null;
3691524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasPremiumRate() { return hasPremiumRate; }
3705724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc getPremiumRate() { return premiumRate_; }
3715724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setPremiumRate(PhoneNumberDesc value) {
3725724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
3735724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
3745724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      }
3755724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasPremiumRate = true;
3765724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      premiumRate_ = value;
3775724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
3785724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
3795724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
380bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc shared_cost = 6;
3811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasSharedCost;
3825724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private PhoneNumberDesc sharedCost_ = null;
3831524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasSharedCost() { return hasSharedCost; }
3845724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc getSharedCost() { return sharedCost_; }
3855724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setSharedCost(PhoneNumberDesc value) {
3865724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
3875724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
3885724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      }
3895724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasSharedCost = true;
3905724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      sharedCost_ = value;
3915724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
3925724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
3935724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
394bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc personal_number = 7;
3951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasPersonalNumber;
3965724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private PhoneNumberDesc personalNumber_ = null;
3971524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasPersonalNumber() { return hasPersonalNumber; }
3985724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc getPersonalNumber() { return personalNumber_; }
3995724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setPersonalNumber(PhoneNumberDesc value) {
4005724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
4015724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
4025724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      }
4035724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasPersonalNumber = true;
4045724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      personalNumber_ = value;
4055724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
4065724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
4075724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
408bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc voip = 8;
4091524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasVoip;
4105724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private PhoneNumberDesc voip_ = null;
4111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasVoip() { return hasVoip; }
4125724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneNumberDesc getVoip() { return voip_; }
4135724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setVoip(PhoneNumberDesc value) {
4145724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
4155724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
4165724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      }
4175724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasVoip = true;
4185724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      voip_ = value;
4195724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
4205724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
4215724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
422bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc pager = 21;
423b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia    private boolean hasPager;
424b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia    private PhoneNumberDesc pager_ = null;
425b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia    public boolean hasPager() { return hasPager; }
426b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia    public PhoneNumberDesc getPager() { return pager_; }
427b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia    public PhoneMetadata setPager(PhoneNumberDesc value) {
428b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      if (value == null) {
429b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia        throw new NullPointerException();
430b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      }
431b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      hasPager = true;
432b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      pager_ = value;
433b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      return this;
434b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia    }
435b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia
436bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc uan = 25;
43774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    private boolean hasUan;
43874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    private PhoneNumberDesc uan_ = null;
43974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    public boolean hasUan() { return hasUan; }
44074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    public PhoneNumberDesc getUan() { return uan_; }
44174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    public PhoneMetadata setUan(PhoneNumberDesc value) {
44274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      if (value == null) {
44374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        throw new NullPointerException();
44474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      }
44574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      hasUan = true;
44674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      uan_ = value;
44774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      return this;
44874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    }
44974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia
450bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc emergency = 27;
451bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    private boolean hasEmergency;
452bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    private PhoneNumberDesc emergency_ = null;
453bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public boolean hasEmergency() { return hasEmergency; }
454bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public PhoneNumberDesc getEmergency() { return emergency_; }
455bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public PhoneMetadata setEmergency(PhoneNumberDesc value) {
456bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (value == null) {
457bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        throw new NullPointerException();
458bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      }
459bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      hasEmergency = true;
460bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      emergency_ = value;
461bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      return this;
462bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    }
463bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia
464bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc voicemail = 28;
465528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia    private boolean hasVoicemail;
466528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia    private PhoneNumberDesc voicemail_ = null;
467528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia    public boolean hasVoicemail() { return hasVoicemail; }
468528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia    public PhoneNumberDesc getVoicemail() { return voicemail_; }
469528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia    public PhoneMetadata setVoicemail(PhoneNumberDesc value) {
470528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      if (value == null) {
471528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia        throw new NullPointerException();
472528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      }
473528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      hasVoicemail = true;
474528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      voicemail_ = value;
475528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      return this;
476528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia    }
477528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia
478bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc short_code = 29;
479bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    private boolean hasShortCode;
480bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    private PhoneNumberDesc shortCode_ = null;
481bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public boolean hasShortCode() { return hasShortCode; }
482bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public PhoneNumberDesc getShortCode() { return shortCode_; }
483bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public PhoneMetadata setShortCode(PhoneNumberDesc value) {
484ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia      if (value == null) {
485ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia        throw new NullPointerException();
486ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia      }
487bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      hasShortCode = true;
488bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      shortCode_ = value;
489bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      return this;
490bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    }
491bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia
492bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc standard_rate = 30;
493bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    private boolean hasStandardRate;
494bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    private PhoneNumberDesc standardRate_ = null;
495bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public boolean hasStandardRate() { return hasStandardRate; }
496bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public PhoneNumberDesc getStandardRate() { return standardRate_; }
497bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public PhoneMetadata setStandardRate(PhoneNumberDesc value) {
498bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (value == null) {
499bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        throw new NullPointerException();
500bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      }
501bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      hasStandardRate = true;
502bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      standardRate_ = value;
503bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      return this;
504bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    }
505bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia
506bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc carrier_specific = 31;
507bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    private boolean hasCarrierSpecific;
508bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    private PhoneNumberDesc carrierSpecific_ = null;
509bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public boolean hasCarrierSpecific() { return hasCarrierSpecific; }
510bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public PhoneNumberDesc getCarrierSpecific() { return carrierSpecific_; }
511bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    public PhoneMetadata setCarrierSpecific(PhoneNumberDesc value) {
512bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (value == null) {
513bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        throw new NullPointerException();
514bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      }
515bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      hasCarrierSpecific = true;
516bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      carrierSpecific_ = value;
517ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia      return this;
518ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia    }
519ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia
520bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia    // optional PhoneNumberDesc noInternationalDialling = 24;
52174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    private boolean hasNoInternationalDialling;
52274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    private PhoneNumberDesc noInternationalDialling_ = null;
52374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    public boolean hasNoInternationalDialling() { return hasNoInternationalDialling; }
52474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    public PhoneNumberDesc getNoInternationalDialling() { return noInternationalDialling_; }
52574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    public PhoneMetadata setNoInternationalDialling(PhoneNumberDesc value) {
52674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      if (value == null) {
52774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        throw new NullPointerException();
52874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      }
52974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      hasNoInternationalDialling = true;
53074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      noInternationalDialling_ = value;
53174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      return this;
53274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia    }
53374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia
5341524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // required string id = 9;
5351524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasId;
5365724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String id_ = "";
5371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasId() { return hasId; }
5385724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getId() { return id_; }
5395724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setId(String value) {
5405724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasId = true;
5415724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      id_ = value;
5425724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
5435724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
5445724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
545f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia    // optional int32 country_code = 10;
5461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasCountryCode;
5471524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private int countryCode_ = 0;
5481524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasCountryCode() { return hasCountryCode; }
5491524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public int getCountryCode() { return countryCode_; }
5505724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setCountryCode(int value) {
5515724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasCountryCode = true;
5525724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      countryCode_ = value;
5535724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
5545724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
5555724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
556f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia    // optional string international_prefix = 11;
5571524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasInternationalPrefix;
5585724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String internationalPrefix_ = "";
5591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasInternationalPrefix() { return hasInternationalPrefix; }
5605724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getInternationalPrefix() { return internationalPrefix_; }
5615724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setInternationalPrefix(String value) {
5625724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasInternationalPrefix = true;
5635724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      internationalPrefix_ = value;
5645724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
5655724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
5665724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
5671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional string preferred_international_prefix = 17;
5681524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasPreferredInternationalPrefix;
5695724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String preferredInternationalPrefix_ = "";
5701524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasPreferredInternationalPrefix() { return hasPreferredInternationalPrefix; }
5715724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getPreferredInternationalPrefix() { return preferredInternationalPrefix_; }
5725724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setPreferredInternationalPrefix(String value) {
5735724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasPreferredInternationalPrefix = true;
5745724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      preferredInternationalPrefix_ = value;
5755724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
5765724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
5775724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
5781524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional string national_prefix = 12;
5791524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasNationalPrefix;
5805724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String nationalPrefix_ = "";
5811524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasNationalPrefix() { return hasNationalPrefix; }
5825724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getNationalPrefix() { return nationalPrefix_; }
5835724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setNationalPrefix(String value) {
5845724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasNationalPrefix = true;
5855724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      nationalPrefix_ = value;
5865724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
5875724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
5885724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
5891524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional string preferred_extn_prefix = 13;
5901524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasPreferredExtnPrefix;
5915724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String preferredExtnPrefix_ = "";
5921524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasPreferredExtnPrefix() { return hasPreferredExtnPrefix; }
5935724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getPreferredExtnPrefix() { return preferredExtnPrefix_; }
5945724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setPreferredExtnPrefix(String value) {
5955724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasPreferredExtnPrefix = true;
5965724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      preferredExtnPrefix_ = value;
5975724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
5985724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
5995724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
6001524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional string national_prefix_for_parsing = 15;
6011524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasNationalPrefixForParsing;
6025724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String nationalPrefixForParsing_ = "";
6031524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasNationalPrefixForParsing() { return hasNationalPrefixForParsing; }
6045724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getNationalPrefixForParsing() { return nationalPrefixForParsing_; }
6055724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setNationalPrefixForParsing(String value) {
6065724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasNationalPrefixForParsing = true;
6075724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      nationalPrefixForParsing_ = value;
6085724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
6095724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
6105724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
6111524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional string national_prefix_transform_rule = 16;
6121524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasNationalPrefixTransformRule;
6135724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private String nationalPrefixTransformRule_ = "";
6141524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasNationalPrefixTransformRule() { return hasNationalPrefixTransformRule; }
6155724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public String getNationalPrefixTransformRule() { return nationalPrefixTransformRule_; }
6165724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setNationalPrefixTransformRule(String value) {
6175724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasNationalPrefixTransformRule = true;
6185724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      nationalPrefixTransformRule_ = value;
6195724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
6205724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
6215724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
6221524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    // optional bool same_mobile_and_fixed_line_pattern = 18 [default = false];
6231524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean hasSameMobileAndFixedLinePattern;
6241524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    private boolean sameMobileAndFixedLinePattern_ = false;
6251524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public boolean hasSameMobileAndFixedLinePattern() { return hasSameMobileAndFixedLinePattern; }
626d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia    public boolean isSameMobileAndFixedLinePattern() { return sameMobileAndFixedLinePattern_; }
6275724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata setSameMobileAndFixedLinePattern(boolean value) {
6285724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      hasSameMobileAndFixedLinePattern = true;
6295724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      sameMobileAndFixedLinePattern_ = value;
6305724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
6315724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
6325724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
6335724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    // repeated NumberFormat number_format = 19;
634bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia    private java.util.List<NumberFormat> numberFormat_ = new java.util.ArrayList<NumberFormat>();
635372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public java.util.List<NumberFormat> numberFormats() {
6361524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      return numberFormat_;
6371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
638372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public int numberFormatSize() { return numberFormat_.size(); }
6395724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public NumberFormat getNumberFormat(int index) {
6401524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      return numberFormat_.get(index);
6411524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
6425724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata addNumberFormat(NumberFormat value) {
6435724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
6445724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
6455724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      }
6465724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      numberFormat_.add(value);
6475724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
6485724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    }
6495724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
6505724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    // repeated NumberFormat intl_number_format = 20;
6515724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private java.util.List<NumberFormat> intlNumberFormat_ =
652bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        new java.util.ArrayList<NumberFormat>();
653372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public java.util.List<NumberFormat> intlNumberFormats() {
6541524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      return intlNumberFormat_;
6551524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
656372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public int intlNumberFormatSize() { return intlNumberFormat_.size(); }
6575724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public NumberFormat getIntlNumberFormat(int index) {
6581524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      return intlNumberFormat_.get(index);
6591524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
660bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
6615724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadata addIntlNumberFormat(NumberFormat value) {
6625724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
6635724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
6641524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      }
6655724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      intlNumberFormat_.add(value);
6665724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
6671524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
668372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public PhoneMetadata clearIntlNumberFormat() {
669372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      intlNumberFormat_.clear();
670372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      return this;
671372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
6725724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
6734b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    // optional bool main_country_for_code = 22 [default = false];
6744b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    private boolean hasMainCountryForCode;
6754b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    private boolean mainCountryForCode_ = false;
6764b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    public boolean hasMainCountryForCode() { return hasMainCountryForCode; }
677372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public boolean isMainCountryForCode() { return mainCountryForCode_; }
678d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia    // Method that lets this class have the same interface as the one generated by Protocol Buffers
679d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia    // which is used by C++ build tools.
680d1db4c508088ac27cb0815a222cf2600f16ad5b9Shaopeng Jia    public boolean getMainCountryForCode() { return mainCountryForCode_; }
6814b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    public PhoneMetadata setMainCountryForCode(boolean value) {
6824b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      hasMainCountryForCode = true;
6834b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      mainCountryForCode_ = value;
6844b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      return this;
6854b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    }
6864b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia
6874b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    // optional string leading_digits = 23;
6884b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    private boolean hasLeadingDigits;
6894b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    private String leadingDigits_ = "";
6904b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    public boolean hasLeadingDigits() { return hasLeadingDigits; }
6914b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    public String getLeadingDigits() { return leadingDigits_; }
6924b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    public PhoneMetadata setLeadingDigits(String value) {
6934b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      hasLeadingDigits = true;
6944b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      leadingDigits_ = value;
6954b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      return this;
6964b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia    }
6974b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia
698372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    // optional bool leading_zero_possible = 26 [default = false];
699372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    private boolean hasLeadingZeroPossible;
700372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    private boolean leadingZeroPossible_ = false;
701372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public boolean hasLeadingZeroPossible() { return hasLeadingZeroPossible; }
702372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public boolean isLeadingZeroPossible() { return leadingZeroPossible_; }
703372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public PhoneMetadata setLeadingZeroPossible(boolean value) {
704372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      hasLeadingZeroPossible = true;
705372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      leadingZeroPossible_ = value;
706372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      return this;
707372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
708372bff8dd464574d36737d47e495cad14346653cShaopeng Jia
709f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia    // optional bool mobile_number_portable_region = 32 [default = false];
710f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia    private boolean hasMobileNumberPortableRegion;
711f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia    private boolean mobileNumberPortableRegion_ = false;
712f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia    public boolean hasMobileNumberPortableRegion() { return hasMobileNumberPortableRegion; }
713f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia    public boolean isMobileNumberPortableRegion() { return mobileNumberPortableRegion_; }
714f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia    public PhoneMetadata setMobileNumberPortableRegion(boolean value) {
715f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia      hasMobileNumberPortableRegion = true;
716f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia      mobileNumberPortableRegion_ = value;
717f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia      return this;
718f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia    }
719f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia
720bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia    public void writeExternal(ObjectOutput objectOutput) throws IOException {
721bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasGeneralDesc);
722bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasGeneralDesc) {
723bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        generalDesc_.writeExternal(objectOutput);
724bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
725bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasFixedLine);
726bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasFixedLine) {
727bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        fixedLine_.writeExternal(objectOutput);
728bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
729bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasMobile);
730bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasMobile) {
731bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        mobile_.writeExternal(objectOutput);
732bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
733bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasTollFree);
734bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasTollFree) {
735bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        tollFree_.writeExternal(objectOutput);
736bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
737bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasPremiumRate);
738bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasPremiumRate) {
739bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        premiumRate_.writeExternal(objectOutput);
740bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
741bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasSharedCost);
742bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasSharedCost) {
743bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        sharedCost_.writeExternal(objectOutput);
744bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
745bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasPersonalNumber);
746bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasPersonalNumber) {
747bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        personalNumber_.writeExternal(objectOutput);
748bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
749bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasVoip);
750bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasVoip) {
751bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        voip_.writeExternal(objectOutput);
752bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
753b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      objectOutput.writeBoolean(hasPager);
754b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      if (hasPager) {
755b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia        pager_.writeExternal(objectOutput);
756b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      }
75774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      objectOutput.writeBoolean(hasUan);
75874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      if (hasUan) {
75974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        uan_.writeExternal(objectOutput);
76074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      }
761bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      objectOutput.writeBoolean(hasEmergency);
762bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (hasEmergency) {
763bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        emergency_.writeExternal(objectOutput);
764bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      }
765528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      objectOutput.writeBoolean(hasVoicemail);
766528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      if (hasVoicemail) {
767528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia        voicemail_.writeExternal(objectOutput);
768528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      }
769bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      objectOutput.writeBoolean(hasShortCode);
770bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (hasShortCode) {
771bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        shortCode_.writeExternal(objectOutput);
772bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      }
773bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      objectOutput.writeBoolean(hasStandardRate);
774bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (hasStandardRate) {
775bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        standardRate_.writeExternal(objectOutput);
776bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      }
777bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      objectOutput.writeBoolean(hasCarrierSpecific);
778bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (hasCarrierSpecific) {
779bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        carrierSpecific_.writeExternal(objectOutput);
780ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia      }
78174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      objectOutput.writeBoolean(hasNoInternationalDialling);
78274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      if (hasNoInternationalDialling) {
78374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        noInternationalDialling_.writeExternal(objectOutput);
78474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      }
785bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
786bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeUTF(id_);
787bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeInt(countryCode_);
788bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeUTF(internationalPrefix_);
789bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
790bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasPreferredInternationalPrefix);
791bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasPreferredInternationalPrefix) {
792bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        objectOutput.writeUTF(preferredInternationalPrefix_);
793bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
794bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
795bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasNationalPrefix);
796bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasNationalPrefix) {
797bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        objectOutput.writeUTF(nationalPrefix_);
798bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
799bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
800bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasPreferredExtnPrefix);
801bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasPreferredExtnPrefix) {
802bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        objectOutput.writeUTF(preferredExtnPrefix_);
803bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
804bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
805bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasNationalPrefixForParsing);
806bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasNationalPrefixForParsing) {
807bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        objectOutput.writeUTF(nationalPrefixForParsing_);
808bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
809bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
810bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(hasNationalPrefixTransformRule);
811bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasNationalPrefixTransformRule) {
812bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        objectOutput.writeUTF(nationalPrefixTransformRule_);
813bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
814bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
815bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeBoolean(sameMobileAndFixedLinePattern_);
816bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
817372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      int numberFormatSize = numberFormatSize();
818bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeInt(numberFormatSize);
819bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      for (int i = 0; i < numberFormatSize; i++) {
820bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        numberFormat_.get(i).writeExternal(objectOutput);
821bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
822bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
823372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      int intlNumberFormatSize = intlNumberFormatSize();
824bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeInt(intlNumberFormatSize);
825bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      for (int i = 0; i < intlNumberFormatSize; i++) {
826bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        intlNumberFormat_.get(i).writeExternal(objectOutput);
827bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
8284b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia
8294b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      objectOutput.writeBoolean(mainCountryForCode_);
8304b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia
8314b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      objectOutput.writeBoolean(hasLeadingDigits);
8324b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      if (hasLeadingDigits) {
8334b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia        objectOutput.writeUTF(leadingDigits_);
8344b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      }
835372bff8dd464574d36737d47e495cad14346653cShaopeng Jia
836372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      objectOutput.writeBoolean(leadingZeroPossible_);
837f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia
838f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia      objectOutput.writeBoolean(mobileNumberPortableRegion_);
8391524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
8405724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
841f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia    public void readExternal(ObjectInput objectInput) throws IOException {
842bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      boolean hasDesc = objectInput.readBoolean();
843bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasDesc) {
844bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
845bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        desc.readExternal(objectInput);
846bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setGeneralDesc(desc);
847bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
848bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasDesc = objectInput.readBoolean();
849bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasDesc) {
850bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
851bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        desc.readExternal(objectInput);
852bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setFixedLine(desc);
853bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
854bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasDesc = objectInput.readBoolean();
855bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasDesc) {
856bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
857bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        desc.readExternal(objectInput);
858bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setMobile(desc);
859bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
860bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasDesc = objectInput.readBoolean();
861bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasDesc) {
862bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
863bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        desc.readExternal(objectInput);
864bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setTollFree(desc);
865bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
866bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasDesc = objectInput.readBoolean();
867bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasDesc) {
868bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
869bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        desc.readExternal(objectInput);
870bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setPremiumRate(desc);
871bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
872bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasDesc = objectInput.readBoolean();
873bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasDesc) {
874bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
875bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        desc.readExternal(objectInput);
876bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setSharedCost(desc);
877bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
878bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasDesc = objectInput.readBoolean();
879bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasDesc) {
880bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
881bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        desc.readExternal(objectInput);
882bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setPersonalNumber(desc);
883bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
884bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasDesc = objectInput.readBoolean();
885bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasDesc) {
886bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
887bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        desc.readExternal(objectInput);
888bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setVoip(desc);
889bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
890b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      hasDesc = objectInput.readBoolean();
891b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      if (hasDesc) {
892b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
893b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia        desc.readExternal(objectInput);
894b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia        setPager(desc);
895b2697412130f6d087dde01fb1a978f7e5840a5faShaopeng Jia      }
89674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      hasDesc = objectInput.readBoolean();
89774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      if (hasDesc) {
89874aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
89974aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        desc.readExternal(objectInput);
90074aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        setUan(desc);
90174aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      }
90274aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      hasDesc = objectInput.readBoolean();
90374aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      if (hasDesc) {
90474aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
90574aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        desc.readExternal(objectInput);
906bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        setEmergency(desc);
907bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      }
908bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      hasDesc = objectInput.readBoolean();
909bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (hasDesc) {
910bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
911bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        desc.readExternal(objectInput);
912528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia        setVoicemail(desc);
913528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      }
914528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      hasDesc = objectInput.readBoolean();
915528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia      if (hasDesc) {
916528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
917528b0d12a556ff0c2d16f99d56fcdd62657f433cShaopeng Jia        desc.readExternal(objectInput);
918bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        setShortCode(desc);
919bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      }
920bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      hasDesc = objectInput.readBoolean();
921bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (hasDesc) {
922bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
923bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        desc.readExternal(objectInput);
924bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        setStandardRate(desc);
925bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      }
926bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      hasDesc = objectInput.readBoolean();
927bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia      if (hasDesc) {
928bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
929bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        desc.readExternal(objectInput);
930bb78ce92eae2d5de9aa06b27ed3b87bc496c79eeShaopeng Jia        setCarrierSpecific(desc);
931ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia      }
932ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia      hasDesc = objectInput.readBoolean();
933ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia      if (hasDesc) {
934ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia        PhoneNumberDesc desc = new PhoneNumberDesc();
935ca1e43d6e1fac07c7fc29c66c7da1fa9d7cf50f2Shaopeng Jia        desc.readExternal(objectInput);
93674aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia        setNoInternationalDialling(desc);
93774aa862e30b4d1b2722e90b1a8684274441a7541Shaopeng Jia      }
938bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
939bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      setId(objectInput.readUTF());
940bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      setCountryCode(objectInput.readInt());
941bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      setInternationalPrefix(objectInput.readUTF());
942bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
943bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      boolean hasString = objectInput.readBoolean();
944bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasString) {
945bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setPreferredInternationalPrefix(objectInput.readUTF());
946bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
947bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
948bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasString = objectInput.readBoolean();
949bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasString) {
950bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setNationalPrefix(objectInput.readUTF());
951bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
952bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
953bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasString = objectInput.readBoolean();
954bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasString) {
955bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setPreferredExtnPrefix(objectInput.readUTF());
956bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
957bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
958bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasString = objectInput.readBoolean();
959bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasString) {
960bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setNationalPrefixForParsing(objectInput.readUTF());
961bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
962bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
963bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      hasString = objectInput.readBoolean();
964bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      if (hasString) {
965bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        setNationalPrefixTransformRule(objectInput.readUTF());
966bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
967bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
968bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      setSameMobileAndFixedLinePattern(objectInput.readBoolean());
969bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
970bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      int nationalFormatSize = objectInput.readInt();
971bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      for (int i = 0; i < nationalFormatSize; i++) {
972bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        NumberFormat numFormat = new NumberFormat();
973bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        numFormat.readExternal(objectInput);
974bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        numberFormat_.add(numFormat);
975bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
976bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
977bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      int intlNumberFormatSize = objectInput.readInt();
978bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      for (int i = 0; i < intlNumberFormatSize; i++) {
979bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        NumberFormat numFormat = new NumberFormat();
980bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        numFormat.readExternal(objectInput);
981bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        intlNumberFormat_.add(numFormat);
982bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
9834b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia
9844b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      setMainCountryForCode(objectInput.readBoolean());
9854b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia
9864b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      hasString = objectInput.readBoolean();
9874b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      if (hasString) {
9884b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia        setLeadingDigits(objectInput.readUTF());
9894b7846722d1a5acb0577b07e98324f744f5e7942Shaopeng Jia      }
990372bff8dd464574d36737d47e495cad14346653cShaopeng Jia
991372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      setLeadingZeroPossible(objectInput.readBoolean());
992f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia
993f9768eb3c8f303725fb4f899598481cbc4fb76a3Shaopeng Jia      setMobileNumberPortableRegion(objectInput.readBoolean());
9941524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
9951524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia  }
9965724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
997372bff8dd464574d36737d47e495cad14346653cShaopeng Jia  public static class PhoneMetadataCollection implements Externalizable {
9985724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    private static final long serialVersionUID = 1;
9995724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadataCollection() {}
10005724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia
1001372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    /**
1002372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     * Provides a dummy builder.
1003372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     *
1004372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     * @see NumberFormat.Builder
1005372bff8dd464574d36737d47e495cad14346653cShaopeng Jia     */
1006372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public static final class Builder extends PhoneMetadataCollection {
1007372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      public PhoneMetadataCollection build() {
1008372bff8dd464574d36737d47e495cad14346653cShaopeng Jia        return this;
1009372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      }
1010372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
1011372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    public static Builder newBuilder() {
1012372bff8dd464574d36737d47e495cad14346653cShaopeng Jia      return new Builder();
1013372bff8dd464574d36737d47e495cad14346653cShaopeng Jia    }
1014372bff8dd464574d36737d47e495cad14346653cShaopeng Jia
10155724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    // repeated PhoneMetadata metadata = 1;
1016bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia    private java.util.List<PhoneMetadata> metadata_ = new java.util.ArrayList<PhoneMetadata>();
1017bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
10185724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public java.util.List<PhoneMetadata> getMetadataList() {
10191524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      return metadata_;
10201524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
10211524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    public int getMetadataCount() { return metadata_.size(); }
1022bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
10235724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia    public PhoneMetadataCollection addMetadata(PhoneMetadata value) {
10245724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      if (value == null) {
10255724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia        throw new NullPointerException();
10261524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia      }
10275724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      metadata_.add(value);
10285724d94f83d41d33bfdf9fdbaddbfebb1a0e77f0Shaopeng Jia      return this;
10291524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
1030bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
1031bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia    public void writeExternal(ObjectOutput objectOutput) throws IOException {
1032bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      int size = getMetadataCount();
1033bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      objectOutput.writeInt(size);
1034bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      for (int i = 0; i < size; i++) {
1035bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        metadata_.get(i).writeExternal(objectOutput);
1036bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
10371524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
1038bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia
1039f59ccfca9dd02c4e3cf3e06b5cf184a8d0e67626Shaopeng Jia    public void readExternal(ObjectInput objectInput) throws IOException {
1040bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      int size = objectInput.readInt();
1041bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      for (int i = 0; i < size; i++) {
1042bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        PhoneMetadata metadata = new PhoneMetadata();
1043bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        metadata.readExternal(objectInput);
1044bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia        metadata_.add(metadata);
1045bef3e6ee44a7666b4748f5f471d32b9a9371f2d8Shaopeng Jia      }
10461524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia    }
1047fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia
1048fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia    public PhoneMetadataCollection clear() {
1049fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia      metadata_.clear();
1050fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia      return this;
1051fa42140081949568565af7dc8c22f0600ad90a8aShaopeng Jia    }
10521524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia  }
10531524ca8c53cd2c3adee0bb2e2b95a93fee976862Shaopeng Jia}
1054