// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.asn1;

import java.io.IOException;

public final class ASN1ObjectDescriptor extends ASN1Primitive
{
    static final ASN1UniversalType TYPE;
    private final ASN1GraphicString baseGraphicString;
    
    public static ASN1ObjectDescriptor getInstance(final Object o) {
        if (o == null || o instanceof ASN1ObjectDescriptor) {
            return (ASN1ObjectDescriptor)o;
        }
        if (o instanceof ASN1Encodable) {
            final ASN1Primitive asn1Primitive = ((ASN1Encodable)o).toASN1Primitive();
            if (asn1Primitive instanceof ASN1ObjectDescriptor) {
                return (ASN1ObjectDescriptor)asn1Primitive;
            }
        }
        else if (o instanceof byte[]) {
            try {
                return (ASN1ObjectDescriptor)ASN1ObjectDescriptor.TYPE.fromByteArray((byte[])o);
            }
            catch (final IOException ex) {
                throw new IllegalArgumentException("failed to construct object descriptor from byte[]: " + ex.getMessage());
            }
        }
        throw new IllegalArgumentException("illegal object in getInstance: " + o.getClass().getName());
    }
    
    public static ASN1ObjectDescriptor getInstance(final ASN1TaggedObject asn1TaggedObject, final boolean b) {
        return (ASN1ObjectDescriptor)ASN1ObjectDescriptor.TYPE.getContextTagged(asn1TaggedObject, b);
    }
    
    public static ASN1ObjectDescriptor getTagged(final ASN1TaggedObject asn1TaggedObject, final boolean b) {
        return (ASN1ObjectDescriptor)ASN1ObjectDescriptor.TYPE.getTagged(asn1TaggedObject, b);
    }
    
    public ASN1ObjectDescriptor(final ASN1GraphicString baseGraphicString) {
        if (null == baseGraphicString) {
            throw new NullPointerException("'baseGraphicString' cannot be null");
        }
        this.baseGraphicString = baseGraphicString;
    }
    
    public ASN1GraphicString getBaseGraphicString() {
        return this.baseGraphicString;
    }
    
    @Override
    boolean encodeConstructed() {
        return false;
    }
    
    @Override
    int encodedLength(final boolean b) {
        return this.baseGraphicString.encodedLength(b);
    }
    
    @Override
    void encode(final ASN1OutputStream asn1OutputStream, final boolean b) throws IOException {
        asn1OutputStream.writeIdentifier(b, 7);
        this.baseGraphicString.encode(asn1OutputStream, false);
    }
    
    @Override
    ASN1Primitive toDERObject() {
        final ASN1GraphicString asn1GraphicString = (ASN1GraphicString)this.baseGraphicString.toDERObject();
        return (asn1GraphicString == this.baseGraphicString) ? this : new ASN1ObjectDescriptor(asn1GraphicString);
    }
    
    @Override
    ASN1Primitive toDLObject() {
        final ASN1GraphicString asn1GraphicString = (ASN1GraphicString)this.baseGraphicString.toDLObject();
        return (asn1GraphicString == this.baseGraphicString) ? this : new ASN1ObjectDescriptor(asn1GraphicString);
    }
    
    @Override
    boolean asn1Equals(final ASN1Primitive asn1Primitive) {
        return asn1Primitive instanceof ASN1ObjectDescriptor && this.baseGraphicString.asn1Equals(((ASN1ObjectDescriptor)asn1Primitive).baseGraphicString);
    }
    
    @Override
    public int hashCode() {
        return ~this.baseGraphicString.hashCode();
    }
    
    static ASN1ObjectDescriptor createPrimitive(final byte[] array) {
        return new ASN1ObjectDescriptor(ASN1GraphicString.createPrimitive(array));
    }
    
    static {
        TYPE = new ASN1UniversalType(7) {
            @Override
            ASN1Primitive fromImplicitPrimitive(final DEROctetString derOctetString) {
                return new ASN1ObjectDescriptor((ASN1GraphicString)ASN1GraphicString.TYPE.fromImplicitPrimitive(derOctetString));
            }
            
            @Override
            ASN1Primitive fromImplicitConstructed(final ASN1Sequence asn1Sequence) {
                return new ASN1ObjectDescriptor((ASN1GraphicString)ASN1GraphicString.TYPE.fromImplicitConstructed(asn1Sequence));
            }
        };
    }
}
