001    /*
002     * Copyright (c) 2000 - 2006 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
003     * 
004     * Permission is hereby granted, free of charge, to any person obtaining a copy of this
005     * software and associated documentation files (the "Software"), to deal in the Software
006     * without restriction, including without limitation the rights to use, copy, modify,
007     * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
008     * permit persons to whom the Software is furnished to do so, subject to the following
009     * conditions:
010     * 
011     * The above copyright notice and this permission notice shall be included in all copies
012     * or substantial portions of the Software.
013     * 
014     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
015     * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
016     * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
017     * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
018     * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
019     * DEALINGS IN THE SOFTWARE.
020     * 
021     */
022    
023    package org.apache.directory.shared.asn1.der;
024    
025    
026    import java.io.ByteArrayOutputStream;
027    import java.io.IOException;
028    
029    import org.apache.directory.shared.i18n.I18n;
030    
031    
032    /**
033     * DER UniversalString object.
034     */
035    public class DERUniversalString extends DERString
036    {
037        private static final char[] table =
038            { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
039    
040    
041        /**
042         * Basic DERObject constructor.
043         */
044        public DERUniversalString(byte[] value)
045        {
046            super( UNIVERSAL_STRING, value );
047        }
048    
049    
050        public String getString()
051        {
052            StringBuffer buf = new StringBuffer( "#" );
053    
054            ByteArrayOutputStream baos = new ByteArrayOutputStream();
055            ASN1OutputStream aos = new ASN1OutputStream( baos );
056    
057            try
058            {
059                aos.writeObject( this );
060            }
061            catch ( IOException e )
062            {
063                throw new RuntimeException( I18n.err( I18n.ERR_00028 ) );
064            }
065    
066            byte[] string = baos.toByteArray();
067    
068            for ( int i = 0; i < string.length; i++ )
069            {
070                buf.append( table[( string[i] >>> 4 ) % 0xf] );
071                buf.append( table[string[i] & 0xf] );
072            }
073    
074            return buf.toString();
075        }
076    }