001package org.apache.commons.ssl.org.bouncycastle.asn1.x500;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
010
011public class AttributeTypeAndValue
012    extends ASN1Object
013{
014    private ASN1ObjectIdentifier type;
015    private ASN1Encodable       value;
016
017    private AttributeTypeAndValue(ASN1Sequence seq)
018    {
019        type = (ASN1ObjectIdentifier)seq.getObjectAt(0);
020        value = (ASN1Encodable)seq.getObjectAt(1);
021    }
022
023    public static AttributeTypeAndValue getInstance(Object o)
024    {
025        if (o instanceof AttributeTypeAndValue)
026        {
027            return (AttributeTypeAndValue)o;
028        }
029        else if (o != null)
030        {
031            return new AttributeTypeAndValue(ASN1Sequence.getInstance(o));
032        }
033
034        throw new IllegalArgumentException("null value in getInstance()");
035    }
036
037    public AttributeTypeAndValue(
038        ASN1ObjectIdentifier type,
039        ASN1Encodable value)
040    {
041        this.type = type;
042        this.value = value;
043    }
044
045    public ASN1ObjectIdentifier getType()
046    {
047        return type;
048    }
049
050    public ASN1Encodable getValue()
051    {
052        return value;
053    }
054
055    /**
056     * <pre>
057     * AttributeTypeAndValue ::= SEQUENCE {
058     *           type         OBJECT IDENTIFIER,
059     *           value        ANY DEFINED BY type }
060     * </pre>
061     * @return a basic ASN.1 object representation.
062     */
063    public ASN1Primitive toASN1Primitive()
064    {
065        ASN1EncodableVector v = new ASN1EncodableVector();
066
067        v.add(type);
068        v.add(value);
069
070        return new DERSequence(v);
071    }
072}