| package com.android.hotspot2.asn1; |
| |
| import java.nio.ByteBuffer; |
| import java.util.*; |
| |
| public class Asn1Constructed extends Asn1Object { |
| private final int mTagPosition; |
| private final List<Asn1Object> mChildren; |
| |
| public Asn1Constructed(int tag, Asn1Class asn1Class, int length, |
| ByteBuffer payload, int tagPosition) { |
| super(tag, asn1Class, true, length, payload); |
| mTagPosition = tagPosition; |
| mChildren = new ArrayList<>(); |
| } |
| |
| public void addChild(Asn1Object object) { |
| mChildren.add(object); |
| } |
| |
| @Override |
| public Collection<Asn1Object> getChildren() { |
| return Collections.unmodifiableCollection(mChildren); |
| } |
| |
| public ByteBuffer getEncoding() { |
| return getPayload(mTagPosition); |
| } |
| |
| private void toString(int level, StringBuilder sb) { |
| sb.append(indent(level)).append(super.toString()).append(":\n"); |
| for (Asn1Object child : mChildren) { |
| if (child.isConstructed()) { |
| ((Asn1Constructed) child).toString(level + 1, sb); |
| } else { |
| sb.append(indent(level + 1)).append(child.toString()).append('\n'); |
| } |
| } |
| } |
| |
| public static String indent(int level) { |
| char[] indent = new char[level * 2]; |
| Arrays.fill(indent, ' '); |
| return new String(indent); |
| } |
| |
| @Override |
| public String toString() { |
| StringBuilder sb = new StringBuilder(); |
| toString(0, sb); |
| return sb.toString(); |
| } |
| } |