X500NameBuilder.java revision e1142c149e244797ce73b0e7fad40816e447a817
1package org.bouncycastle.asn1.x500;
2
3import java.util.Vector;
4
5import org.bouncycastle.asn1.ASN1Encodable;
6import org.bouncycastle.asn1.ASN1ObjectIdentifier;
7import org.bouncycastle.asn1.x500.style.BCStyle;
8
9public class X500NameBuilder
10{
11    private X500NameStyle template;
12    private Vector rdns = new Vector();
13
14    public X500NameBuilder()
15    {
16        this(BCStyle.INSTANCE);
17    }
18
19    public X500NameBuilder(X500NameStyle template)
20    {
21        this.template = template;
22    }
23
24    public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, String value)
25    {
26        this.addRDN(oid, template.stringToValue(oid, value));
27
28        return this;
29    }
30
31    public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, ASN1Encodable value)
32    {
33        rdns.addElement(new RDN(oid, value));
34
35        return this;
36    }
37
38    public X500NameBuilder addRDN(AttributeTypeAndValue attrTAndV)
39    {
40        rdns.addElement(new RDN(attrTAndV));
41
42        return this;
43    }
44
45    public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, String[] values)
46    {
47        ASN1Encodable[] vals = new ASN1Encodable[values.length];
48
49        for (int i = 0; i != vals.length; i++)
50        {
51            vals[i] = template.stringToValue(oids[i], values[i]);
52        }
53
54        return addMultiValuedRDN(oids, vals);
55    }
56
57    public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, ASN1Encodable[] values)
58    {
59        AttributeTypeAndValue[] avs = new AttributeTypeAndValue[oids.length];
60
61        for (int i = 0; i != oids.length; i++)
62        {
63            avs[i] = new AttributeTypeAndValue(oids[i], values[i]);
64        }
65
66        return addMultiValuedRDN(avs);
67    }
68
69    public X500NameBuilder addMultiValuedRDN(AttributeTypeAndValue[] attrTAndVs)
70    {
71        rdns.addElement(new RDN(attrTAndVs));
72
73        return this;
74    }
75
76    public X500Name build()
77    {
78        RDN[] vals = new RDN[rdns.size()];
79
80        for (int i = 0; i != vals.length; i++)
81        {
82            vals[i] = (RDN)rdns.elementAt(i);
83        }
84
85        return new X500Name(template, vals);
86    }
87}
88