1/*
2 * Copyright (C) 2010 The Libphonenumber Authors
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/**
18 * Definition of the class representing metadata for international telephone numbers. This class is
19 * hand created based on the class file compiled from phonemetadata.proto. Please refer to that file
20 * for detailed descriptions of the meaning of each field.
21 */
22
23package com.android.i18n.phonenumbers;
24
25import java.io.Externalizable;
26import java.io.IOException;
27import java.io.ObjectInput;
28import java.io.ObjectOutput;
29
30public final class Phonemetadata {
31  private Phonemetadata() {}
32  public static class NumberFormat implements Externalizable {
33    private static final long serialVersionUID = 1;
34    public NumberFormat() {}
35
36    /**
37     * Provides a dummy builder to 'emulate' the API of the code generated by the latest version of
38     * Protocol Buffers. This lets BuildMetadataFromXml class to build with both this hand created
39     * class and the one generated by the latest version of Protocol Buffers.
40     */
41    public static final class Builder extends NumberFormat {
42      public NumberFormat build() {
43        return this;
44      }
45    }
46    public static Builder newBuilder() {
47      return new Builder();
48    }
49
50    // required string pattern = 1;
51    private boolean hasPattern;
52    private String pattern_ = "";
53    public boolean hasPattern() { return hasPattern; }
54    public String getPattern() { return pattern_; }
55    public NumberFormat setPattern(String value) {
56      hasPattern = true;
57      pattern_ = value;
58      return this;
59    }
60
61    // required string format = 2;
62    private boolean hasFormat;
63    private String format_ = "";
64    public boolean hasFormat() { return hasFormat; }
65    public String getFormat() { return format_; }
66    public NumberFormat setFormat(String value) {
67      hasFormat = true;
68      format_ = value;
69      return this;
70    }
71
72    // repeated string leading_digits_pattern = 3;
73    private java.util.List<String> leadingDigitsPattern_ = new java.util.ArrayList<String>();
74    public java.util.List<String> leadingDigitPatterns() {
75      return leadingDigitsPattern_;
76    }
77    public int leadingDigitsPatternSize() { return leadingDigitsPattern_.size(); }
78    public String getLeadingDigitsPattern(int index) {
79      return leadingDigitsPattern_.get(index);
80    }
81    public NumberFormat addLeadingDigitsPattern(String value) {
82      if (value == null) {
83        throw new NullPointerException();
84      }
85      leadingDigitsPattern_.add(value);
86      return this;
87    }
88
89    // optional string national_prefix_formatting_rule = 4;
90    private boolean hasNationalPrefixFormattingRule;
91    private String nationalPrefixFormattingRule_ = "";
92    public boolean hasNationalPrefixFormattingRule() { return hasNationalPrefixFormattingRule; }
93    public String getNationalPrefixFormattingRule() { return nationalPrefixFormattingRule_; }
94    public NumberFormat setNationalPrefixFormattingRule(String value) {
95      hasNationalPrefixFormattingRule = true;
96      nationalPrefixFormattingRule_ = value;
97      return this;
98    }
99    public NumberFormat clearNationalPrefixFormattingRule() {
100      hasNationalPrefixFormattingRule = false;
101      nationalPrefixFormattingRule_ = "";
102      return this;
103    }
104
105    // optional bool national_prefix_optional_when_formatting = 6;
106    private boolean hasNationalPrefixOptionalWhenFormatting;
107    private boolean nationalPrefixOptionalWhenFormatting_ = false;
108    public boolean hasNationalPrefixOptionalWhenFormatting() {
109      return hasNationalPrefixOptionalWhenFormatting; }
110    public boolean isNationalPrefixOptionalWhenFormatting() {
111      return nationalPrefixOptionalWhenFormatting_; }
112    public NumberFormat setNationalPrefixOptionalWhenFormatting(boolean value) {
113      hasNationalPrefixOptionalWhenFormatting = true;
114      nationalPrefixOptionalWhenFormatting_ = value;
115      return this;
116    }
117
118    // optional string domestic_carrier_code_formatting_rule = 5;
119    private boolean hasDomesticCarrierCodeFormattingRule;
120    private String domesticCarrierCodeFormattingRule_ = "";
121    public boolean hasDomesticCarrierCodeFormattingRule() {
122      return hasDomesticCarrierCodeFormattingRule; }
123    public String getDomesticCarrierCodeFormattingRule() {
124      return domesticCarrierCodeFormattingRule_; }
125    public NumberFormat setDomesticCarrierCodeFormattingRule(String value) {
126      hasDomesticCarrierCodeFormattingRule = true;
127      domesticCarrierCodeFormattingRule_ = value;
128      return this;
129    }
130
131    public NumberFormat mergeFrom(NumberFormat other) {
132      if (other.hasPattern()) {
133        setPattern(other.getPattern());
134      }
135      if (other.hasFormat()) {
136        setFormat(other.getFormat());
137      }
138      int leadingDigitsPatternSize = other.leadingDigitsPatternSize();
139      for (int i = 0; i < leadingDigitsPatternSize; i++) {
140        addLeadingDigitsPattern(other.getLeadingDigitsPattern(i));
141      }
142      if (other.hasNationalPrefixFormattingRule()) {
143        setNationalPrefixFormattingRule(other.getNationalPrefixFormattingRule());
144      }
145      if (other.hasDomesticCarrierCodeFormattingRule()) {
146        setDomesticCarrierCodeFormattingRule(other.getDomesticCarrierCodeFormattingRule());
147      }
148      setNationalPrefixOptionalWhenFormatting(other.isNationalPrefixOptionalWhenFormatting());
149      return this;
150    }
151
152    public void writeExternal(ObjectOutput objectOutput) throws IOException {
153      objectOutput.writeUTF(pattern_);
154      objectOutput.writeUTF(format_);
155      int leadingDigitsPatternSize = leadingDigitsPatternSize();
156      objectOutput.writeInt(leadingDigitsPatternSize);
157      for (int i = 0; i < leadingDigitsPatternSize; i++) {
158        objectOutput.writeUTF(leadingDigitsPattern_.get(i));
159      }
160
161      objectOutput.writeBoolean(hasNationalPrefixFormattingRule);
162      if (hasNationalPrefixFormattingRule) {
163        objectOutput.writeUTF(nationalPrefixFormattingRule_);
164      }
165      objectOutput.writeBoolean(hasDomesticCarrierCodeFormattingRule);
166      if (hasDomesticCarrierCodeFormattingRule) {
167        objectOutput.writeUTF(domesticCarrierCodeFormattingRule_);
168      }
169      objectOutput.writeBoolean(nationalPrefixOptionalWhenFormatting_);
170    }
171
172    public void readExternal(ObjectInput objectInput) throws IOException {
173      setPattern(objectInput.readUTF());
174      setFormat(objectInput.readUTF());
175      int leadingDigitsPatternSize = objectInput.readInt();
176      for (int i = 0; i < leadingDigitsPatternSize; i++) {
177        leadingDigitsPattern_.add(objectInput.readUTF());
178      }
179      if (objectInput.readBoolean()) {
180        setNationalPrefixFormattingRule(objectInput.readUTF());
181      }
182      if (objectInput.readBoolean()) {
183        setDomesticCarrierCodeFormattingRule(objectInput.readUTF());
184      }
185      setNationalPrefixOptionalWhenFormatting(objectInput.readBoolean());
186    }
187  }
188
189  public static class PhoneNumberDesc implements Externalizable {
190    private static final long serialVersionUID = 1;
191    public PhoneNumberDesc() {}
192
193    /**
194     * Provides a dummy builder.
195     *
196     * @see NumberFormat.Builder
197     */
198    public static final class Builder extends PhoneNumberDesc {
199      public PhoneNumberDesc build() {
200        return this;
201      }
202    }
203    public static Builder newBuilder() {
204      return new Builder();
205    }
206
207    // optional string national_number_pattern = 2;
208    private boolean hasNationalNumberPattern;
209    private String nationalNumberPattern_ = "";
210    public boolean hasNationalNumberPattern() { return hasNationalNumberPattern; }
211    public String getNationalNumberPattern() { return nationalNumberPattern_; }
212    public PhoneNumberDesc setNationalNumberPattern(String value) {
213      hasNationalNumberPattern = true;
214      nationalNumberPattern_ = value;
215      return this;
216    }
217
218    // optional string possible_number_pattern = 3;
219    private boolean hasPossibleNumberPattern;
220    private String possibleNumberPattern_ = "";
221    public boolean hasPossibleNumberPattern() { return hasPossibleNumberPattern; }
222    public String getPossibleNumberPattern() { return possibleNumberPattern_; }
223    public PhoneNumberDesc setPossibleNumberPattern(String value) {
224      hasPossibleNumberPattern = true;
225      possibleNumberPattern_ = value;
226      return this;
227    }
228
229    // optional string example_number = 6;
230    private boolean hasExampleNumber;
231    private String exampleNumber_ = "";
232    public boolean hasExampleNumber() { return hasExampleNumber; }
233    public String getExampleNumber() { return exampleNumber_; }
234    public PhoneNumberDesc setExampleNumber(String value) {
235      hasExampleNumber = true;
236      exampleNumber_ = value;
237      return this;
238    }
239
240    public PhoneNumberDesc mergeFrom(PhoneNumberDesc other) {
241      if (other.hasNationalNumberPattern()) {
242        setNationalNumberPattern(other.getNationalNumberPattern());
243      }
244      if (other.hasPossibleNumberPattern()) {
245        setPossibleNumberPattern(other.getPossibleNumberPattern());
246      }
247      if (other.hasExampleNumber()) {
248        setExampleNumber(other.getExampleNumber());
249      }
250      return this;
251    }
252
253    public boolean exactlySameAs(PhoneNumberDesc other) {
254      return nationalNumberPattern_.equals(other.nationalNumberPattern_) &&
255          possibleNumberPattern_.equals(other.possibleNumberPattern_) &&
256          exampleNumber_.equals(other.exampleNumber_);
257    }
258
259    public void writeExternal(ObjectOutput objectOutput) throws IOException {
260      objectOutput.writeBoolean(hasNationalNumberPattern);
261      if (hasNationalNumberPattern) {
262        objectOutput.writeUTF(nationalNumberPattern_);
263      }
264
265      objectOutput.writeBoolean(hasPossibleNumberPattern);
266      if (hasPossibleNumberPattern) {
267        objectOutput.writeUTF(possibleNumberPattern_);
268      }
269
270      objectOutput.writeBoolean(hasExampleNumber);
271      if (hasExampleNumber) {
272        objectOutput.writeUTF(exampleNumber_);
273      }
274    }
275
276    public void readExternal(ObjectInput objectInput) throws IOException {
277      if (objectInput.readBoolean()) {
278        setNationalNumberPattern(objectInput.readUTF());
279      }
280
281      if (objectInput.readBoolean()) {
282        setPossibleNumberPattern(objectInput.readUTF());
283      }
284
285      if (objectInput.readBoolean()) {
286        setExampleNumber(objectInput.readUTF());
287      }
288    }
289  }
290
291  public static class PhoneMetadata implements Externalizable {
292    private static final long serialVersionUID = 1;
293    public PhoneMetadata() {}
294
295    /**
296     * Provides a dummy builder.
297     *
298     * @see NumberFormat.Builder
299     */
300    public static final class Builder extends PhoneMetadata {
301      public PhoneMetadata build() {
302        return this;
303      }
304    }
305    public static Builder newBuilder() {
306      return new Builder();
307    }
308
309    // required PhoneNumberDesc general_desc = 1;
310    private boolean hasGeneralDesc;
311    private PhoneNumberDesc generalDesc_ = null;
312    public boolean hasGeneralDesc() { return hasGeneralDesc; }
313    public PhoneNumberDesc getGeneralDesc() { return generalDesc_; }
314    public PhoneMetadata setGeneralDesc(PhoneNumberDesc value) {
315      if (value == null) {
316        throw new NullPointerException();
317      }
318      hasGeneralDesc = true;
319      generalDesc_ = value;
320      return this;
321    }
322
323    // required PhoneNumberDesc fixed_line = 2;
324    private boolean hasFixedLine;
325    private PhoneNumberDesc fixedLine_ = null;
326    public boolean hasFixedLine() { return hasFixedLine; }
327    public PhoneNumberDesc getFixedLine() { return fixedLine_; }
328    public PhoneMetadata setFixedLine(PhoneNumberDesc value) {
329      if (value == null) {
330        throw new NullPointerException();
331      }
332      hasFixedLine = true;
333      fixedLine_ = value;
334      return this;
335    }
336
337    // required PhoneNumberDesc mobile = 3;
338    private boolean hasMobile;
339    private PhoneNumberDesc mobile_ = null;
340    public boolean hasMobile() { return hasMobile; }
341    public PhoneNumberDesc getMobile() { return mobile_; }
342    public PhoneMetadata setMobile(PhoneNumberDesc value) {
343      if (value == null) {
344        throw new NullPointerException();
345      }
346      hasMobile = true;
347      mobile_ = value;
348      return this;
349    }
350
351    // required PhoneNumberDesc toll_free = 4;
352    private boolean hasTollFree;
353    private PhoneNumberDesc tollFree_ = null;
354    public boolean hasTollFree() { return hasTollFree; }
355    public PhoneNumberDesc getTollFree() { return tollFree_; }
356    public PhoneMetadata setTollFree(PhoneNumberDesc value) {
357      if (value == null) {
358        throw new NullPointerException();
359      }
360      hasTollFree = true;
361      tollFree_ = value;
362      return this;
363    }
364
365    // required PhoneNumberDesc premium_rate = 5;
366    private boolean hasPremiumRate;
367    private PhoneNumberDesc premiumRate_ = null;
368    public boolean hasPremiumRate() { return hasPremiumRate; }
369    public PhoneNumberDesc getPremiumRate() { return premiumRate_; }
370    public PhoneMetadata setPremiumRate(PhoneNumberDesc value) {
371      if (value == null) {
372        throw new NullPointerException();
373      }
374      hasPremiumRate = true;
375      premiumRate_ = value;
376      return this;
377    }
378
379    // required PhoneNumberDesc shared_cost = 6;
380    private boolean hasSharedCost;
381    private PhoneNumberDesc sharedCost_ = null;
382    public boolean hasSharedCost() { return hasSharedCost; }
383    public PhoneNumberDesc getSharedCost() { return sharedCost_; }
384    public PhoneMetadata setSharedCost(PhoneNumberDesc value) {
385      if (value == null) {
386        throw new NullPointerException();
387      }
388      hasSharedCost = true;
389      sharedCost_ = value;
390      return this;
391    }
392
393    // required PhoneNumberDesc personal_number = 7;
394    private boolean hasPersonalNumber;
395    private PhoneNumberDesc personalNumber_ = null;
396    public boolean hasPersonalNumber() { return hasPersonalNumber; }
397    public PhoneNumberDesc getPersonalNumber() { return personalNumber_; }
398    public PhoneMetadata setPersonalNumber(PhoneNumberDesc value) {
399      if (value == null) {
400        throw new NullPointerException();
401      }
402      hasPersonalNumber = true;
403      personalNumber_ = value;
404      return this;
405    }
406
407    // required PhoneNumberDesc voip = 8;
408    private boolean hasVoip;
409    private PhoneNumberDesc voip_ = null;
410    public boolean hasVoip() { return hasVoip; }
411    public PhoneNumberDesc getVoip() { return voip_; }
412    public PhoneMetadata setVoip(PhoneNumberDesc value) {
413      if (value == null) {
414        throw new NullPointerException();
415      }
416      hasVoip = true;
417      voip_ = value;
418      return this;
419    }
420
421    // required PhoneNumberDesc pager = 21;
422    private boolean hasPager;
423    private PhoneNumberDesc pager_ = null;
424    public boolean hasPager() { return hasPager; }
425    public PhoneNumberDesc getPager() { return pager_; }
426    public PhoneMetadata setPager(PhoneNumberDesc value) {
427      if (value == null) {
428        throw new NullPointerException();
429      }
430      hasPager = true;
431      pager_ = value;
432      return this;
433    }
434
435    // required PhoneNumberDesc uan = 25;
436    private boolean hasUan;
437    private PhoneNumberDesc uan_ = null;
438    public boolean hasUan() { return hasUan; }
439    public PhoneNumberDesc getUan() { return uan_; }
440    public PhoneMetadata setUan(PhoneNumberDesc value) {
441      if (value == null) {
442        throw new NullPointerException();
443      }
444      hasUan = true;
445      uan_ = value;
446      return this;
447    }
448
449    // required PhoneNumberDesc voicemail = 28;
450    private boolean hasVoicemail;
451    private PhoneNumberDesc voicemail_ = null;
452    public boolean hasVoicemail() { return hasVoicemail; }
453    public PhoneNumberDesc getVoicemail() { return voicemail_; }
454    public PhoneMetadata setVoicemail(PhoneNumberDesc value) {
455      if (value == null) {
456        throw new NullPointerException();
457      }
458      hasVoicemail = true;
459      voicemail_ = value;
460      return this;
461    }
462
463    // required PhoneNumberDesc emergency = 27;
464    private boolean hasEmergency;
465    private PhoneNumberDesc emergency_ = null;
466    public boolean hasEmergency() { return hasEmergency; }
467    public PhoneNumberDesc getEmergency() { return emergency_; }
468    public PhoneMetadata setEmergency(PhoneNumberDesc value) {
469      if (value == null) {
470        throw new NullPointerException();
471      }
472      hasEmergency = true;
473      emergency_ = value;
474      return this;
475    }
476
477    // required PhoneNumberDesc noInternationalDialling = 24;
478    private boolean hasNoInternationalDialling;
479    private PhoneNumberDesc noInternationalDialling_ = null;
480    public boolean hasNoInternationalDialling() { return hasNoInternationalDialling; }
481    public PhoneNumberDesc getNoInternationalDialling() { return noInternationalDialling_; }
482    public PhoneMetadata setNoInternationalDialling(PhoneNumberDesc value) {
483      if (value == null) {
484        throw new NullPointerException();
485      }
486      hasNoInternationalDialling = true;
487      noInternationalDialling_ = value;
488      return this;
489    }
490
491    // required string id = 9;
492    private boolean hasId;
493    private String id_ = "";
494    public boolean hasId() { return hasId; }
495    public String getId() { return id_; }
496    public PhoneMetadata setId(String value) {
497      hasId = true;
498      id_ = value;
499      return this;
500    }
501
502    // required int32 country_code = 10;
503    private boolean hasCountryCode;
504    private int countryCode_ = 0;
505    public boolean hasCountryCode() { return hasCountryCode; }
506    public int getCountryCode() { return countryCode_; }
507    public PhoneMetadata setCountryCode(int value) {
508      hasCountryCode = true;
509      countryCode_ = value;
510      return this;
511    }
512
513    // required string international_prefix = 11;
514    private boolean hasInternationalPrefix;
515    private String internationalPrefix_ = "";
516    public boolean hasInternationalPrefix() { return hasInternationalPrefix; }
517    public String getInternationalPrefix() { return internationalPrefix_; }
518    public PhoneMetadata setInternationalPrefix(String value) {
519      hasInternationalPrefix = true;
520      internationalPrefix_ = value;
521      return this;
522    }
523
524    // optional string preferred_international_prefix = 17;
525    private boolean hasPreferredInternationalPrefix;
526    private String preferredInternationalPrefix_ = "";
527    public boolean hasPreferredInternationalPrefix() { return hasPreferredInternationalPrefix; }
528    public String getPreferredInternationalPrefix() { return preferredInternationalPrefix_; }
529    public PhoneMetadata setPreferredInternationalPrefix(String value) {
530      hasPreferredInternationalPrefix = true;
531      preferredInternationalPrefix_ = value;
532      return this;
533    }
534
535    // optional string national_prefix = 12;
536    private boolean hasNationalPrefix;
537    private String nationalPrefix_ = "";
538    public boolean hasNationalPrefix() { return hasNationalPrefix; }
539    public String getNationalPrefix() { return nationalPrefix_; }
540    public PhoneMetadata setNationalPrefix(String value) {
541      hasNationalPrefix = true;
542      nationalPrefix_ = value;
543      return this;
544    }
545
546    // optional string preferred_extn_prefix = 13;
547    private boolean hasPreferredExtnPrefix;
548    private String preferredExtnPrefix_ = "";
549    public boolean hasPreferredExtnPrefix() { return hasPreferredExtnPrefix; }
550    public String getPreferredExtnPrefix() { return preferredExtnPrefix_; }
551    public PhoneMetadata setPreferredExtnPrefix(String value) {
552      hasPreferredExtnPrefix = true;
553      preferredExtnPrefix_ = value;
554      return this;
555    }
556
557    // optional string national_prefix_for_parsing = 15;
558    private boolean hasNationalPrefixForParsing;
559    private String nationalPrefixForParsing_ = "";
560    public boolean hasNationalPrefixForParsing() { return hasNationalPrefixForParsing; }
561    public String getNationalPrefixForParsing() { return nationalPrefixForParsing_; }
562    public PhoneMetadata setNationalPrefixForParsing(String value) {
563      hasNationalPrefixForParsing = true;
564      nationalPrefixForParsing_ = value;
565      return this;
566    }
567
568    // optional string national_prefix_transform_rule = 16;
569    private boolean hasNationalPrefixTransformRule;
570    private String nationalPrefixTransformRule_ = "";
571    public boolean hasNationalPrefixTransformRule() { return hasNationalPrefixTransformRule; }
572    public String getNationalPrefixTransformRule() { return nationalPrefixTransformRule_; }
573    public PhoneMetadata setNationalPrefixTransformRule(String value) {
574      hasNationalPrefixTransformRule = true;
575      nationalPrefixTransformRule_ = value;
576      return this;
577    }
578
579    // optional bool same_mobile_and_fixed_line_pattern = 18 [default = false];
580    private boolean hasSameMobileAndFixedLinePattern;
581    private boolean sameMobileAndFixedLinePattern_ = false;
582    public boolean hasSameMobileAndFixedLinePattern() { return hasSameMobileAndFixedLinePattern; }
583    public boolean isSameMobileAndFixedLinePattern() { return sameMobileAndFixedLinePattern_; }
584    public PhoneMetadata setSameMobileAndFixedLinePattern(boolean value) {
585      hasSameMobileAndFixedLinePattern = true;
586      sameMobileAndFixedLinePattern_ = value;
587      return this;
588    }
589
590    // repeated NumberFormat number_format = 19;
591    private java.util.List<NumberFormat> numberFormat_ = new java.util.ArrayList<NumberFormat>();
592    public java.util.List<NumberFormat> numberFormats() {
593      return numberFormat_;
594    }
595    public int numberFormatSize() { return numberFormat_.size(); }
596    public NumberFormat getNumberFormat(int index) {
597      return numberFormat_.get(index);
598    }
599    public PhoneMetadata addNumberFormat(NumberFormat value) {
600      if (value == null) {
601        throw new NullPointerException();
602      }
603      numberFormat_.add(value);
604      return this;
605    }
606
607    // repeated NumberFormat intl_number_format = 20;
608    private java.util.List<NumberFormat> intlNumberFormat_ =
609        new java.util.ArrayList<NumberFormat>();
610    public java.util.List<NumberFormat> intlNumberFormats() {
611      return intlNumberFormat_;
612    }
613    public int intlNumberFormatSize() { return intlNumberFormat_.size(); }
614    public NumberFormat getIntlNumberFormat(int index) {
615      return intlNumberFormat_.get(index);
616    }
617
618    public PhoneMetadata addIntlNumberFormat(NumberFormat value) {
619      if (value == null) {
620        throw new NullPointerException();
621      }
622      intlNumberFormat_.add(value);
623      return this;
624    }
625    public PhoneMetadata clearIntlNumberFormat() {
626      intlNumberFormat_.clear();
627      return this;
628    }
629
630    // optional bool main_country_for_code = 22 [default = false];
631    private boolean hasMainCountryForCode;
632    private boolean mainCountryForCode_ = false;
633    public boolean hasMainCountryForCode() { return hasMainCountryForCode; }
634    public boolean isMainCountryForCode() { return mainCountryForCode_; }
635    // Method that lets this class have the same interface as the one generated by Protocol Buffers
636    // which is used by C++ build tools.
637    public boolean getMainCountryForCode() { return mainCountryForCode_; }
638    public PhoneMetadata setMainCountryForCode(boolean value) {
639      hasMainCountryForCode = true;
640      mainCountryForCode_ = value;
641      return this;
642    }
643
644    // optional string leading_digits = 23;
645    private boolean hasLeadingDigits;
646    private String leadingDigits_ = "";
647    public boolean hasLeadingDigits() { return hasLeadingDigits; }
648    public String getLeadingDigits() { return leadingDigits_; }
649    public PhoneMetadata setLeadingDigits(String value) {
650      hasLeadingDigits = true;
651      leadingDigits_ = value;
652      return this;
653    }
654
655    // optional bool leading_zero_possible = 26 [default = false];
656    private boolean hasLeadingZeroPossible;
657    private boolean leadingZeroPossible_ = false;
658    public boolean hasLeadingZeroPossible() { return hasLeadingZeroPossible; }
659    public boolean isLeadingZeroPossible() { return leadingZeroPossible_; }
660    public PhoneMetadata setLeadingZeroPossible(boolean value) {
661      hasLeadingZeroPossible = true;
662      leadingZeroPossible_ = value;
663      return this;
664    }
665
666    public void writeExternal(ObjectOutput objectOutput) throws IOException {
667      objectOutput.writeBoolean(hasGeneralDesc);
668      if (hasGeneralDesc) {
669        generalDesc_.writeExternal(objectOutput);
670      }
671      objectOutput.writeBoolean(hasFixedLine);
672      if (hasFixedLine) {
673        fixedLine_.writeExternal(objectOutput);
674      }
675      objectOutput.writeBoolean(hasMobile);
676      if (hasMobile) {
677        mobile_.writeExternal(objectOutput);
678      }
679      objectOutput.writeBoolean(hasTollFree);
680      if (hasTollFree) {
681        tollFree_.writeExternal(objectOutput);
682      }
683      objectOutput.writeBoolean(hasPremiumRate);
684      if (hasPremiumRate) {
685        premiumRate_.writeExternal(objectOutput);
686      }
687      objectOutput.writeBoolean(hasSharedCost);
688      if (hasSharedCost) {
689        sharedCost_.writeExternal(objectOutput);
690      }
691      objectOutput.writeBoolean(hasPersonalNumber);
692      if (hasPersonalNumber) {
693        personalNumber_.writeExternal(objectOutput);
694      }
695      objectOutput.writeBoolean(hasVoip);
696      if (hasVoip) {
697        voip_.writeExternal(objectOutput);
698      }
699      objectOutput.writeBoolean(hasPager);
700      if (hasPager) {
701        pager_.writeExternal(objectOutput);
702      }
703      objectOutput.writeBoolean(hasUan);
704      if (hasUan) {
705        uan_.writeExternal(objectOutput);
706      }
707      objectOutput.writeBoolean(hasVoicemail);
708      if (hasVoicemail) {
709        voicemail_.writeExternal(objectOutput);
710      }
711      objectOutput.writeBoolean(hasEmergency);
712      if (hasEmergency) {
713        emergency_.writeExternal(objectOutput);
714      }
715      objectOutput.writeBoolean(hasNoInternationalDialling);
716      if (hasNoInternationalDialling) {
717        noInternationalDialling_.writeExternal(objectOutput);
718      }
719
720      objectOutput.writeUTF(id_);
721      objectOutput.writeInt(countryCode_);
722      objectOutput.writeUTF(internationalPrefix_);
723
724      objectOutput.writeBoolean(hasPreferredInternationalPrefix);
725      if (hasPreferredInternationalPrefix) {
726        objectOutput.writeUTF(preferredInternationalPrefix_);
727      }
728
729      objectOutput.writeBoolean(hasNationalPrefix);
730      if (hasNationalPrefix) {
731        objectOutput.writeUTF(nationalPrefix_);
732      }
733
734      objectOutput.writeBoolean(hasPreferredExtnPrefix);
735      if (hasPreferredExtnPrefix) {
736        objectOutput.writeUTF(preferredExtnPrefix_);
737      }
738
739      objectOutput.writeBoolean(hasNationalPrefixForParsing);
740      if (hasNationalPrefixForParsing) {
741        objectOutput.writeUTF(nationalPrefixForParsing_);
742      }
743
744      objectOutput.writeBoolean(hasNationalPrefixTransformRule);
745      if (hasNationalPrefixTransformRule) {
746        objectOutput.writeUTF(nationalPrefixTransformRule_);
747      }
748
749      objectOutput.writeBoolean(sameMobileAndFixedLinePattern_);
750
751      int numberFormatSize = numberFormatSize();
752      objectOutput.writeInt(numberFormatSize);
753      for (int i = 0; i < numberFormatSize; i++) {
754        numberFormat_.get(i).writeExternal(objectOutput);
755      }
756
757      int intlNumberFormatSize = intlNumberFormatSize();
758      objectOutput.writeInt(intlNumberFormatSize);
759      for (int i = 0; i < intlNumberFormatSize; i++) {
760        intlNumberFormat_.get(i).writeExternal(objectOutput);
761      }
762
763      objectOutput.writeBoolean(mainCountryForCode_);
764
765      objectOutput.writeBoolean(hasLeadingDigits);
766      if (hasLeadingDigits) {
767        objectOutput.writeUTF(leadingDigits_);
768      }
769
770      objectOutput.writeBoolean(leadingZeroPossible_);
771    }
772
773    public void readExternal(ObjectInput objectInput) throws IOException {
774      boolean hasDesc = objectInput.readBoolean();
775      if (hasDesc) {
776        PhoneNumberDesc desc = new PhoneNumberDesc();
777        desc.readExternal(objectInput);
778        setGeneralDesc(desc);
779      }
780      hasDesc = objectInput.readBoolean();
781      if (hasDesc) {
782        PhoneNumberDesc desc = new PhoneNumberDesc();
783        desc.readExternal(objectInput);
784        setFixedLine(desc);
785      }
786      hasDesc = objectInput.readBoolean();
787      if (hasDesc) {
788        PhoneNumberDesc desc = new PhoneNumberDesc();
789        desc.readExternal(objectInput);
790        setMobile(desc);
791      }
792      hasDesc = objectInput.readBoolean();
793      if (hasDesc) {
794        PhoneNumberDesc desc = new PhoneNumberDesc();
795        desc.readExternal(objectInput);
796        setTollFree(desc);
797      }
798      hasDesc = objectInput.readBoolean();
799      if (hasDesc) {
800        PhoneNumberDesc desc = new PhoneNumberDesc();
801        desc.readExternal(objectInput);
802        setPremiumRate(desc);
803      }
804      hasDesc = objectInput.readBoolean();
805      if (hasDesc) {
806        PhoneNumberDesc desc = new PhoneNumberDesc();
807        desc.readExternal(objectInput);
808        setSharedCost(desc);
809      }
810      hasDesc = objectInput.readBoolean();
811      if (hasDesc) {
812        PhoneNumberDesc desc = new PhoneNumberDesc();
813        desc.readExternal(objectInput);
814        setPersonalNumber(desc);
815      }
816      hasDesc = objectInput.readBoolean();
817      if (hasDesc) {
818        PhoneNumberDesc desc = new PhoneNumberDesc();
819        desc.readExternal(objectInput);
820        setVoip(desc);
821      }
822      hasDesc = objectInput.readBoolean();
823      if (hasDesc) {
824        PhoneNumberDesc desc = new PhoneNumberDesc();
825        desc.readExternal(objectInput);
826        setPager(desc);
827      }
828      hasDesc = objectInput.readBoolean();
829      if (hasDesc) {
830        PhoneNumberDesc desc = new PhoneNumberDesc();
831        desc.readExternal(objectInput);
832        setUan(desc);
833      }
834      hasDesc = objectInput.readBoolean();
835      if (hasDesc) {
836        PhoneNumberDesc desc = new PhoneNumberDesc();
837        desc.readExternal(objectInput);
838        setVoicemail(desc);
839      }
840      hasDesc = objectInput.readBoolean();
841      if (hasDesc) {
842        PhoneNumberDesc desc = new PhoneNumberDesc();
843        desc.readExternal(objectInput);
844        setEmergency(desc);
845      }
846      hasDesc = objectInput.readBoolean();
847      if (hasDesc) {
848        PhoneNumberDesc desc = new PhoneNumberDesc();
849        desc.readExternal(objectInput);
850        setNoInternationalDialling(desc);
851      }
852
853      setId(objectInput.readUTF());
854      setCountryCode(objectInput.readInt());
855      setInternationalPrefix(objectInput.readUTF());
856
857      boolean hasString = objectInput.readBoolean();
858      if (hasString) {
859        setPreferredInternationalPrefix(objectInput.readUTF());
860      }
861
862      hasString = objectInput.readBoolean();
863      if (hasString) {
864        setNationalPrefix(objectInput.readUTF());
865      }
866
867      hasString = objectInput.readBoolean();
868      if (hasString) {
869        setPreferredExtnPrefix(objectInput.readUTF());
870      }
871
872      hasString = objectInput.readBoolean();
873      if (hasString) {
874        setNationalPrefixForParsing(objectInput.readUTF());
875      }
876
877      hasString = objectInput.readBoolean();
878      if (hasString) {
879        setNationalPrefixTransformRule(objectInput.readUTF());
880      }
881
882      setSameMobileAndFixedLinePattern(objectInput.readBoolean());
883
884      int nationalFormatSize = objectInput.readInt();
885      for (int i = 0; i < nationalFormatSize; i++) {
886        NumberFormat numFormat = new NumberFormat();
887        numFormat.readExternal(objectInput);
888        numberFormat_.add(numFormat);
889      }
890
891      int intlNumberFormatSize = objectInput.readInt();
892      for (int i = 0; i < intlNumberFormatSize; i++) {
893        NumberFormat numFormat = new NumberFormat();
894        numFormat.readExternal(objectInput);
895        intlNumberFormat_.add(numFormat);
896      }
897
898      setMainCountryForCode(objectInput.readBoolean());
899
900      hasString = objectInput.readBoolean();
901      if (hasString) {
902        setLeadingDigits(objectInput.readUTF());
903      }
904
905      setLeadingZeroPossible(objectInput.readBoolean());
906    }
907  }
908
909  public static class PhoneMetadataCollection implements Externalizable {
910    private static final long serialVersionUID = 1;
911    public PhoneMetadataCollection() {}
912
913    /**
914     * Provides a dummy builder.
915     *
916     * @see NumberFormat.Builder
917     */
918    public static final class Builder extends PhoneMetadataCollection {
919      public PhoneMetadataCollection build() {
920        return this;
921      }
922    }
923    public static Builder newBuilder() {
924      return new Builder();
925    }
926
927    // repeated PhoneMetadata metadata = 1;
928    private java.util.List<PhoneMetadata> metadata_ = new java.util.ArrayList<PhoneMetadata>();
929
930    public java.util.List<PhoneMetadata> getMetadataList() {
931      return metadata_;
932    }
933    public int getMetadataCount() { return metadata_.size(); }
934
935    public PhoneMetadataCollection addMetadata(PhoneMetadata value) {
936      if (value == null) {
937        throw new NullPointerException();
938      }
939      metadata_.add(value);
940      return this;
941    }
942
943    public void writeExternal(ObjectOutput objectOutput) throws IOException {
944      int size = getMetadataCount();
945      objectOutput.writeInt(size);
946      for (int i = 0; i < size; i++) {
947        metadata_.get(i).writeExternal(objectOutput);
948      }
949    }
950
951    public void readExternal(ObjectInput objectInput) throws IOException {
952      int size = objectInput.readInt();
953      for (int i = 0; i < size; i++) {
954        PhoneMetadata metadata = new PhoneMetadata();
955        metadata.readExternal(objectInput);
956        metadata_.add(metadata);
957      }
958    }
959
960    public PhoneMetadataCollection clear() {
961      metadata_.clear();
962      return this;
963    }
964  }
965}
966