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