001package org.apache.commons.ssl.org.bouncycastle.asn1.x500;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Choice;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1String;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
009import org.apache.commons.ssl.org.bouncycastle.asn1.DERBMPString;
010import org.apache.commons.ssl.org.bouncycastle.asn1.DERPrintableString;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DERT61String;
012import org.apache.commons.ssl.org.bouncycastle.asn1.DERUTF8String;
013import org.apache.commons.ssl.org.bouncycastle.asn1.DERUniversalString;
014
015public class DirectoryString
016    extends ASN1Object
017    implements ASN1Choice, ASN1String
018{
019    private ASN1String string;
020
021    public static DirectoryString getInstance(Object o)
022    {
023        if (o == null || o instanceof DirectoryString)
024        {
025            return (DirectoryString)o;
026        }
027
028        if (o instanceof DERT61String)
029        {
030            return new DirectoryString((DERT61String)o);
031        }
032
033        if (o instanceof DERPrintableString)
034        {
035            return new DirectoryString((DERPrintableString)o);
036        }
037
038        if (o instanceof DERUniversalString)
039        {
040            return new DirectoryString((DERUniversalString)o);
041        }
042
043        if (o instanceof DERUTF8String)
044        {
045            return new DirectoryString((DERUTF8String)o);
046        }
047
048        if (o instanceof DERBMPString)
049        {
050            return new DirectoryString((DERBMPString)o);
051        }
052
053        throw new IllegalArgumentException("illegal object in getInstance: " + o.getClass().getName());
054    }
055
056    public static DirectoryString getInstance(ASN1TaggedObject o, boolean explicit)
057    {
058        if (!explicit)
059        {
060            throw new IllegalArgumentException("choice item must be explicitly tagged");
061        }
062
063        return getInstance(o.getObject());
064    }
065
066    private DirectoryString(
067        DERT61String string)
068    {
069        this.string = string;
070    }
071
072    private DirectoryString(
073        DERPrintableString string)
074    {
075        this.string = string;
076    }
077
078    private DirectoryString(
079        DERUniversalString string)
080    {
081        this.string = string;
082    }
083
084    private DirectoryString(
085        DERUTF8String string)
086    {
087        this.string = string;
088    }
089
090    private DirectoryString(
091        DERBMPString string)
092    {
093        this.string = string;
094    }
095
096    public DirectoryString(String string)
097    {
098        this.string = new DERUTF8String(string);
099    }
100
101    public String getString()
102    {
103        return string.getString();
104    }
105
106    public String toString()
107    {
108        return string.getString();
109    }
110
111    /**
112     * <pre>
113     *  DirectoryString ::= CHOICE {
114     *    teletexString               TeletexString (SIZE (1..MAX)),
115     *    printableString             PrintableString (SIZE (1..MAX)),
116     *    universalString             UniversalString (SIZE (1..MAX)),
117     *    utf8String                  UTF8String (SIZE (1..MAX)),
118     *    bmpString                   BMPString (SIZE (1..MAX))  }
119     * </pre>
120     */
121    public ASN1Primitive toASN1Primitive()
122    {
123        return ((ASN1Encodable)string).toASN1Primitive();
124    }
125}