001package org.apache.commons.ssl.org.bouncycastle.asn1.ess;
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;
010import org.apache.commons.ssl.org.bouncycastle.asn1.DERUTF8String;
011
012public class ContentHints
013    extends ASN1Object
014{
015    private DERUTF8String contentDescription;
016    private ASN1ObjectIdentifier contentType;
017
018    public static ContentHints getInstance(Object o)
019    {
020        if (o instanceof ContentHints)
021        {
022            return (ContentHints)o;
023        }
024        else if (o != null)
025        {
026            return new ContentHints(ASN1Sequence.getInstance(o));
027        }
028
029        return null;
030    }
031
032    /**
033     * constructor
034     */
035    private ContentHints(ASN1Sequence seq)
036    {
037        ASN1Encodable field = seq.getObjectAt(0);
038        if (field.toASN1Primitive() instanceof DERUTF8String)
039        {
040            contentDescription = DERUTF8String.getInstance(field);
041            contentType = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(1));
042        }
043        else
044        {
045            contentType = ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0));
046        }
047    }
048
049    public ContentHints(
050        ASN1ObjectIdentifier contentType)
051    {
052        this.contentType = contentType;
053        this.contentDescription = null;
054    }
055
056    public ContentHints(
057        ASN1ObjectIdentifier contentType,
058        DERUTF8String contentDescription)
059    {
060        this.contentType = contentType;
061        this.contentDescription = contentDescription;
062    }
063
064    public ASN1ObjectIdentifier getContentType()
065    {
066        return contentType;
067    }
068
069    public DERUTF8String getContentDescription()
070    {
071        return contentDescription;
072    }
073
074    /**
075     * <pre>
076     * ContentHints ::= SEQUENCE {
077     *   contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
078     *   contentType ContentType }
079     * </pre>
080     */
081    public ASN1Primitive toASN1Primitive()
082    {
083        ASN1EncodableVector v = new ASN1EncodableVector();
084
085        if (contentDescription != null)
086        {
087            v.add(contentDescription);
088        }
089
090        v.add(contentType);
091
092        return new DERSequence(v);
093    }
094}