001 package data.ooimpl;
002
003 import java.text.NumberFormat;
004 import java.text.ParseException;
005
006 import java.util.Locale;
007
008 import data.*;
009
010 /**
011 * Pure Java implementation of the {@link Currency} interface.
012 *
013 * @author Steffen Zschaler
014 * @version 2.0 19/08/1999
015 * @since v2.0
016 */
017 public class CurrencyImpl extends CatalogImpl implements Currency {
018
019 /**
020 * Tool used to format and parse currency values.
021 *
022 * @serial
023 */
024 private NumberFormat m_nfFormatter;
025
026 /**
027 * Create a new, initially empty CurrencyImpl for the given locale.
028 *
029 * @param sName the name of the currency to create.
030 * @param l the locale that determines how currency values will be formatted.
031 */
032 public CurrencyImpl(String sName, Locale l) {
033 super(sName);
034
035 m_nfFormatter = NumberFormat.getCurrencyInstance(l);
036 }
037
038 /**
039 * Create a new CurrencyImpl with a default locale of {@link Locale#GERMANY} and fill it.
040 *
041 * <p>The currency will already contain all denominations that are available in the DEM currency.</p>
042 *
043 * @param sName the name of the new currency.
044 */
045 public CurrencyImpl(String sName) {
046 this(sName, Locale.GERMANY);
047
048 // changed by Thomas Medack 06.05.2001
049 add(new CurrencyItemImpl(PFENNIG_STCK_1, m_anDenominations[0]), null);
050 add(new CurrencyItemImpl(PFENNIG_STCK_2, m_anDenominations[1]), null);
051 add(new CurrencyItemImpl(PFENNIG_STCK_5, m_anDenominations[2]), null);
052 add(new CurrencyItemImpl(PFENNIG_STCK_10, m_anDenominations[3]), null);
053 add(new CurrencyItemImpl(PFENNIG_STCK_50, m_anDenominations[4]), null);
054 add(new CurrencyItemImpl(DM_STCK_1, m_anDenominations[5]), null);
055 add(new CurrencyItemImpl(DM_STCK_2, m_anDenominations[6]), null);
056 add(new CurrencyItemImpl(DM_STCK_5, m_anDenominations[7]), null);
057 add(new CurrencyItemImpl(DM_SCHEIN_5, m_anDenominations[8]), null);
058 add(new CurrencyItemImpl(DM_STCK_10, m_anDenominations[9]), null);
059 add(new CurrencyItemImpl(DM_SCHEIN_10, m_anDenominations[10]), null);
060 add(new CurrencyItemImpl(DM_SCHEIN_20, m_anDenominations[11]), null);
061 add(new CurrencyItemImpl(DM_SCHEIN_50, m_anDenominations[12]), null);
062 add(new CurrencyItemImpl(DM_SCHEIN_100, m_anDenominations[13]), null);
063 add(new CurrencyItemImpl(DM_SCHEIN_200, m_anDenominations[14]), null);
064 add(new CurrencyItemImpl(DM_SCHEIN_500, m_anDenominations[15]), null);
065 add(new CurrencyItemImpl(DM_SCHEIN_1000, m_anDenominations[16]), null);
066 }
067
068 /**
069 * Return a String representation of the given NumberValue assuming it is a value given in the smallest unit
070 * of this currency.
071 *
072 * @param nv the value to be rendered.
073 *
074 * @return the formatted String representation
075 *
076 * @override Never
077 */
078 public String toString(NumberValue nv) {
079 int j = 1;
080 for (int i = 1; i <= m_nfFormatter.getMinimumFractionDigits(); i++) {
081 j *= 10;
082 }
083
084 return m_nfFormatter.format(nv.getValue().doubleValue() / j);
085 }
086
087 /**
088 * Try to parse the given String as a currency value in the currency's associated format.
089 *
090 * @param s the text to be parsed.
091 *
092 * @return the value that was identified in the text, given in the smallest unit of this currency.
093 *
094 * @override Never
095 *
096 * @exception ParseException if the given String could not be interpreted as a currency value.
097 */
098 public NumberValue parse(String s) throws ParseException {
099 int j = 1;
100 for (int i = 1; i <= m_nfFormatter.getMinimumFractionDigits(); i++) {
101 j *= 10;
102 }
103
104 // 10/27/2000-sz9: Fixed to use round instead a simple cast to int.
105 return new IntegerValue((int)java.lang.Math.round(m_nfFormatter.parse(s).doubleValue() * j));
106 }
107
108 // Fields added by Thomas Medack 06.05.2001
109
110 /**
111 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
112 * <p>1-Pfennig-Stueck</p>
113 */
114 public static String PFENNIG_STCK_1 = "1-Pfennig-Stueck";
115 /**
116 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
117 * <p>2-Pfennig-Stueck</p>
118 */
119 public static String PFENNIG_STCK_2 = "2-Pfennig-Stueck";
120 /**
121 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
122 * <p>5-Pfennig-Stueck</p>
123 */
124 public static String PFENNIG_STCK_5 = "5-Pfennig-Stueck";
125 /**
126 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
127 * <p>10-Pfennig-Stueck</p>
128 */
129 public static String PFENNIG_STCK_10 = "10-Pfennig-Stueck";
130 /**
131 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
132 * <p>50-Pfennig-Stueck</p>
133 */
134 public static String PFENNIG_STCK_50 = "50-Pfennig-Stueck";
135 /**
136 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
137 * <p>1-Mark-Stueck</p>
138 */
139 public static String DM_STCK_1 = "1-DM-Stueck";
140 /**
141 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
142 * <p>2-Mark-Stueck</p>
143 */
144 public static String DM_STCK_2 = "2-DM-Stueck";
145 /**
146 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
147 * <p>5-Mark-Stueck</p>
148 */
149 public static String DM_STCK_5 = "5-DM-Stueck";
150 /**
151 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
152 * <p>5-Mark-Schein</p>
153 */
154 public static String DM_SCHEIN_5 = "5-DM-Schein";
155 /**
156 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
157 * <p>10-Mark-Stueck</p>
158 */
159 public static String DM_STCK_10 = "10-DM-Stueck";
160 /**
161 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
162 * <p>10-Mark-Schein</p>
163 */
164 public static String DM_SCHEIN_10 = "10-DM-Schein";
165 /**
166 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
167 * <p>20-Mark-Schein</p>
168 */
169 public static String DM_SCHEIN_20 = "20-DM-Schein";
170 /**
171 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
172 * <p>50-Mark-Schein</p>
173 */
174 public static String DM_SCHEIN_50 = "50-DM-Schein";
175 /**
176 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
177 * <p>100-Mark-Schein</p>
178 */
179 public static String DM_SCHEIN_100 = "100-DM-Schein";
180 /**
181 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
182 * <p>200-Mark-Schein</p>
183 */
184 public static String DM_SCHEIN_200 = "200-DM-Schein";
185 /**
186 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
187 * <p>500-Mark-Schein</p>
188 */
189 public static String DM_SCHEIN_500 = "500-DM-Schein";
190 /**
191 * Field string represents the mainkey for an added <code>CurrencyItemImpl</code>.
192 * <p>1000-Mark-Schein</p>
193 */
194 public static String DM_SCHEIN_1000 = "1000-DM-Schein";
195
196 // changed by Thomas Medack 06.05.2001
197 private int[] m_anDenominations = {
198 1, 2, 5, 10, 50, 100, 200, 500, 500, 1000, 1000, 2000, 5000, 10000, 20000, 50000, 100000
199 };
200 }