1package org.bouncycastle.asn1.x500;
2
3import org.bouncycastle.asn1.ASN1Choice;
4import org.bouncycastle.asn1.ASN1Encodable;
5import org.bouncycastle.asn1.ASN1Object;
6import org.bouncycastle.asn1.ASN1Primitive;
7import org.bouncycastle.asn1.ASN1String;
8import org.bouncycastle.asn1.ASN1TaggedObject;
9import org.bouncycastle.asn1.DERBMPString;
10import org.bouncycastle.asn1.DERPrintableString;
11import org.bouncycastle.asn1.DERT61String;
12import org.bouncycastle.asn1.DERUTF8String;
13import org.bouncycastle.asn1.DERUniversalString;
14
15public class DirectoryString
16    extends ASN1Object
17    implements ASN1Choice, ASN1String
18{
19    private ASN1String string;
20
21    public static DirectoryString getInstance(Object o)
22    {
23        if (o == null || o instanceof DirectoryString)
24        {
25            return (DirectoryString)o;
26        }
27
28        if (o instanceof DERT61String)
29        {
30            return new DirectoryString((DERT61String)o);
31        }
32
33        if (o instanceof DERPrintableString)
34        {
35            return new DirectoryString((DERPrintableString)o);
36        }
37
38        if (o instanceof DERUniversalString)
39        {
40            return new DirectoryString((DERUniversalString)o);
41        }
42
43        if (o instanceof DERUTF8String)
44        {
45            return new DirectoryString((DERUTF8String)o);
46        }
47
48        if (o instanceof DERBMPString)
49        {
50            return new DirectoryString((DERBMPString)o);
51        }
52
53        throw new IllegalArgumentException("illegal object in getInstance: " + o.getClass().getName());
54    }
55
56    public static DirectoryString getInstance(ASN1TaggedObject o, boolean explicit)
57    {
58        if (!explicit)
59        {
60            throw new IllegalArgumentException("choice item must be explicitly tagged");
61        }
62
63        return getInstance(o.getObject());
64    }
65
66    private DirectoryString(
67        DERT61String string)
68    {
69        this.string = string;
70    }
71
72    private DirectoryString(
73        DERPrintableString string)
74    {
75        this.string = string;
76    }
77
78    private DirectoryString(
79        DERUniversalString string)
80    {
81        this.string = string;
82    }
83
84    private DirectoryString(
85        DERUTF8String string)
86    {
87        this.string = string;
88    }
89
90    private DirectoryString(
91        DERBMPString string)
92    {
93        this.string = string;
94    }
95
96    public DirectoryString(String string)
97    {
98        this.string = new DERUTF8String(string);
99    }
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}
126