Home | History | Annotate | Download | only in ulp_components
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      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 package android.location.cts.asn1.supl2.ulp_components;
     18 
     19 /*
     20  */
     21 
     22 
     23 //
     24 //
     25 import android.location.cts.asn1.base.Asn1BitString;
     26 import android.location.cts.asn1.base.Asn1Choice;
     27 import android.location.cts.asn1.base.Asn1IA5String;
     28 import android.location.cts.asn1.base.Asn1Null;
     29 import android.location.cts.asn1.base.Asn1Object;
     30 import android.location.cts.asn1.base.Asn1OctetString;
     31 import android.location.cts.asn1.base.Asn1Tag;
     32 import android.location.cts.asn1.base.BitStream;
     33 import android.location.cts.asn1.base.BitStreamReader;
     34 import android.location.cts.asn1.base.ChoiceComponent;
     35 import com.google.common.collect.ImmutableList;
     36 import java.nio.ByteBuffer;
     37 import java.util.Collection;
     38 import java.util.HashMap;
     39 import java.util.Map;
     40 import javax.annotation.Nullable;
     41 
     42 
     43 /**
     44  */
     45 public  class SETId extends Asn1Choice {
     46   //
     47 
     48   private static final Asn1Tag TAG_SETId
     49       = Asn1Tag.fromClassAndNumber(-1, -1);
     50 
     51   private static final Map<Asn1Tag, Select> tagToSelection = new HashMap<>();
     52 
     53   private boolean extension;
     54   private ChoiceComponent selection;
     55   private Asn1Object element;
     56 
     57   static {
     58     for (Select select : Select.values()) {
     59       for (Asn1Tag tag : select.getPossibleFirstTags()) {
     60         Select select0;
     61         if ((select0 = tagToSelection.put(tag, select)) != null) {
     62           throw new IllegalStateException(
     63             "SETId: " + tag + " maps to both " + select0 + " and " + select);
     64         }
     65       }
     66     }
     67   }
     68 
     69   public SETId() {
     70     super();
     71   }
     72 
     73   @Override
     74   @Nullable
     75   protected Asn1Tag getTag() {
     76     return TAG_SETId;
     77   }
     78 
     79   @Override
     80   protected boolean isTagImplicit() {
     81     return true;
     82   }
     83 
     84   public static Collection<Asn1Tag> getPossibleFirstTags() {
     85     if (TAG_SETId != null) {
     86       return ImmutableList.of(TAG_SETId);
     87     } else {
     88       return tagToSelection.keySet();
     89     }
     90   }
     91 
     92   /**
     93    * Creates a new SETId from encoded stream.
     94    */
     95   public static SETId fromPerUnaligned(byte[] encodedBytes) {
     96     SETId result = new SETId();
     97     result.decodePerUnaligned(new BitStreamReader(encodedBytes));
     98     return result;
     99   }
    100 
    101   /**
    102    * Creates a new SETId from encoded stream.
    103    */
    104   public static SETId fromPerAligned(byte[] encodedBytes) {
    105     SETId result = new SETId();
    106     result.decodePerAligned(new BitStreamReader(encodedBytes));
    107     return result;
    108   }
    109 
    110 
    111 
    112   @Override protected boolean hasExtensionValue() {
    113     return extension;
    114   }
    115 
    116   @Override protected Integer getSelectionOrdinal() {
    117     return selection.ordinal();
    118   }
    119 
    120   @Nullable
    121   @Override
    122   protected ChoiceComponent getSelectedComponent() {
    123     return selection;
    124   }
    125 
    126   @Override protected int getOptionCount() {
    127     if (hasExtensionValue()) {
    128       return Extend.values().length;
    129     }
    130     return Select.values().length;
    131   }
    132 
    133   protected Asn1Object createAndSetValue(boolean isExtensionValue,
    134                                          int ordinal) {
    135     extension = isExtensionValue;
    136     if (isExtensionValue) {
    137       selection = Extend.values()[ordinal];
    138     } else {
    139       selection = Select.values()[ordinal];
    140     }
    141     element = selection.createElement();
    142     return element;
    143   }
    144 
    145   @Override protected ChoiceComponent createAndSetValue(Asn1Tag tag) {
    146     Select select = tagToSelection.get(tag);
    147     if (select == null) {
    148       throw new IllegalArgumentException("Unknown selection tag: " + tag);
    149     }
    150     element = select.createElement();
    151     selection = select;
    152     extension = false;
    153     return select;
    154   }
    155 
    156   @Override protected boolean isExtensible() {
    157     return true;
    158   }
    159 
    160   @Override protected Asn1Object getValue() {
    161     return element;
    162   }
    163 
    164 
    165   private static enum Select implements ChoiceComponent {
    166 
    167     $Msisdn(Asn1Tag.fromClassAndNumber(2, 0),
    168         true) {
    169       @Override
    170       public Asn1Object createElement() {
    171         return new SETId.msisdnType();
    172       }
    173 
    174       @Override
    175       Collection<Asn1Tag> getPossibleFirstTags() {
    176         return tag == null ? SETId.msisdnType.getPossibleFirstTags() : ImmutableList.of(tag);
    177       }
    178 
    179       @Override
    180       String elementIndentedString(Asn1Object element, String indent) {
    181         return toString() + " : " + element.toIndentedString(indent);
    182       }
    183     },
    184 
    185     $Mdn(Asn1Tag.fromClassAndNumber(2, 1),
    186         true) {
    187       @Override
    188       public Asn1Object createElement() {
    189         return new SETId.mdnType();
    190       }
    191 
    192       @Override
    193       Collection<Asn1Tag> getPossibleFirstTags() {
    194         return tag == null ? SETId.mdnType.getPossibleFirstTags() : ImmutableList.of(tag);
    195       }
    196 
    197       @Override
    198       String elementIndentedString(Asn1Object element, String indent) {
    199         return toString() + " : " + element.toIndentedString(indent);
    200       }
    201     },
    202 
    203     $Min(Asn1Tag.fromClassAndNumber(2, 2),
    204         true) {
    205       @Override
    206       public Asn1Object createElement() {
    207         return new SETId.minType();
    208       }
    209 
    210       @Override
    211       Collection<Asn1Tag> getPossibleFirstTags() {
    212         return tag == null ? SETId.minType.getPossibleFirstTags() : ImmutableList.of(tag);
    213       }
    214 
    215       @Override
    216       String elementIndentedString(Asn1Object element, String indent) {
    217         return toString() + " : " + element.toIndentedString(indent);
    218       }
    219     },
    220 
    221     $Imsi(Asn1Tag.fromClassAndNumber(2, 3),
    222         true) {
    223       @Override
    224       public Asn1Object createElement() {
    225         return new SETId.imsiType();
    226       }
    227 
    228       @Override
    229       Collection<Asn1Tag> getPossibleFirstTags() {
    230         return tag == null ? SETId.imsiType.getPossibleFirstTags() : ImmutableList.of(tag);
    231       }
    232 
    233       @Override
    234       String elementIndentedString(Asn1Object element, String indent) {
    235         return toString() + " : " + element.toIndentedString(indent);
    236       }
    237     },
    238 
    239     $Nai(Asn1Tag.fromClassAndNumber(2, 4),
    240         true) {
    241       @Override
    242       public Asn1Object createElement() {
    243         return new SETId.naiType();
    244       }
    245 
    246       @Override
    247       Collection<Asn1Tag> getPossibleFirstTags() {
    248         return tag == null ? SETId.naiType.getPossibleFirstTags() : ImmutableList.of(tag);
    249       }
    250 
    251       @Override
    252       String elementIndentedString(Asn1Object element, String indent) {
    253         return toString() + " : " + element.toIndentedString(indent);
    254       }
    255     },
    256 
    257     $IPAddress(Asn1Tag.fromClassAndNumber(2, 5),
    258         true) {
    259       @Override
    260       public Asn1Object createElement() {
    261         return new IPAddress();
    262       }
    263 
    264       @Override
    265       Collection<Asn1Tag> getPossibleFirstTags() {
    266         return tag == null ? IPAddress.getPossibleFirstTags() : ImmutableList.of(tag);
    267       }
    268 
    269       @Override
    270       String elementIndentedString(Asn1Object element, String indent) {
    271         return toString() + " : " + element.toIndentedString(indent);
    272       }
    273     },
    274 
    275     ;
    276 
    277     @Nullable final Asn1Tag tag;
    278     final boolean isImplicitTagging;
    279 
    280     Select(@Nullable Asn1Tag tag, boolean isImplicitTagging) {
    281       this.tag = tag;
    282       this.isImplicitTagging = isImplicitTagging;
    283     }
    284 
    285     @Override
    286     public Asn1Object createElement() {
    287       throw new IllegalStateException("Select template error");
    288     }
    289 
    290     @Override
    291     @Nullable
    292     public Asn1Tag getTag() {
    293       return tag;
    294     }
    295 
    296     @Override
    297     public boolean isImplicitTagging() {
    298       return isImplicitTagging;
    299     }
    300 
    301     abstract Collection<Asn1Tag> getPossibleFirstTags();
    302 
    303     abstract String elementIndentedString(Asn1Object element, String indent);
    304   }
    305 
    306 /*
    307  */
    308 
    309 
    310 //
    311 
    312 /**
    313  */
    314 public static class msisdnType extends Asn1OctetString {
    315   //
    316 
    317   private static final Asn1Tag TAG_msisdnType
    318       = Asn1Tag.fromClassAndNumber(-1, -1);
    319 
    320   public msisdnType() {
    321     super();
    322     setMinSize(8);
    323 setMaxSize(8);
    324 
    325   }
    326 
    327   @Override
    328   @Nullable
    329   protected Asn1Tag getTag() {
    330     return TAG_msisdnType;
    331   }
    332 
    333   @Override
    334   protected boolean isTagImplicit() {
    335     return true;
    336   }
    337 
    338   public static Collection<Asn1Tag> getPossibleFirstTags() {
    339     if (TAG_msisdnType != null) {
    340       return ImmutableList.of(TAG_msisdnType);
    341     } else {
    342       return Asn1OctetString.getPossibleFirstTags();
    343     }
    344   }
    345 
    346   /**
    347    * Creates a new msisdnType from encoded stream.
    348    */
    349   public static msisdnType fromPerUnaligned(byte[] encodedBytes) {
    350     msisdnType result = new msisdnType();
    351     result.decodePerUnaligned(new BitStreamReader(encodedBytes));
    352     return result;
    353   }
    354 
    355   /**
    356    * Creates a new msisdnType from encoded stream.
    357    */
    358   public static msisdnType fromPerAligned(byte[] encodedBytes) {
    359     msisdnType result = new msisdnType();
    360     result.decodePerAligned(new BitStreamReader(encodedBytes));
    361     return result;
    362   }
    363 
    364   @Override public Iterable<BitStream> encodePerUnaligned() {
    365     return super.encodePerUnaligned();
    366   }
    367 
    368   @Override public Iterable<BitStream> encodePerAligned() {
    369     return super.encodePerAligned();
    370   }
    371 
    372   @Override public void decodePerUnaligned(BitStreamReader reader) {
    373     super.decodePerUnaligned(reader);
    374   }
    375 
    376   @Override public void decodePerAligned(BitStreamReader reader) {
    377     super.decodePerAligned(reader);
    378   }
    379 
    380   @Override protected String getTypeName() {
    381     return "msisdnType";
    382   }
    383 }
    384 
    385 
    386   public boolean isMsisdn() {
    387     return !hasExtensionValue() && Select.$Msisdn == selection;
    388   }
    389 
    390   /**
    391    * @throws {@code IllegalStateException} if {@code !isMsisdn}.
    392    */
    393   @SuppressWarnings("unchecked")
    394   public SETId.msisdnType getMsisdn() {
    395     if (!isMsisdn()) {
    396       throw new IllegalStateException("SETId value not a Msisdn");
    397     }
    398     return (SETId.msisdnType) element;
    399   }
    400 
    401   public void setMsisdn(SETId.msisdnType selected) {
    402     selection = Select.$Msisdn;
    403     extension = false;
    404     element = selected;
    405   }
    406 
    407   public SETId.msisdnType setMsisdnToNewInstance() {
    408       SETId.msisdnType element = new SETId.msisdnType();
    409       setMsisdn(element);
    410       return element;
    411   }
    412 
    413 /*
    414  */
    415 
    416 
    417 //
    418 
    419 /**
    420  */
    421 public static class mdnType extends Asn1OctetString {
    422   //
    423 
    424   private static final Asn1Tag TAG_mdnType
    425       = Asn1Tag.fromClassAndNumber(-1, -1);
    426 
    427   public mdnType() {
    428     super();
    429     setMinSize(8);
    430 setMaxSize(8);
    431 
    432   }
    433 
    434   @Override
    435   @Nullable
    436   protected Asn1Tag getTag() {
    437     return TAG_mdnType;
    438   }
    439 
    440   @Override
    441   protected boolean isTagImplicit() {
    442     return true;
    443   }
    444 
    445   public static Collection<Asn1Tag> getPossibleFirstTags() {
    446     if (TAG_mdnType != null) {
    447       return ImmutableList.of(TAG_mdnType);
    448     } else {
    449       return Asn1OctetString.getPossibleFirstTags();
    450     }
    451   }
    452 
    453   /**
    454    * Creates a new mdnType from encoded stream.
    455    */
    456   public static mdnType fromPerUnaligned(byte[] encodedBytes) {
    457     mdnType result = new mdnType();
    458     result.decodePerUnaligned(new BitStreamReader(encodedBytes));
    459     return result;
    460   }
    461 
    462   /**
    463    * Creates a new mdnType from encoded stream.
    464    */
    465   public static mdnType fromPerAligned(byte[] encodedBytes) {
    466     mdnType result = new mdnType();
    467     result.decodePerAligned(new BitStreamReader(encodedBytes));
    468     return result;
    469   }
    470 
    471   @Override public Iterable<BitStream> encodePerUnaligned() {
    472     return super.encodePerUnaligned();
    473   }
    474 
    475   @Override public Iterable<BitStream> encodePerAligned() {
    476     return super.encodePerAligned();
    477   }
    478 
    479   @Override public void decodePerUnaligned(BitStreamReader reader) {
    480     super.decodePerUnaligned(reader);
    481   }
    482 
    483   @Override public void decodePerAligned(BitStreamReader reader) {
    484     super.decodePerAligned(reader);
    485   }
    486 
    487   @Override protected String getTypeName() {
    488     return "mdnType";
    489   }
    490 }
    491 
    492 
    493   public boolean isMdn() {
    494     return !hasExtensionValue() && Select.$Mdn == selection;
    495   }
    496 
    497   /**
    498    * @throws {@code IllegalStateException} if {@code !isMdn}.
    499    */
    500   @SuppressWarnings("unchecked")
    501   public SETId.mdnType getMdn() {
    502     if (!isMdn()) {
    503       throw new IllegalStateException("SETId value not a Mdn");
    504     }
    505     return (SETId.mdnType) element;
    506   }
    507 
    508   public void setMdn(SETId.mdnType selected) {
    509     selection = Select.$Mdn;
    510     extension = false;
    511     element = selected;
    512   }
    513 
    514   public SETId.mdnType setMdnToNewInstance() {
    515       SETId.mdnType element = new SETId.mdnType();
    516       setMdn(element);
    517       return element;
    518   }
    519 
    520 /*
    521  */
    522 
    523 
    524 //
    525 
    526 /**
    527  */
    528 public static class minType extends Asn1BitString {
    529   //
    530 
    531   private static final Asn1Tag TAG_minType
    532       = Asn1Tag.fromClassAndNumber(-1, -1);
    533 
    534   public minType() {
    535     super();
    536     setMinSize(34);
    537 setMaxSize(34);
    538 
    539   }
    540 
    541   @Override
    542   @Nullable
    543   protected Asn1Tag getTag() {
    544     return TAG_minType;
    545   }
    546 
    547   @Override
    548   protected boolean isTagImplicit() {
    549     return true;
    550   }
    551 
    552   public static Collection<Asn1Tag> getPossibleFirstTags() {
    553     if (TAG_minType != null) {
    554       return ImmutableList.of(TAG_minType);
    555     } else {
    556       return Asn1BitString.getPossibleFirstTags();
    557     }
    558   }
    559 
    560   /**
    561    * Creates a new minType from encoded stream.
    562    */
    563   public static minType fromPerUnaligned(byte[] encodedBytes) {
    564     minType result = new minType();
    565     result.decodePerUnaligned(new BitStreamReader(encodedBytes));
    566     return result;
    567   }
    568 
    569   /**
    570    * Creates a new minType from encoded stream.
    571    */
    572   public static minType fromPerAligned(byte[] encodedBytes) {
    573     minType result = new minType();
    574     result.decodePerAligned(new BitStreamReader(encodedBytes));
    575     return result;
    576   }
    577 
    578   @Override public Iterable<BitStream> encodePerUnaligned() {
    579     return super.encodePerUnaligned();
    580   }
    581 
    582   @Override public Iterable<BitStream> encodePerAligned() {
    583     return super.encodePerAligned();
    584   }
    585 
    586   @Override public void decodePerUnaligned(BitStreamReader reader) {
    587     super.decodePerUnaligned(reader);
    588   }
    589 
    590   @Override public void decodePerAligned(BitStreamReader reader) {
    591     super.decodePerAligned(reader);
    592   }
    593 
    594   @Override public String toString() {
    595     return toIndentedString("");
    596   }
    597 
    598   public String toIndentedString(String indent) {
    599     return "minType = " + getValue() + ";\n";
    600   }
    601 }
    602 
    603 
    604   public boolean isMin() {
    605     return !hasExtensionValue() && Select.$Min == selection;
    606   }
    607 
    608   /**
    609    * @throws {@code IllegalStateException} if {@code !isMin}.
    610    */
    611   @SuppressWarnings("unchecked")
    612   public SETId.minType getMin() {
    613     if (!isMin()) {
    614       throw new IllegalStateException("SETId value not a Min");
    615     }
    616     return (SETId.minType) element;
    617   }
    618 
    619   public void setMin(SETId.minType selected) {
    620     selection = Select.$Min;
    621     extension = false;
    622     element = selected;
    623   }
    624 
    625   public SETId.minType setMinToNewInstance() {
    626       SETId.minType element = new SETId.minType();
    627       setMin(element);
    628       return element;
    629   }
    630 
    631 /*
    632  */
    633 
    634 
    635 //
    636 
    637 /**
    638  */
    639 public static class imsiType extends Asn1OctetString {
    640   //
    641 
    642   private static final Asn1Tag TAG_imsiType
    643       = Asn1Tag.fromClassAndNumber(-1, -1);
    644 
    645   public imsiType() {
    646     super();
    647     setMinSize(8);
    648 setMaxSize(8);
    649 
    650   }
    651 
    652   @Override
    653   @Nullable
    654   protected Asn1Tag getTag() {
    655     return TAG_imsiType;
    656   }
    657 
    658   @Override
    659   protected boolean isTagImplicit() {
    660     return true;
    661   }
    662 
    663   public static Collection<Asn1Tag> getPossibleFirstTags() {
    664     if (TAG_imsiType != null) {
    665       return ImmutableList.of(TAG_imsiType);
    666     } else {
    667       return Asn1OctetString.getPossibleFirstTags();
    668     }
    669   }
    670 
    671   /**
    672    * Creates a new imsiType from encoded stream.
    673    */
    674   public static imsiType fromPerUnaligned(byte[] encodedBytes) {
    675     imsiType result = new imsiType();
    676     result.decodePerUnaligned(new BitStreamReader(encodedBytes));
    677     return result;
    678   }
    679 
    680   /**
    681    * Creates a new imsiType from encoded stream.
    682    */
    683   public static imsiType fromPerAligned(byte[] encodedBytes) {
    684     imsiType result = new imsiType();
    685     result.decodePerAligned(new BitStreamReader(encodedBytes));
    686     return result;
    687   }
    688 
    689   @Override public Iterable<BitStream> encodePerUnaligned() {
    690     return super.encodePerUnaligned();
    691   }
    692 
    693   @Override public Iterable<BitStream> encodePerAligned() {
    694     return super.encodePerAligned();
    695   }
    696 
    697   @Override public void decodePerUnaligned(BitStreamReader reader) {
    698     super.decodePerUnaligned(reader);
    699   }
    700 
    701   @Override public void decodePerAligned(BitStreamReader reader) {
    702     super.decodePerAligned(reader);
    703   }
    704 
    705   @Override protected String getTypeName() {
    706     return "imsiType";
    707   }
    708 }
    709 
    710 
    711   public boolean isImsi() {
    712     return !hasExtensionValue() && Select.$Imsi == selection;
    713   }
    714 
    715   /**
    716    * @throws {@code IllegalStateException} if {@code !isImsi}.
    717    */
    718   @SuppressWarnings("unchecked")
    719   public SETId.imsiType getImsi() {
    720     if (!isImsi()) {
    721       throw new IllegalStateException("SETId value not a Imsi");
    722     }
    723     return (SETId.imsiType) element;
    724   }
    725 
    726   public void setImsi(SETId.imsiType selected) {
    727     selection = Select.$Imsi;
    728     extension = false;
    729     element = selected;
    730   }
    731 
    732   public SETId.imsiType setImsiToNewInstance() {
    733       SETId.imsiType element = new SETId.imsiType();
    734       setImsi(element);
    735       return element;
    736   }
    737 
    738 /*
    739  */
    740 
    741 
    742 //
    743 
    744 /**
    745  */
    746 public static class naiType extends Asn1IA5String {
    747   //
    748 
    749   private static final Asn1Tag TAG_naiType
    750       = Asn1Tag.fromClassAndNumber(-1, -1);
    751 
    752   public naiType() {
    753     super();
    754     setMinSize(1);
    755 setMaxSize(1000);
    756 
    757 
    758   }
    759 
    760   @Override
    761   @Nullable
    762   protected Asn1Tag getTag() {
    763     return TAG_naiType;
    764   }
    765 
    766   @Override
    767   protected boolean isTagImplicit() {
    768     return true;
    769   }
    770 
    771   public static Collection<Asn1Tag> getPossibleFirstTags() {
    772     if (TAG_naiType != null) {
    773       return ImmutableList.of(TAG_naiType);
    774     } else {
    775       return Asn1IA5String.getPossibleFirstTags();
    776     }
    777   }
    778 
    779   /**
    780    * Creates a new naiType from encoded stream.
    781    */
    782   public static naiType fromPerUnaligned(byte[] encodedBytes) {
    783     naiType result = new naiType();
    784     result.decodePerUnaligned(new BitStreamReader(encodedBytes));
    785     return result;
    786   }
    787 
    788   /**
    789    * Creates a new naiType from encoded stream.
    790    */
    791   public static naiType fromPerAligned(byte[] encodedBytes) {
    792     naiType result = new naiType();
    793     result.decodePerAligned(new BitStreamReader(encodedBytes));
    794     return result;
    795   }
    796 
    797   @Override public Iterable<BitStream> encodePerUnaligned() {
    798     return super.encodePerUnaligned();
    799   }
    800 
    801   @Override public Iterable<BitStream> encodePerAligned() {
    802     return super.encodePerAligned();
    803   }
    804 
    805   @Override public void decodePerUnaligned(BitStreamReader reader) {
    806     super.decodePerUnaligned(reader);
    807   }
    808 
    809   @Override public void decodePerAligned(BitStreamReader reader) {
    810     super.decodePerAligned(reader);
    811   }
    812 
    813   @Override public String toString() {
    814     return toIndentedString("");
    815   }
    816 
    817   public String toIndentedString(String indent) {
    818     return "naiType = " + getValue() + ";\n";
    819   }
    820 }
    821 
    822 
    823   public boolean isNai() {
    824     return !hasExtensionValue() && Select.$Nai == selection;
    825   }
    826 
    827   /**
    828    * @throws {@code IllegalStateException} if {@code !isNai}.
    829    */
    830   @SuppressWarnings("unchecked")
    831   public SETId.naiType getNai() {
    832     if (!isNai()) {
    833       throw new IllegalStateException("SETId value not a Nai");
    834     }
    835     return (SETId.naiType) element;
    836   }
    837 
    838   public void setNai(SETId.naiType selected) {
    839     selection = Select.$Nai;
    840     extension = false;
    841     element = selected;
    842   }
    843 
    844   public SETId.naiType setNaiToNewInstance() {
    845       SETId.naiType element = new SETId.naiType();
    846       setNai(element);
    847       return element;
    848   }
    849 
    850 
    851 
    852   public boolean isIPAddress() {
    853     return !hasExtensionValue() && Select.$IPAddress == selection;
    854   }
    855 
    856   /**
    857    * @throws {@code IllegalStateException} if {@code !isIPAddress}.
    858    */
    859   @SuppressWarnings("unchecked")
    860   public IPAddress getIPAddress() {
    861     if (!isIPAddress()) {
    862       throw new IllegalStateException("SETId value not a IPAddress");
    863     }
    864     return (IPAddress) element;
    865   }
    866 
    867   public void setIPAddress(IPAddress selected) {
    868     selection = Select.$IPAddress;
    869     extension = false;
    870     element = selected;
    871   }
    872 
    873   public IPAddress setIPAddressToNewInstance() {
    874       IPAddress element = new IPAddress();
    875       setIPAddress(element);
    876       return element;
    877   }
    878 
    879 
    880   private static enum Extend implements ChoiceComponent {
    881 
    882     ;
    883     @Nullable private final Asn1Tag tag;
    884     private final boolean isImplicitTagging;
    885 
    886     Extend(@Nullable Asn1Tag tag, boolean isImplicitTagging) {
    887       this.tag = tag;
    888       this.isImplicitTagging = isImplicitTagging;
    889     }
    890 
    891     public Asn1Object createElement() {
    892       throw new IllegalStateException("Extend template error");
    893     }
    894 
    895     @Override
    896     @Nullable
    897     public Asn1Tag getTag() {
    898       return tag;
    899     }
    900 
    901     @Override
    902     public boolean isImplicitTagging() {
    903       return isImplicitTagging;
    904     }
    905 
    906     String elementIndentedString(Asn1Object element, String indent) {
    907       throw new IllegalStateException("Extend template error");
    908     }
    909   }
    910 
    911 
    912   @Override public Iterable<BitStream> encodePerUnaligned() {
    913     return super.encodePerUnaligned();
    914   }
    915 
    916   @Override public Iterable<BitStream> encodePerAligned() {
    917     return super.encodePerAligned();
    918   }
    919 
    920   @Override public void decodePerUnaligned(BitStreamReader reader) {
    921     super.decodePerUnaligned(reader);
    922   }
    923 
    924   @Override public void decodePerAligned(BitStreamReader reader) {
    925     super.decodePerAligned(reader);
    926   }
    927 
    928   @Override public String toString() {
    929     return toIndentedString("");
    930   }
    931 
    932   private String elementIndentedString(String indent) {
    933     if (element == null) {
    934       return "null;\n";
    935     }
    936     if (extension) {
    937       return Extend.values()[selection.ordinal()]
    938           .elementIndentedString(element, indent + "  ");
    939     } else {
    940       return Select.values()[selection.ordinal()]
    941           .elementIndentedString(element, indent + "  ");
    942     }
    943   }
    944 
    945   public String toIndentedString(String indent) {
    946     return "SETId = " + elementIndentedString(indent) + indent + ";\n";
    947   }
    948 }
    949