16e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompackage org.bouncycastle.asn1.x500;
26e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.Vector;
46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Encodable;
66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstromimport org.bouncycastle.asn1.x500.style.BCStyle;
86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
96e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompublic class X500NameBuilder
106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom{
116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private X500NameStyle template;
126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private Vector rdns = new Vector();
136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
1470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom    public X500NameBuilder()
1570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom    {
1670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom        this(BCStyle.INSTANCE);
1770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom    }
1870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom
196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public X500NameBuilder(X500NameStyle template)
206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        this.template = template;
226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, String value)
256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        this.addRDN(oid, template.stringToValue(oid, value));
276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return this;
296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, ASN1Encodable value)
326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        rdns.addElement(new RDN(oid, value));
346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return this;
366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public X500NameBuilder addRDN(AttributeTypeAndValue attrTAndV)
396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        rdns.addElement(new RDN(attrTAndV));
416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return this;
436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, String[] values)
466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        ASN1Encodable[] vals = new ASN1Encodable[values.length];
486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        for (int i = 0; i != vals.length; i++)
506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            vals[i] = template.stringToValue(oids[i], values[i]);
526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return addMultiValuedRDN(oids, vals);
556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, ASN1Encodable[] values)
586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        AttributeTypeAndValue[] avs = new AttributeTypeAndValue[oids.length];
606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        for (int i = 0; i != oids.length; i++)
626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            avs[i] = new AttributeTypeAndValue(oids[i], values[i]);
646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return addMultiValuedRDN(avs);
676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public X500NameBuilder addMultiValuedRDN(AttributeTypeAndValue[] attrTAndVs)
706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        rdns.addElement(new RDN(attrTAndVs));
726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return this;
746e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public X500Name build()
776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        RDN[] vals = new RDN[rdns.size()];
796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
806e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        for (int i = 0; i != vals.length; i++)
816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            vals[i] = (RDN)rdns.elementAt(i);
836e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return new X500Name(template, vals);
866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
876e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom}
88