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