GeneralNames.java revision e1142c149e244797ce73b0e7fad40816e447a817
1package org.bouncycastle.asn1.x509;
2
3import org.bouncycastle.asn1.ASN1Object;
4import org.bouncycastle.asn1.ASN1ObjectIdentifier;
5import org.bouncycastle.asn1.ASN1Primitive;
6import org.bouncycastle.asn1.ASN1Sequence;
7import org.bouncycastle.asn1.ASN1TaggedObject;
8import org.bouncycastle.asn1.DERSequence;
9
10public class GeneralNames
11    extends ASN1Object
12{
13    private final GeneralName[] names;
14
15    public static GeneralNames getInstance(
16        Object  obj)
17    {
18        if (obj instanceof GeneralNames)
19        {
20            return (GeneralNames)obj;
21        }
22
23        if (obj != null)
24        {
25            return new GeneralNames(ASN1Sequence.getInstance(obj));
26        }
27
28        return null;
29    }
30
31    public static GeneralNames getInstance(
32        ASN1TaggedObject obj,
33        boolean          explicit)
34    {
35        return getInstance(ASN1Sequence.getInstance(obj, explicit));
36    }
37
38    public static GeneralNames fromExtensions(Extensions extensions, ASN1ObjectIdentifier extOID)
39    {
40        return GeneralNames.getInstance(extensions.getExtensionParsedValue(extOID));
41    }
42
43    /**
44     * Construct a GeneralNames object containing one GeneralName.
45     *
46     * @param name the name to be contained.
47     */
48    public GeneralNames(
49        GeneralName  name)
50    {
51        this.names = new GeneralName[] { name };
52    }
53
54
55    public GeneralNames(
56        GeneralName[]  names)
57    {
58        this.names = names;
59    }
60
61    private GeneralNames(
62        ASN1Sequence  seq)
63    {
64        this.names = new GeneralName[seq.size()];
65
66        for (int i = 0; i != seq.size(); i++)
67        {
68            names[i] = GeneralName.getInstance(seq.getObjectAt(i));
69        }
70    }
71
72    public GeneralName[] getNames()
73    {
74        GeneralName[] tmp = new GeneralName[names.length];
75
76        System.arraycopy(names, 0, tmp, 0, names.length);
77
78        return tmp;
79    }
80
81    /**
82     * Produce an object suitable for an ASN1OutputStream.
83     * <pre>
84     * GeneralNames ::= SEQUENCE SIZE {1..MAX} OF GeneralName
85     * </pre>
86     */
87    public ASN1Primitive toASN1Primitive()
88    {
89        return new DERSequence(names);
90    }
91
92    public String toString()
93    {
94        StringBuffer  buf = new StringBuffer();
95        String        sep = System.getProperty("line.separator");
96
97        buf.append("GeneralNames:");
98        buf.append(sep);
99
100        for (int i = 0; i != names.length; i++)
101        {
102            buf.append("    ");
103            buf.append(names[i]);
104            buf.append(sep);
105        }
106        return buf.toString();
107    }
108}
109