001package org.apache.commons.ssl.org.bouncycastle.asn1.x500; 002 003import java.util.Vector; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 007import org.apache.commons.ssl.org.bouncycastle.asn1.x500.style.BCStyle; 008 009public class X500NameBuilder 010{ 011 private X500NameStyle template; 012 private Vector rdns = new Vector(); 013 014 public X500NameBuilder() 015 { 016 this(BCStyle.INSTANCE); 017 } 018 019 public X500NameBuilder(X500NameStyle template) 020 { 021 this.template = template; 022 } 023 024 public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, String value) 025 { 026 this.addRDN(oid, template.stringToValue(oid, value)); 027 028 return this; 029 } 030 031 public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, ASN1Encodable value) 032 { 033 rdns.addElement(new RDN(oid, value)); 034 035 return this; 036 } 037 038 public X500NameBuilder addRDN(AttributeTypeAndValue attrTAndV) 039 { 040 rdns.addElement(new RDN(attrTAndV)); 041 042 return this; 043 } 044 045 public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, String[] values) 046 { 047 ASN1Encodable[] vals = new ASN1Encodable[values.length]; 048 049 for (int i = 0; i != vals.length; i++) 050 { 051 vals[i] = template.stringToValue(oids[i], values[i]); 052 } 053 054 return addMultiValuedRDN(oids, vals); 055 } 056 057 public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, ASN1Encodable[] values) 058 { 059 AttributeTypeAndValue[] avs = new AttributeTypeAndValue[oids.length]; 060 061 for (int i = 0; i != oids.length; i++) 062 { 063 avs[i] = new AttributeTypeAndValue(oids[i], values[i]); 064 } 065 066 return addMultiValuedRDN(avs); 067 } 068 069 public X500NameBuilder addMultiValuedRDN(AttributeTypeAndValue[] attrTAndVs) 070 { 071 rdns.addElement(new RDN(attrTAndVs)); 072 073 return this; 074 } 075 076 public X500Name build() 077 { 078 RDN[] vals = new RDN[rdns.size()]; 079 080 for (int i = 0; i != vals.length; i++) 081 { 082 vals[i] = (RDN)rdns.elementAt(i); 083 } 084 085 return new X500Name(template, vals); 086 } 087}