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

package org.bouncycastle.asn1.x509;

import org.bouncycastle.util.Strings;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Set;
import org.bouncycastle.asn1.ASN1Util;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1Choice;
import org.bouncycastle.asn1.ASN1Object;

public class DistributionPointName extends ASN1Object implements ASN1Choice
{
    public static final int FULL_NAME = 0;
    public static final int NAME_RELATIVE_TO_CRL_ISSUER = 1;
    private final ASN1Encodable name;
    private final int type;
    
    public static DistributionPointName getInstance(final Object o) {
        if (o == null || o instanceof DistributionPointName) {
            return (DistributionPointName)o;
        }
        if (o instanceof ASN1TaggedObject) {
            return new DistributionPointName((ASN1TaggedObject)o);
        }
        throw new IllegalArgumentException("unknown object in factory: " + o.getClass().getName());
    }
    
    public static DistributionPointName getInstance(final ASN1TaggedObject asn1TaggedObject, final boolean b) {
        return getInstance(ASN1Util.getInstanceChoiceBaseObject(asn1TaggedObject, b, "DistributionPointName"));
    }
    
    public static DistributionPointName getTagged(final ASN1TaggedObject asn1TaggedObject, final boolean b) {
        return getInstance(ASN1Util.getTaggedChoiceBaseObject(asn1TaggedObject, b, "DistributionPointName"));
    }
    
    public DistributionPointName(final int type, final ASN1Encodable name) {
        this.type = type;
        this.name = name;
    }
    
    public DistributionPointName(final GeneralNames generalNames) {
        this(0, generalNames);
    }
    
    public int getType() {
        return this.type;
    }
    
    public ASN1Encodable getName() {
        return this.name;
    }
    
    public DistributionPointName(final ASN1TaggedObject asn1TaggedObject) {
        this.type = asn1TaggedObject.getTagNo();
        if (asn1TaggedObject.hasContextTag(0)) {
            this.name = GeneralNames.getInstance(asn1TaggedObject, false);
        }
        else {
            if (!asn1TaggedObject.hasContextTag(1)) {
                throw new IllegalArgumentException("unknown tag: " + ASN1Util.getTagText(asn1TaggedObject));
            }
            this.name = ASN1Set.getInstance(asn1TaggedObject, false);
        }
    }
    
    @Override
    public ASN1Primitive toASN1Primitive() {
        return new DERTaggedObject(false, this.type, this.name);
    }
    
    @Override
    public String toString() {
        final String lineSeparator = Strings.lineSeparator();
        final StringBuilder sb = new StringBuilder();
        sb.append("DistributionPointName: [");
        sb.append(lineSeparator);
        if (this.type == 0) {
            this.appendObject(sb, lineSeparator, "fullName", this.name.toString());
        }
        else {
            this.appendObject(sb, lineSeparator, "nameRelativeToCRLIssuer", this.name.toString());
        }
        sb.append("]");
        sb.append(lineSeparator);
        return sb.toString();
    }
    
    private void appendObject(final StringBuilder sb, final String s, final String str, final String str2) {
        final String str3 = "    ";
        sb.append(str3);
        sb.append(str);
        sb.append(":");
        sb.append(s);
        sb.append(str3);
        sb.append(str3);
        sb.append(str2);
        sb.append(s);
    }
}
