org.bouncycastle.asn1.x509.DisplayText.java Source code

Java tutorial

Introduction

Here is the source code for org.bouncycastle.asn1.x509.DisplayText.java

Source

package org.bouncycastle.asn1.x509;

import org.bouncycastle.asn1.ASN1Choice;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1String;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERBMPString;
import org.bouncycastle.asn1.DERIA5String;
import org.bouncycastle.asn1.DERUTF8String;
import org.bouncycastle.asn1.DERVisibleString;

/**
 * <code>DisplayText</code> class, used in
 * <code>CertificatePolicies</code> X509 V3 extensions (in policy qualifiers).
 *
 * <p>It stores a string in a chosen encoding. 
 * <pre>
 * DisplayText ::= CHOICE {
 *      ia5String        IA5String      (SIZE (1..200)),
 *      visibleString    VisibleString  (SIZE (1..200)),
 *      bmpString        BMPString      (SIZE (1..200)),
 *      utf8String       UTF8String     (SIZE (1..200)) }
 * </pre>
 * @see PolicyQualifierInfo
 * @see PolicyInformation
 */
public class DisplayText extends ASN1Object implements ASN1Choice {
    /**
     * Constant corresponding to ia5String encoding. 
     *
     */
    public static final int CONTENT_TYPE_IA5STRING = 0;
    /**
     * Constant corresponding to bmpString encoding. 
     *
     */
    public static final int CONTENT_TYPE_BMPSTRING = 1;
    /**
     * Constant corresponding to utf8String encoding. 
     *
     */
    public static final int CONTENT_TYPE_UTF8STRING = 2;
    /**
     * Constant corresponding to visibleString encoding. 
     *
     */
    public static final int CONTENT_TYPE_VISIBLESTRING = 3;

    /**
     * Describe constant <code>DISPLAY_TEXT_MAXIMUM_SIZE</code> here.
     *
     */
    public static final int DISPLAY_TEXT_MAXIMUM_SIZE = 200;

    int contentType;
    ASN1String contents;

    /**
     * Creates a new <code>DisplayText</code> instance.
     *
     * @param type the desired encoding type for the text. 
     * @param text the text to store. Strings longer than 200
     * characters are truncated. 
     */
    public DisplayText(int type, String text) {
        if (text.length() > DISPLAY_TEXT_MAXIMUM_SIZE) {
            // RFC3280 limits these strings to 200 chars
            // truncate the string
            text = text.substring(0, DISPLAY_TEXT_MAXIMUM_SIZE);
        }

        contentType = type;
        switch (type) {
        case CONTENT_TYPE_IA5STRING:
            contents = new DERIA5String(text);
            break;
        case CONTENT_TYPE_UTF8STRING:
            contents = new DERUTF8String(text);
            break;
        case CONTENT_TYPE_VISIBLESTRING:
            contents = new DERVisibleString(text);
            break;
        case CONTENT_TYPE_BMPSTRING:
            contents = new DERBMPString(text);
            break;
        default:
            contents = new DERUTF8String(text);
            break;
        }
    }

    /**
     * Creates a new <code>DisplayText</code> instance.
     *
     * @param text the text to encapsulate. Strings longer than 200
     * characters are truncated. 
     */
    public DisplayText(String text) {
        // by default use UTF8String
        if (text.length() > DISPLAY_TEXT_MAXIMUM_SIZE) {
            text = text.substring(0, DISPLAY_TEXT_MAXIMUM_SIZE);
        }

        contentType = CONTENT_TYPE_UTF8STRING;
        contents = new DERUTF8String(text);
    }

    /**
     * Creates a new <code>DisplayText</code> instance.
     * <p>Useful when reading back a <code>DisplayText</code> class
     * from it's ASN1Encodable/DEREncodable form. 
     *
     * @param de a <code>DEREncodable</code> instance. 
     */
    private DisplayText(ASN1String de) {
        contents = de;
        if (de instanceof DERUTF8String) {
            contentType = CONTENT_TYPE_UTF8STRING;
        } else if (de instanceof DERBMPString) {
            contentType = CONTENT_TYPE_BMPSTRING;
        } else if (de instanceof DERIA5String) {
            contentType = CONTENT_TYPE_IA5STRING;
        } else if (de instanceof DERVisibleString) {
            contentType = CONTENT_TYPE_VISIBLESTRING;
        } else {
            throw new IllegalArgumentException("unknown STRING type in DisplayText");
        }
    }

    public static DisplayText getInstance(Object obj) {
        if (obj instanceof ASN1String) {
            return new DisplayText((ASN1String) obj);
        } else if (obj == null || obj instanceof DisplayText) {
            return (DisplayText) obj;
        }

        throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName());
    }

    public static DisplayText getInstance(ASN1TaggedObject obj, boolean explicit) {
        return getInstance(obj.getObject()); // must be explicitly tagged
    }

    public ASN1Primitive toASN1Primitive() {
        return (ASN1Primitive) contents;
    }

    /**
     * Returns the stored <code>String</code> object. 
     *
     * @return the stored text as a <code>String</code>. 
     */
    public String getString() {
        return contents.getString();
    }
}