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

package org.bouncycastle.oer.its.etsi102941;

import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.oer.OEROptional;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.oer.its.etsi103097.EtsiTs103097Certificate;
import org.bouncycastle.asn1.ASN1Object;

public class TlmEntry extends ASN1Object
{
    private final EtsiTs103097Certificate selfSignedTLMCertificate;
    private final EtsiTs103097Certificate successorTo;
    private final Url accessPoint;
    
    public TlmEntry(final EtsiTs103097Certificate selfSignedTLMCertificate, final EtsiTs103097Certificate successorTo, final Url accessPoint) {
        this.selfSignedTLMCertificate = selfSignedTLMCertificate;
        this.successorTo = successorTo;
        this.accessPoint = accessPoint;
    }
    
    private TlmEntry(final ASN1Sequence asn1Sequence) {
        if (asn1Sequence.size() != 3) {
            throw new IllegalArgumentException("expected sequence size of 3");
        }
        this.selfSignedTLMCertificate = EtsiTs103097Certificate.getInstance(asn1Sequence.getObjectAt(0));
        this.successorTo = OEROptional.getValue(EtsiTs103097Certificate.class, asn1Sequence.getObjectAt(1));
        this.accessPoint = Url.getInstance(asn1Sequence.getObjectAt(2));
    }
    
    public static TlmEntry getInstance(final Object o) {
        if (o instanceof TlmEntry) {
            return (TlmEntry)o;
        }
        if (o != null) {
            return new TlmEntry(ASN1Sequence.getInstance(o));
        }
        return null;
    }
    
    public EtsiTs103097Certificate getSelfSignedTLMCertificate() {
        return this.selfSignedTLMCertificate;
    }
    
    public EtsiTs103097Certificate getSuccessorTo() {
        return this.successorTo;
    }
    
    public Url getAccessPoint() {
        return this.accessPoint;
    }
    
    @Override
    public ASN1Primitive toASN1Primitive() {
        return new DERSequence(new ASN1Encodable[] { this.selfSignedTLMCertificate, OEROptional.getInstance(this.successorTo), this.accessPoint });
    }
    
    public static Builder builder() {
        return new Builder();
    }
    
    public static class Builder
    {
        private EtsiTs103097Certificate selfSignedTLMCertificate;
        private EtsiTs103097Certificate successorTo;
        private Url accessPoint;
        
        public Builder setSelfSignedTLMCertificate(final EtsiTs103097Certificate selfSignedTLMCertificate) {
            this.selfSignedTLMCertificate = selfSignedTLMCertificate;
            return this;
        }
        
        public Builder setSuccessorTo(final EtsiTs103097Certificate successorTo) {
            this.successorTo = successorTo;
            return this;
        }
        
        public Builder setAccessPoint(final Url accessPoint) {
            this.accessPoint = accessPoint;
            return this;
        }
        
        public TlmEntry createTlmEntry() {
            return new TlmEntry(this.selfSignedTLMCertificate, this.successorTo, this.accessPoint);
        }
    }
}
