Home | History | Annotate | Download | only in x500
      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