/**
  * Parses a currency from the given {@link ParseContext}. Depending on the current {@link
  * CurrencyStyle} it interprets the next non empty token, either as
  *
  * <ul>
  *   <li>currency code
  *   <li>currency symbol
  * </ul>
  *
  * Parsing of localized currency names or numeric code is not supported.
  *
  * @throws UnsupportedOperationException if the {@link CurrencyStyle} is configured to us currency
  *     names, or numeric codes for formatting.
  */
 @Override
 public void parse(ParseContext context) throws MonetaryParseException {
   String token = context.lookupNextToken();
   while (token != null) {
     if (token.trim().isEmpty()) {
       context.consume(token);
       token = context.lookupNextToken();
       continue;
     }
     break;
   }
   try {
     CurrencyUnit cur = null;
     switch (style) {
       case CODE:
         cur = MonetaryCurrencies.getCurrency(token);
         context.consume(token);
         break;
       case SYMBOL:
         if (token.startsWith("$")) {
           cur = MonetaryCurrencies.getCurrency("USD");
           context.consume("$");
         } else if (token.startsWith("€")) {
           cur = MonetaryCurrencies.getCurrency("EUR");
           context.consume("€");
         } else if (token.startsWith("£")) {
           cur = MonetaryCurrencies.getCurrency("GBP");
           context.consume("£");
         }
         cur = MonetaryCurrencies.getCurrency(token);
         context.consume(token);
         break;
       case NAME:
       case NUMERIC_CODE:
       default:
         throw new UnsupportedOperationException("Not yet implemented");
     }
     if (cur != null) {
       context.setParsedCurrency(cur);
     }
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
 @Override
 public CurrencyUnit parse(String text, Locale locale) {
   return MonetaryCurrencies.getCurrency(text);
 }
/** This enumerated class provides keys for the currency symbols and values. */
public enum CurrencySymbolKeys implements CurrencySupplier {
  // Declared in order they should appear in a chooser.
  /** No symbol. */
  NONE(I18NHelper.getSharedProperty("none"), "", MonetaryCurrencies.getCurrency("XXX")),
  /** The Euro. */
  EURO("\u20ac ", MonetaryCurrencies.getCurrency("EUR")),
  /** The US Dollar. */
  DOLLAR("$ ", MonetaryCurrencies.getCurrency("USD")),
  /** The English Pound. */
  POUND("\u00a3 ", MonetaryCurrencies.getCurrency("GBP")),
  /** The South African Rand. */
  RAND("R ", MonetaryCurrencies.getCurrency("ZAR")),
  /** The Brazilian Real. */
  REAL("R$ ", MonetaryCurrencies.getCurrency("BRL")),
  /** The Russian Ruble. */
  RUBLE(" \u0440.", MonetaryCurrencies.getCurrency("RUB"));

  //////////////////////////////////////////////////////////////////////////////
  // Start of public methods.
  //////////////////////////////////////////////////////////////////////////////

  /**
   * This method returns a string for the enum constant.
   *
   * @return A string.
   */
  public String getSymbol() {
    return itsSymbol;
  }

  /**
   * This method returns a currency unit for the enum constant.
   *
   * @return A currency.
   */
  public CurrencyUnit getCurrency() {
    return itsCurrency;
  }

  /**
   * This method returns the currency symbol.
   *
   * @return The currency symbol.
   */
  @Override
  public String toString() {
    return itsIdentifier;
  }

  //////////////////////////////////////////////////////////////////////////////
  // Start of private methods.
  //////////////////////////////////////////////////////////////////////////////

  private CurrencySymbolKeys(String symbol, CurrencyUnit currency) {
    this(symbol, symbol, currency);
  }

  private CurrencySymbolKeys(String identifier, String symbol, CurrencyUnit currency) {
    itsIdentifier = identifier;
    itsSymbol = symbol;
    itsCurrency = currency;
  }

  //////////////////////////////////////////////////////////////////////////////
  // Start of class members.
  //////////////////////////////////////////////////////////////////////////////

  private final String itsIdentifier;
  private final String itsSymbol;
  private final CurrencyUnit itsCurrency;
}