1aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
4aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/*
5aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
6aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Copyright (C) 2015, International Business Machines Corporation and         *
7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * others. All Rights Reserved.                                                *
8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.format;
11aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
12aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.lang.reflect.Field;
13aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.lang.reflect.InvocationTargetException;
14aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.lang.reflect.Method;
15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.HashMap;
16aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.HashSet;
17aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Map;
18aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
19aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.math.BigDecimal;
20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.DecimalFormat;
21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.NumberFormat;
22aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.util.Currency;
23aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.util.ULocale;
24aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
25aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/**
26aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * A representation of a single NumberFormat specification test from a data driven test file.
27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * <p>
28aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * The purpose of this class is to hide the details of the data driven test file from the
29aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * main testing code.
30aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * <p>
31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * This class contains fields describing an attribute of the test that may or may
32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * not be set. The name of each attribute corresponds to the name used in the
33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * data driven test file.
34aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * <p>
35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * <b>Adding new attributes</b>
36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * <p>
37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Each attribute name is lower case. Moreover, for each attribute there is also a
38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * setXXX method for that attribute that is used to initialize the attribute from a
39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * String value read from the data file. For example, there is a setLocale(String) method
40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * for the locale attribute and a setCurrency(String) method for the currency attribute.
41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * In general, for an attribute named abcd, the setter will be setAbcd(String).
42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * This naming rule must be strictly followed or else the test runner will not know how to
43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * initialize instances of this class.
44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * <p>
45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * In addition each attribute is listed in the fieldOrdering static array which specifies
46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * The order that attributes are printed whenever there is a test failure.
47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * <p>
48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * To add a new attribute, first create a public field for it.
49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Next, add the attribute name to the fieldOrdering array.
50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Finally, create a setter method for it.
51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *
52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * @author rocketman
53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
54f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertpublic class NumberFormatTestData {
55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * The locale.
58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public ULocale locale = null;
60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * The currency.
63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Currency currency = null;
65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * The pattern to initialize the formatter, for example 0.00"
68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String pattern = null;
70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * The value to format as a string. For example 1234.5 would be "1234.5"
73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String format = null;
75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * The formatted value.
78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String output = null;
80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * Field for arbitrary comments.
83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String comment = null;
85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer minIntegerDigits = null;
87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer maxIntegerDigits = null;
88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer minFractionDigits = null;
89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer maxFractionDigits = null;
90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer minGroupingDigits = null;
91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer useSigDigits = null;
92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer minSigDigits = null;
93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer maxSigDigits = null;
94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer useGrouping = null;
95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer multiplier = null;
96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Double roundingIncrement = null;
97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer formatWidth = null;
98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String padCharacter = null;
99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer useScientific = null;
100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer grouping = null;
101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer grouping2 = null;
102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer roundingMode = null;
103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Currency.CurrencyUsage currencyUsage = null;
104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer minimumExponentDigits = null;
105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer exponentSignAlwaysShown = null;
106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer decimalSeparatorAlwaysShown = null;
107aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer padPosition = null;
108aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String positivePrefix = null;
109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String positiveSuffix = null;
110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String negativePrefix = null;
111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String negativeSuffix = null;
112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String localizedPattern = null;
113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String toPattern = null;
114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String toLocalizedPattern = null;
115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer style = null;
116aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String parse = null;
117aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer lenient = null;
118aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String plural = null;
119aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer parseIntegerOnly = null;
120aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer decimalPatternMatchRequired = null;
121aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public Integer parseNoExponent = null;
122aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String outputCurrency = null;
123aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
124aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
125aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
126aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
127aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * nothing or empty means that test ought to work for both C and JAVA;
128aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * "C" means test is known to fail in C. "J" means test is known to fail in JAVA.
129aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * "CJ" means test is known to fail for both languages.
130aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
131aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String breaks = null;
132aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
133aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static Map<String, Integer> roundingModeMap =
134aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            new HashMap<String, Integer>();
135aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
136aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    static {
137aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingModeMap.put("ceiling", BigDecimal.ROUND_CEILING);
138aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingModeMap.put("floor", BigDecimal.ROUND_FLOOR);
139aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingModeMap.put("down", BigDecimal.ROUND_DOWN);
140aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingModeMap.put("up", BigDecimal.ROUND_UP);
141aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingModeMap.put("halfEven", BigDecimal.ROUND_HALF_EVEN);
142aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingModeMap.put("halfDown", BigDecimal.ROUND_HALF_DOWN);
143aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingModeMap.put("halfUp", BigDecimal.ROUND_HALF_UP);
144aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingModeMap.put("unnecessary", BigDecimal.ROUND_UNNECESSARY);
145aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
146aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
147aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static Map<String, Currency.CurrencyUsage> currencyUsageMap =
148aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            new HashMap<String, Currency.CurrencyUsage>();
149aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
150aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    static {
151aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        currencyUsageMap.put("standard", Currency.CurrencyUsage.STANDARD);
152aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        currencyUsageMap.put("cash", Currency.CurrencyUsage.CASH);
153aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
154aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
155aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static Map<String, Integer> padPositionMap =
156aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            new HashMap<String, Integer>();
157aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
158aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    static {
159aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // TODO: Fix so that it doesn't depend on DecimalFormat.
160aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        padPositionMap.put("beforePrefix", DecimalFormat.PAD_BEFORE_PREFIX);
161aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        padPositionMap.put("afterPrefix", DecimalFormat.PAD_AFTER_PREFIX);
162aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        padPositionMap.put("beforeSuffix", DecimalFormat.PAD_BEFORE_SUFFIX);
163aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        padPositionMap.put("afterSuffix", DecimalFormat.PAD_AFTER_SUFFIX);
164aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
165aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
166aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static Map<String, Integer> formatStyleMap =
167aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            new HashMap<String, Integer>();
168aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
169aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    static {
170aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        formatStyleMap.put("decimal", NumberFormat.NUMBERSTYLE);
171aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        formatStyleMap.put("currency", NumberFormat.CURRENCYSTYLE);
172aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        formatStyleMap.put("percent", NumberFormat.PERCENTSTYLE);
173aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        formatStyleMap.put("scientific", NumberFormat.SCIENTIFICSTYLE);
174aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        formatStyleMap.put("currencyIso", NumberFormat.ISOCURRENCYSTYLE);
175aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        formatStyleMap.put("currencyPlural", NumberFormat.PLURALCURRENCYSTYLE);
176aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        formatStyleMap.put("currencyAccounting", NumberFormat.ACCOUNTINGCURRENCYSTYLE);
177aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        formatStyleMap.put("cashCurrency", NumberFormat.CASHCURRENCYSTYLE);
178aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
179aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
180aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // Add any new fields here. On test failures, fields are printed in the same order they
181aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // appear here.
182aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static String[] fieldOrdering = {
183aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "locale",
184aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "currency",
185aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "pattern",
186aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "format",
187aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "output",
188aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "comment",
189aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "minIntegerDigits",
190aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "maxIntegerDigits",
191aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "minFractionDigits",
192aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "maxFractionDigits",
193aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "minGroupingDigits",
194aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "breaks",
195aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "useSigDigits",
196aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "minSigDigits",
197aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "maxSigDigits",
198aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "useGrouping",
199aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "multiplier",
200aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "roundingIncrement",
201aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "formatWidth",
202aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "padCharacter",
203aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "useScientific",
204aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "grouping",
205aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "grouping2",
206aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "roundingMode",
207aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "currencyUsage",
208aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "minimumExponentDigits",
209aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "exponentSignAlwaysShown",
210aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "decimalSeparatorAlwaysShown",
211aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "padPosition",
212aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "positivePrefix",
213aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "positiveSuffix",
214aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "negativePrefix",
215aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "negativeSuffix",
216aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "localizedPattern",
217aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "toPattern",
218aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "toLocalizedPattern",
219aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "style",
220aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "parse",
221aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "lenient",
222aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "plural",
223aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "parseIntegerOnly",
224aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "decimalPatternMatchRequired",
225aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "parseNoExponent",
226aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        "outputCurrency"
227aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    };
228aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
229aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    static {
230aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        HashSet<String> set = new HashSet<String>();
231aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (String s : fieldOrdering) {
232aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (!set.add(s)) {
233aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                throw new ExceptionInInitializerError(s + "is a duplicate field.");
234aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
235aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
236aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
237aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
238aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static <T> T fromString(Map<String, T> map, String key) {
239aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        T value = map.get(key);
240aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (value == null) {
241aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            throw new IllegalArgumentException("Bad value: "+ key);
242aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
243aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        return value;
244aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
245aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
246aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // start field setters.
247aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // add setter for each new field in this block.
248aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
249aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setLocale(String value) {
250aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        locale = new ULocale(value);
251aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
252aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
253aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setCurrency(String value) {
254aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        currency = Currency.getInstance(value);
255aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
256aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
257aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setPattern(String value) {
258aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pattern = value;
259aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
260aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
261aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setFormat(String value) {
262aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        format = value;
263aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
264aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
265aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setOutput(String value) {
266aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        output = value;
267aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
268aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
269aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setComment(String value) {
270aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        comment = value;
271aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
272aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
273aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setMinIntegerDigits(String value) {
274aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        minIntegerDigits = Integer.valueOf(value);
275aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
276aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
277aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setMaxIntegerDigits(String value) {
278aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        maxIntegerDigits = Integer.valueOf(value);
279aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
280aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
281aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setMinFractionDigits(String value) {
282aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        minFractionDigits = Integer.valueOf(value);
283aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
284aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
285aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setMaxFractionDigits(String value) {
286aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        maxFractionDigits = Integer.valueOf(value);
287aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
288aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
289aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setMinGroupingDigits(String value) {
290aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        minGroupingDigits = Integer.valueOf(value);
291aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
292aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
293aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setBreaks(String value) {
294aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        breaks = value;
295aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
296aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
297aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setUseSigDigits(String value) {
298aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        useSigDigits = Integer.valueOf(value);
299aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
300aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
301aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setMinSigDigits(String value) {
302aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        minSigDigits = Integer.valueOf(value);
303aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
304aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
305aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setMaxSigDigits(String value) {
306aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        maxSigDigits = Integer.valueOf(value);
307aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
308aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
309aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setUseGrouping(String value) {
310aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        useGrouping = Integer.valueOf(value);
311aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
312aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
313aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setMultiplier(String value) {
314aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        multiplier = Integer.valueOf(value);
315aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
316aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
317aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setRoundingIncrement(String value) {
318aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingIncrement = Double.valueOf(value);
319aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
320aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
321aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setFormatWidth(String value) {
322aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        formatWidth = Integer.valueOf(value);
323aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
324aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
325aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setPadCharacter(String value) {
326aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        padCharacter = value;
327aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
328aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
329aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setUseScientific(String value) {
330aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        useScientific = Integer.valueOf(value);
331aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
332aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
333aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setGrouping(String value) {
334aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        grouping = Integer.valueOf(value);
335aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
336aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
337aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setGrouping2(String value) {
338aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        grouping2 = Integer.valueOf(value);
339aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
340aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
341aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setRoundingMode(String value) {
342aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        roundingMode = fromString(roundingModeMap, value);
343aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
344aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
345aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setCurrencyUsage(String value) {
346aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        currencyUsage = fromString(currencyUsageMap, value);
347aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
348aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
349aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setMinimumExponentDigits(String value) {
350aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        minimumExponentDigits = Integer.valueOf(value);
351aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
352aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
353aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setExponentSignAlwaysShown(String value) {
354aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        exponentSignAlwaysShown = Integer.valueOf(value);
355aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
356aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
357aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setDecimalSeparatorAlwaysShown(String value) {
358aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        decimalSeparatorAlwaysShown = Integer.valueOf(value);
359aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
360aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
361aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setPadPosition(String value) {
362aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        padPosition = fromString(padPositionMap, value);
363aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
364aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
365aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setPositivePrefix(String value) {
366aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        positivePrefix = value;
367aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
368aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
369aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setPositiveSuffix(String value) {
370aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        positiveSuffix = value;
371aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
372aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
373aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setNegativePrefix(String value) {
374aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        negativePrefix = value;
375aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
376aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
377aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setNegativeSuffix(String value) {
378aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        negativeSuffix = value;
379aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
380aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
381aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setLocalizedPattern(String value) {
382aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        localizedPattern = value;
383aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
384aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
385aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setToPattern(String value) {
386aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        toPattern = value;
387aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
388aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
389aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setToLocalizedPattern(String value) {
390aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        toLocalizedPattern = value;
391aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
392aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
393aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setStyle(String value) {
394aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        style = fromString(formatStyleMap, value);
395aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
396aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
397aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setParse(String value) {
398aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        parse = value;
399aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
400aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
401aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setLenient(String value) {
402aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        lenient = Integer.valueOf(value);
403aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
404aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
405aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setPlural(String value) {
406aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        plural = value;
407aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
408aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
409aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setParseIntegerOnly(String value) {
410aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        parseIntegerOnly = Integer.valueOf(value);
411aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
412aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
413aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setDecimalPatternMatchRequired(String value) {
414aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        decimalPatternMatchRequired = Integer.valueOf(value);
415aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
416aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
417aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setParseNoExponent(String value) {
418aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        parseNoExponent = Integer.valueOf(value);
419aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
420aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
421aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setOutputCurrency(String value) {
422aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        outputCurrency = value;
423aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
424aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
425aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // end field setters.
426aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
427aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // start of field clearers
428aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // Add clear methods that can be set in one test and cleared
429aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // in the next i.e the breaks field.
430aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
431aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void clearBreaks() {
432aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        breaks = null;
433aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
434aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
435aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void clearUseGrouping() {
436aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        useGrouping = null;
437aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
438aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
439aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void clearGrouping2() {
440aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        grouping2 = null;
441aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
442aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
443aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void clearGrouping() {
444aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        grouping = null;
445aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
446aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
447aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void clearMinGroupingDigits() {
448aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        minGroupingDigits = null;
449aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
450aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
451aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void clearUseScientific() {
452aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        useScientific = null;
453aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
454aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
455aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void clearDecimalSeparatorAlwaysShown() {
456aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        decimalSeparatorAlwaysShown = null;
457aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
458aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
459aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // end field clearers
460aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
461aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void setField(String fieldName, String valueString)
462aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            throws NoSuchMethodException {
463aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        Method m = getClass().getMethod(
464aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                fieldToSetter(fieldName), String.class);
465aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
466aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            m.invoke(this, valueString);
467aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalAccessException e) {
468aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            throw new RuntimeException(e);
469aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (InvocationTargetException e) {
470aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            throw new RuntimeException(e);
471aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
472aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
473aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
474aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void clearField(String fieldName)
475aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            throws NoSuchMethodException {
476aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        Method m = getClass().getMethod(fieldToClearer(fieldName));
477aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
478aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            m.invoke(this);
479aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalAccessException e) {
480aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            throw new RuntimeException(e);
481aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (InvocationTargetException e) {
482aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            throw new RuntimeException(e);
483aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
484aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
485aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
486aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public String toString() {
487aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        StringBuilder result = new StringBuilder();
488aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        result.append("{");
489aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        boolean first = true;
490aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (String fieldName : fieldOrdering) {
491aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            try {
492aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                Field field = getClass().getField(fieldName);
493aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                Object optionalValue = field.get(this);
494aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (optionalValue == null) {
495aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    continue;
496aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
497aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (!first) {
498aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    result.append(", ");
499aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
500aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                first = false;
501aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                result.append(fieldName);
502aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                result.append(": ");
503aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                result.append(optionalValue);
504aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            } catch (NoSuchFieldException e) {
505aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                throw new RuntimeException(e);
506aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            } catch (SecurityException e) {
507aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                throw new RuntimeException(e);
508aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            } catch (IllegalAccessException e) {
509aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                throw new RuntimeException(e);
510aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
511aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
512aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        result.append("}");
513aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        return result.toString();
514aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
515aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
516aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static String fieldToSetter(String fieldName) {
517aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        return "set"
518aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                + Character.toUpperCase(fieldName.charAt(0))
519aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                + fieldName.substring(1);
520aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
521aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
522aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static String fieldToClearer(String fieldName) {
523aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        return "clear"
524aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                + Character.toUpperCase(fieldName.charAt(0))
525aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                + fieldName.substring(1);
526aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
527aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
528aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin}
529