1 package org.bouncycastle.asn1.x500; 2 3 import org.bouncycastle.asn1.ASN1Encodable; 4 import org.bouncycastle.asn1.ASN1EncodableVector; 5 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 6 import org.bouncycastle.asn1.ASN1Set; 7 import org.bouncycastle.asn1.DERObject; 8 import org.bouncycastle.asn1.DERSequence; 9 import org.bouncycastle.asn1.DERSet; 10 11 public class RDN 12 extends ASN1Encodable 13 { 14 private ASN1Set values; 15 16 private RDN(ASN1Set values) 17 { 18 this.values = values; 19 } 20 21 public static RDN getInstance(Object obj) 22 { 23 if (obj instanceof RDN) 24 { 25 return (RDN)obj; 26 } 27 else if (obj != null) 28 { 29 return new RDN(ASN1Set.getInstance(obj)); 30 } 31 32 return null; 33 } 34 35 /** 36 * Create a single valued RDN. 37 * 38 * @param oid 39 * @param value 40 */ 41 public RDN(ASN1ObjectIdentifier oid, ASN1Encodable value) 42 { 43 ASN1EncodableVector v = new ASN1EncodableVector(); 44 45 v.add(oid); 46 v.add(value); 47 48 this.values = new DERSet(new DERSequence(v)); 49 } 50 51 public RDN(AttributeTypeAndValue attrTAndV) 52 { 53 this.values = new DERSet(attrTAndV); 54 } 55 56 /** 57 * Create a multi-valued RDN. 58 */ 59 public RDN(AttributeTypeAndValue[] aAndVs) 60 { 61 this.values = new DERSet(aAndVs); 62 } 63 64 public boolean isMultiValued() 65 { 66 return this.values.size() > 1; 67 } 68 69 public AttributeTypeAndValue getFirst() 70 { 71 if (this.values.size() == 0) 72 { 73 return null; 74 } 75 76 return AttributeTypeAndValue.getInstance(this.values.getObjectAt(0)); 77 } 78 79 public AttributeTypeAndValue[] getTypesAndValues() 80 { 81 AttributeTypeAndValue[] tmp = new AttributeTypeAndValue[values.size()]; 82 83 for (int i = 0; i != tmp.length; i++) 84 { 85 tmp[i] = AttributeTypeAndValue.getInstance(values.getObjectAt(i)); 86 } 87 88 return tmp; 89 } 90 91 /** 92 * <pre> 93 * RelativeDistinguishedName ::= 94 * SET OF AttributeTypeAndValue 95 96 * AttributeTypeAndValue ::= SEQUENCE { 97 * type AttributeType, 98 * value AttributeValue } 99 * </pre> 100 * @return 101 */ 102 public DERObject toASN1Object() 103 { 104 return values; 105 } 106 } 107