1 package org.bouncycastle.asn1.x509.qualified; 2 3 import org.bouncycastle.asn1.ASN1Choice; 4 import org.bouncycastle.asn1.ASN1Encodable; 5 import org.bouncycastle.asn1.DEREncodable; 6 import org.bouncycastle.asn1.DERInteger; 7 import org.bouncycastle.asn1.DERObject; 8 import org.bouncycastle.asn1.DERPrintableString; 9 10 /** 11 * The Iso4217CurrencyCode object. 12 * <pre> 13 * Iso4217CurrencyCode ::= CHOICE { 14 * alphabetic PrintableString (SIZE 3), --Recommended 15 * numeric INTEGER (1..999) } 16 * -- Alphabetic or numeric currency code as defined in ISO 4217 17 * -- It is recommended that the Alphabetic form is used 18 * </pre> 19 */ 20 public class Iso4217CurrencyCode 21 extends ASN1Encodable 22 implements ASN1Choice 23 { 24 final int ALPHABETIC_MAXSIZE = 3; 25 final int NUMERIC_MINSIZE = 1; 26 final int NUMERIC_MAXSIZE = 999; 27 28 DEREncodable obj; 29 int numeric; 30 31 public static Iso4217CurrencyCode getInstance( 32 Object obj) 33 { 34 if (obj == null || obj instanceof Iso4217CurrencyCode) 35 { 36 return (Iso4217CurrencyCode)obj; 37 } 38 39 if (obj instanceof DERInteger) 40 { 41 DERInteger numericobj = DERInteger.getInstance(obj); 42 int numeric = numericobj.getValue().intValue(); 43 return new Iso4217CurrencyCode(numeric); 44 } 45 else 46 if (obj instanceof DERPrintableString) 47 { 48 DERPrintableString alphabetic = DERPrintableString.getInstance(obj); 49 return new Iso4217CurrencyCode(alphabetic.getString()); 50 } 51 throw new IllegalArgumentException("unknown object in getInstance"); 52 } 53 54 public Iso4217CurrencyCode( 55 int numeric) 56 { 57 if (numeric > NUMERIC_MAXSIZE || numeric < NUMERIC_MINSIZE) 58 { 59 throw new IllegalArgumentException("wrong size in numeric code : not in (" +NUMERIC_MINSIZE +".."+ NUMERIC_MAXSIZE +")"); 60 } 61 obj = new DERInteger(numeric); 62 } 63 64 public Iso4217CurrencyCode( 65 String alphabetic) 66 { 67 if (alphabetic.length() > ALPHABETIC_MAXSIZE) 68 { 69 throw new IllegalArgumentException("wrong size in alphabetic code : max size is " + ALPHABETIC_MAXSIZE); 70 } 71 obj = new DERPrintableString(alphabetic); 72 } 73 74 public boolean isAlphabetic() 75 { 76 return obj instanceof DERPrintableString; 77 } 78 79 public String getAlphabetic() 80 { 81 return ((DERPrintableString)obj).getString(); 82 } 83 84 public int getNumeric() 85 { 86 return ((DERInteger)obj).getValue().intValue(); 87 } 88 89 public DERObject toASN1Object() 90 { 91 return obj.getDERObject(); 92 } 93 } 94