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_version_2_parameter_extensions; 18 19 /* 20 */ 21 22 23 // 24 // 25 import android.location.cts.asn1.base.Asn1Null; 26 import android.location.cts.asn1.base.Asn1Object; 27 import android.location.cts.asn1.base.Asn1Sequence; 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.SequenceComponent; 32 import com.google.common.collect.ImmutableList; 33 import java.util.Collection; 34 import javax.annotation.Nullable; 35 36 37 /** 38 */ 39 public class Ver2_SETCapabilities_extension extends Asn1Sequence { 40 // 41 42 private static final Asn1Tag TAG_Ver2_SETCapabilities_extension 43 = Asn1Tag.fromClassAndNumber(-1, -1); 44 Ver2_SETCapabilities_extension()45 public Ver2_SETCapabilities_extension() { 46 super(); 47 } 48 49 @Override 50 @Nullable getTag()51 protected Asn1Tag getTag() { 52 return TAG_Ver2_SETCapabilities_extension; 53 } 54 55 @Override isTagImplicit()56 protected boolean isTagImplicit() { 57 return true; 58 } 59 getPossibleFirstTags()60 public static Collection<Asn1Tag> getPossibleFirstTags() { 61 if (TAG_Ver2_SETCapabilities_extension != null) { 62 return ImmutableList.of(TAG_Ver2_SETCapabilities_extension); 63 } else { 64 return Asn1Sequence.getPossibleFirstTags(); 65 } 66 } 67 68 /** 69 * Creates a new Ver2_SETCapabilities_extension from encoded stream. 70 */ fromPerUnaligned(byte[] encodedBytes)71 public static Ver2_SETCapabilities_extension fromPerUnaligned(byte[] encodedBytes) { 72 Ver2_SETCapabilities_extension result = new Ver2_SETCapabilities_extension(); 73 result.decodePerUnaligned(new BitStreamReader(encodedBytes)); 74 return result; 75 } 76 77 /** 78 * Creates a new Ver2_SETCapabilities_extension from encoded stream. 79 */ fromPerAligned(byte[] encodedBytes)80 public static Ver2_SETCapabilities_extension fromPerAligned(byte[] encodedBytes) { 81 Ver2_SETCapabilities_extension result = new Ver2_SETCapabilities_extension(); 82 result.decodePerAligned(new BitStreamReader(encodedBytes)); 83 return result; 84 } 85 86 87 isExtensible()88 @Override protected boolean isExtensible() { 89 return true; 90 } 91 containsExtensionValues()92 @Override public boolean containsExtensionValues() { 93 for (SequenceComponent extensionComponent : getExtensionComponents()) { 94 if (extensionComponent.isExplicitlySet()) return true; 95 } 96 return false; 97 } 98 99 100 private ServiceCapabilities serviceCapabilities_; getServiceCapabilities()101 public ServiceCapabilities getServiceCapabilities() { 102 return serviceCapabilities_; 103 } 104 /** 105 * @throws ClassCastException if value is not a ServiceCapabilities 106 */ setServiceCapabilities(Asn1Object value)107 public void setServiceCapabilities(Asn1Object value) { 108 this.serviceCapabilities_ = (ServiceCapabilities) value; 109 } setServiceCapabilitiesToNewInstance()110 public ServiceCapabilities setServiceCapabilitiesToNewInstance() { 111 serviceCapabilities_ = new ServiceCapabilities(); 112 return serviceCapabilities_; 113 } 114 115 116 117 private SupportedBearers extensionSupportedBearers; getExtensionSupportedBearers()118 public SupportedBearers getExtensionSupportedBearers() { 119 return extensionSupportedBearers; 120 } 121 /** 122 * @throws ClassCastException if value is not a SupportedBearers 123 */ setExtensionSupportedBearers(Asn1Object value)124 public void setExtensionSupportedBearers(Asn1Object value) { 125 extensionSupportedBearers = (SupportedBearers) value; 126 } setExtensionSupportedBearersToNewInstance()127 public void setExtensionSupportedBearersToNewInstance() { 128 extensionSupportedBearers = new SupportedBearers(); 129 } 130 131 132 133 getComponents()134 @Override public Iterable<? extends SequenceComponent> getComponents() { 135 ImmutableList.Builder<SequenceComponent> builder = ImmutableList.builder(); 136 137 builder.add(new SequenceComponent() { 138 Asn1Tag tag = Asn1Tag.fromClassAndNumber(2, 0); 139 140 @Override public boolean isExplicitlySet() { 141 return getServiceCapabilities() != null; 142 } 143 144 @Override public boolean hasDefaultValue() { 145 return false; 146 } 147 148 @Override public boolean isOptional() { 149 return true; 150 } 151 152 @Override public Asn1Object getComponentValue() { 153 return getServiceCapabilities(); 154 } 155 156 @Override public void setToNewInstance() { 157 setServiceCapabilitiesToNewInstance(); 158 } 159 160 @Override public Collection<Asn1Tag> getPossibleFirstTags() { 161 return tag == null ? ServiceCapabilities.getPossibleFirstTags() : ImmutableList.of(tag); 162 } 163 164 @Override 165 public Asn1Tag getTag() { 166 return tag; 167 } 168 169 @Override 170 public boolean isImplicitTagging() { 171 return true; 172 } 173 174 @Override public String toIndentedString(String indent) { 175 return "serviceCapabilities : " 176 + getServiceCapabilities().toIndentedString(indent); 177 } 178 }); 179 180 return builder.build(); 181 } 182 183 @Override public Iterable<? extends SequenceComponent> getExtensionComponents()184 getExtensionComponents() { 185 ImmutableList.Builder<SequenceComponent> builder = ImmutableList.builder(); 186 187 builder.add(new SequenceComponent() { 188 @Override public boolean isExplicitlySet() { 189 return getExtensionSupportedBearers() != null; 190 } 191 192 @Override public boolean hasDefaultValue() { 193 return false; 194 } 195 196 @Override public boolean isOptional() { 197 return true; 198 } 199 200 @Override public Asn1Object getComponentValue() { 201 return getExtensionSupportedBearers(); 202 } 203 204 @Override public void setToNewInstance() { 205 setExtensionSupportedBearersToNewInstance(); 206 } 207 208 @Override public Collection<Asn1Tag> getPossibleFirstTags() { 209 throw new UnsupportedOperationException( 210 "BER decoding not supported for extension elements"); 211 } 212 213 @Override 214 public Asn1Tag getTag() { 215 throw new UnsupportedOperationException( 216 "BER is not supported for extension elements"); 217 } 218 219 @Override 220 public boolean isImplicitTagging() { 221 throw new UnsupportedOperationException( 222 "BER is not supported for extension elements"); 223 } 224 225 @Override public String toIndentedString(String indent) { 226 return "supportedBearers : " 227 + getExtensionSupportedBearers().toIndentedString(indent); 228 } 229 }); 230 231 return builder.build(); 232 } 233 234 235 236 237 238 239 240 241 encodePerUnaligned()242 @Override public Iterable<BitStream> encodePerUnaligned() { 243 return super.encodePerUnaligned(); 244 } 245 encodePerAligned()246 @Override public Iterable<BitStream> encodePerAligned() { 247 return super.encodePerAligned(); 248 } 249 decodePerUnaligned(BitStreamReader reader)250 @Override public void decodePerUnaligned(BitStreamReader reader) { 251 super.decodePerUnaligned(reader); 252 } 253 decodePerAligned(BitStreamReader reader)254 @Override public void decodePerAligned(BitStreamReader reader) { 255 super.decodePerAligned(reader); 256 } 257 toString()258 @Override public String toString() { 259 return toIndentedString(""); 260 } 261 toIndentedString(String indent)262 public String toIndentedString(String indent) { 263 StringBuilder builder = new StringBuilder(); 264 builder.append("Ver2_SETCapabilities_extension = {\n"); 265 final String internalIndent = indent + " "; 266 for (SequenceComponent component : getComponents()) { 267 if (component.isExplicitlySet()) { 268 builder.append(internalIndent) 269 .append(component.toIndentedString(internalIndent)); 270 } 271 } 272 if (isExtensible()) { 273 builder.append(internalIndent).append("...\n"); 274 for (SequenceComponent component : getExtensionComponents()) { 275 if (component.isExplicitlySet()) { 276 builder.append(internalIndent) 277 .append(component.toIndentedString(internalIndent)); 278 } 279 } 280 } 281 builder.append(indent).append("};\n"); 282 return builder.toString(); 283 } 284 } 285