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 }