1ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpackage com.android.hotspot2.asn1; 2ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 3ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.nio.ByteBuffer; 4ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.*; 5ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 6ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpublic class Asn1Constructed extends Asn1Object { 7ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final int mTagPosition; 8ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private final List<Asn1Object> mChildren; 9ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 10ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public Asn1Constructed(int tag, Asn1Class asn1Class, int length, 11ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist ByteBuffer payload, int tagPosition) { 12ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist super(tag, asn1Class, true, length, payload); 13ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mTagPosition = tagPosition; 14ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mChildren = new ArrayList<>(); 15ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 16ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 17ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public void addChild(Asn1Object object) { 18ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist mChildren.add(object); 19ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 20ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 21ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist @Override 22ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public Collection<Asn1Object> getChildren() { 23ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return Collections.unmodifiableCollection(mChildren); 24ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 25ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 26ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public ByteBuffer getEncoding() { 27ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return getPayload(mTagPosition); 28ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 29ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 30ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist private void toString(int level, StringBuilder sb) { 31ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist sb.append(indent(level)).append(super.toString()).append(":\n"); 32ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist for (Asn1Object child : mChildren) { 33ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist if (child.isConstructed()) { 34ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist ((Asn1Constructed) child).toString(level + 1, sb); 35ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } else { 36ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist sb.append(indent(level + 1)).append(child.toString()).append('\n'); 37ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 38ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 39ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 40ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 41ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public static String indent(int level) { 42ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist char[] indent = new char[level * 2]; 43ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist Arrays.fill(indent, ' '); 44ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return new String(indent); 45ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 46ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist 47ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist @Override 48ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist public String toString() { 49ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist StringBuilder sb = new StringBuilder(); 50ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist toString(0, sb); 51ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist return sb.toString(); 52ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist } 53ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist} 54