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