001package org.apache.commons.ssl.org.bouncycastle.asn1.x509.qualified;
002
003import java.math.BigInteger;
004import java.util.Enumeration;
005
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
013/**
014 * The MonetaryValue object.
015 * <pre>
016 * MonetaryValue  ::=  SEQUENCE {
017 *       currency              Iso4217CurrencyCode,
018 *       amount               INTEGER, 
019 *       exponent             INTEGER }
020 * -- value = amount * 10^exponent
021 * </pre>
022 */
023public class MonetaryValue 
024    extends ASN1Object
025{
026    private Iso4217CurrencyCode currency;
027    private ASN1Integer         amount;
028    private ASN1Integer         exponent;
029        
030    public static MonetaryValue getInstance(
031        Object obj)
032    {
033        if (obj instanceof MonetaryValue)
034        {
035            return (MonetaryValue)obj;
036        }
037
038        if (obj != null)
039        {
040            return new MonetaryValue(ASN1Sequence.getInstance(obj));            
041        }
042        
043        return null;
044    }
045        
046    private MonetaryValue(
047        ASN1Sequence seq)
048    {
049        Enumeration e = seq.getObjects();    
050        // currency
051        currency = Iso4217CurrencyCode.getInstance(e.nextElement());
052        // hashAlgorithm
053        amount = ASN1Integer.getInstance(e.nextElement());
054        // exponent
055        exponent = ASN1Integer.getInstance(e.nextElement());            
056    }
057        
058    public MonetaryValue(
059        Iso4217CurrencyCode currency, 
060        int                 amount, 
061        int                 exponent)
062    {    
063        this.currency = currency;
064        this.amount = new ASN1Integer(amount);
065        this.exponent = new ASN1Integer(exponent);
066    }                    
067             
068    public Iso4217CurrencyCode getCurrency()
069    {
070        return currency;
071    }
072        
073    public BigInteger getAmount()
074    {
075        return amount.getValue();
076    }
077        
078    public BigInteger getExponent()
079    {
080        return exponent.getValue();
081    }   
082    
083    public ASN1Primitive toASN1Primitive()
084    {
085        ASN1EncodableVector seq = new ASN1EncodableVector();
086        seq.add(currency);
087        seq.add(amount);
088        seq.add(exponent); 
089        
090        return new DERSequence(seq);
091    }
092}