001package org.apache.commons.ssl.org.bouncycastle.asn1.x509.qualified;
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.ASN1Object;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier;
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
013/**
014 * The QCStatement object.
015 * <pre>
016 * QCStatement ::= SEQUENCE {
017 *   statementId        OBJECT IDENTIFIER,
018 *   statementInfo      ANY DEFINED BY statementId OPTIONAL} 
019 * </pre>
020 */
021
022public class QCStatement 
023    extends ASN1Object
024    implements ETSIQCObjectIdentifiers, RFC3739QCObjectIdentifiers
025{
026    ASN1ObjectIdentifier qcStatementId;
027    ASN1Encodable        qcStatementInfo;
028
029    public static QCStatement getInstance(
030        Object obj)
031    {
032        if (obj instanceof QCStatement)
033        {
034            return (QCStatement)obj;
035        }
036        if (obj != null)
037        {
038            return new QCStatement(ASN1Sequence.getInstance(obj));            
039        }
040        
041        return null;
042    }    
043    
044    private QCStatement(
045        ASN1Sequence seq)
046    {
047        Enumeration e = seq.getObjects();
048
049        // qcStatementId
050        qcStatementId = ASN1ObjectIdentifier.getInstance(e.nextElement());
051        // qcstatementInfo
052        if (e.hasMoreElements())
053        {
054            qcStatementInfo = (ASN1Encodable) e.nextElement();
055        }
056    }    
057    
058    public QCStatement(
059        ASN1ObjectIdentifier qcStatementId)
060    {
061        this.qcStatementId = qcStatementId;
062        this.qcStatementInfo = null;
063    }
064    
065    public QCStatement(
066        ASN1ObjectIdentifier qcStatementId,
067        ASN1Encodable       qcStatementInfo)
068    {
069        this.qcStatementId = qcStatementId;
070        this.qcStatementInfo = qcStatementInfo;
071    }    
072        
073    public ASN1ObjectIdentifier getStatementId()
074    {
075        return qcStatementId;
076    }
077    
078    public ASN1Encodable getStatementInfo()
079    {
080        return qcStatementInfo;
081    }
082
083    public ASN1Primitive toASN1Primitive()
084    {
085        ASN1EncodableVector seq = new ASN1EncodableVector();
086        seq.add(qcStatementId);       
087        
088        if (qcStatementInfo != null)
089        {
090            seq.add(qcStatementInfo);
091        }
092
093        return new DERSequence(seq);
094    }
095}