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

package org.bouncycastle.asn1.est;

import java.io.IOException;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.pkcs.Attribute;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Choice;
import org.bouncycastle.asn1.ASN1Object;

public class AttrOrOID extends ASN1Object implements ASN1Choice
{
    private final ASN1ObjectIdentifier oid;
    private final Attribute attribute;
    
    public AttrOrOID(final ASN1ObjectIdentifier oid) {
        this.oid = oid;
        this.attribute = null;
    }
    
    public AttrOrOID(final Attribute attribute) {
        this.oid = null;
        this.attribute = attribute;
    }
    
    public static AttrOrOID getInstance(final Object o) {
        if (o instanceof AttrOrOID) {
            return (AttrOrOID)o;
        }
        if (o != null) {
            if (o instanceof ASN1Encodable) {
                final ASN1Primitive asn1Primitive = ((ASN1Encodable)o).toASN1Primitive();
                if (asn1Primitive instanceof ASN1ObjectIdentifier) {
                    return new AttrOrOID(ASN1ObjectIdentifier.getInstance(asn1Primitive));
                }
                if (asn1Primitive instanceof ASN1Sequence) {
                    return new AttrOrOID(Attribute.getInstance(asn1Primitive));
                }
            }
            if (o instanceof byte[]) {
                try {
                    return getInstance(ASN1Primitive.fromByteArray((byte[])o));
                }
                catch (final IOException ex) {
                    throw new IllegalArgumentException("unknown encoding in getInstance()");
                }
            }
            throw new IllegalArgumentException("unknown object in getInstance(): " + o.getClass().getName());
        }
        return null;
    }
    
    public boolean isOid() {
        return this.oid != null;
    }
    
    public ASN1ObjectIdentifier getOid() {
        return this.oid;
    }
    
    public Attribute getAttribute() {
        return this.attribute;
    }
    
    @Override
    public ASN1Primitive toASN1Primitive() {
        if (this.oid != null) {
            return this.oid;
        }
        return this.attribute.toASN1Primitive();
    }
}
