001package org.apache.commons.ssl.org.bouncycastle.asn1.cmp;
002
003import java.util.Enumeration;
004
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence;
011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence;
012
013public class ErrorMsgContent
014    extends ASN1Object
015{
016    private PKIStatusInfo pkiStatusInfo;
017    private ASN1Integer errorCode;
018    private PKIFreeText errorDetails;
019
020    private ErrorMsgContent(ASN1Sequence seq)
021    {
022        Enumeration en = seq.getObjects();
023
024        pkiStatusInfo = PKIStatusInfo.getInstance(en.nextElement());
025
026        while (en.hasMoreElements())
027        {
028            Object o = en.nextElement();
029
030            if (o instanceof ASN1Integer)
031            {
032                errorCode = ASN1Integer.getInstance(o);
033            }
034            else
035            {
036                errorDetails = PKIFreeText.getInstance(o);
037            }
038        }
039    }
040
041    public static ErrorMsgContent getInstance(Object o)
042    {
043        if (o instanceof ErrorMsgContent)
044        {
045            return (ErrorMsgContent)o;
046        }
047
048        if (o != null)
049        {
050            return new ErrorMsgContent(ASN1Sequence.getInstance(o));
051        }
052
053        return null;
054    }
055
056    public ErrorMsgContent(PKIStatusInfo pkiStatusInfo)
057    {
058        this(pkiStatusInfo, null, null);
059    }
060
061    public ErrorMsgContent(
062        PKIStatusInfo pkiStatusInfo,
063        ASN1Integer errorCode,
064        PKIFreeText errorDetails)
065    {
066        if (pkiStatusInfo == null)
067        {
068            throw new IllegalArgumentException("'pkiStatusInfo' cannot be null");
069        }
070
071        this.pkiStatusInfo = pkiStatusInfo;
072        this.errorCode = errorCode;
073        this.errorDetails = errorDetails;
074    }
075
076    public PKIStatusInfo getPKIStatusInfo()
077    {
078        return pkiStatusInfo;
079    }
080
081    public ASN1Integer getErrorCode()
082    {
083        return errorCode;
084    }
085
086    public PKIFreeText getErrorDetails()
087    {
088        return errorDetails;
089    }
090
091    /**
092     * <pre>
093     * ErrorMsgContent ::= SEQUENCE {
094     *                        pKIStatusInfo          PKIStatusInfo,
095     *                        errorCode              INTEGER           OPTIONAL,
096     *                        -- implementation-specific error codes
097     *                        errorDetails           PKIFreeText       OPTIONAL
098     *                        -- implementation-specific error details
099     * }
100     * </pre>
101     * @return a basic ASN.1 object representation.
102     */
103    public ASN1Primitive toASN1Primitive()
104    {
105        ASN1EncodableVector v = new ASN1EncodableVector();
106
107        v.add(pkiStatusInfo);
108        addOptional(v, errorCode);
109        addOptional(v, errorDetails);
110
111        return new DERSequence(v);
112    }
113
114    private void addOptional(ASN1EncodableVector v, ASN1Encodable obj)
115    {
116        if (obj != null)
117        {
118            v.add(obj);
119        }
120    }
121}