001    package org.apache.commons.ssl.asn1;
002    
003    import java.io.IOException;
004    
005    /** DER UTF8String object. */
006    public class DERUTF8String
007        extends ASN1Object
008        implements DERString {
009        String string;
010    
011        /**
012         * return an UTF8 string from the passed in object.
013         *
014         * @throws IllegalArgumentException if the object cannot be converted.
015         */
016        public static DERUTF8String getInstance(Object obj) {
017            if (obj == null || obj instanceof DERUTF8String) {
018                return (DERUTF8String) obj;
019            }
020    
021            if (obj instanceof ASN1OctetString) {
022                return new DERUTF8String(((ASN1OctetString) obj).getOctets());
023            }
024    
025            if (obj instanceof ASN1TaggedObject) {
026                return getInstance(((ASN1TaggedObject) obj).getObject());
027            }
028    
029            throw new IllegalArgumentException("illegal object in getInstance: "
030                                               + obj.getClass().getName());
031        }
032    
033        /**
034         * return an UTF8 String from a tagged object.
035         *
036         * @param obj      the tagged object holding the object we want
037         * @param explicit true if the object is meant to be explicitly tagged false
038         *                 otherwise.
039         * @throws IllegalArgumentException if the tagged object cannot be converted.
040         */
041        public static DERUTF8String getInstance(
042            ASN1TaggedObject obj,
043            boolean explicit) {
044            return getInstance(obj.getObject());
045        }
046    
047        /** basic constructor - byte encoded string. */
048        DERUTF8String(byte[] string) {
049            this.string = Strings.fromUTF8ByteArray(string);
050        }
051    
052        /** basic constructor */
053        public DERUTF8String(String string) {
054            this.string = string;
055        }
056    
057        public String getString() {
058            return string;
059        }
060    
061        public String toString() {
062            return string;
063        }
064    
065        public int hashCode() {
066            return this.getString().hashCode();
067        }
068    
069        boolean asn1Equals(DERObject o) {
070            if (!(o instanceof DERUTF8String)) {
071                return false;
072            }
073    
074            DERUTF8String s = (DERUTF8String) o;
075    
076            return this.getString().equals(s.getString());
077        }
078    
079        void encode(DEROutputStream out)
080            throws IOException {
081            out.writeEncoded(UTF8_STRING, Strings.toUTF8ByteArray(string));
082        }
083    }