001/* 002 * CREDIT SUISSE IS WILLING TO LICENSE THIS SPECIFICATION TO YOU ONLY UPON THE 003 * CONDITION THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS AGREEMENT. 004 * PLEASE READ THE TERMS AND CONDITIONS OF THIS AGREEMENT CAREFULLY. BY 005 * DOWNLOADING THIS SPECIFICATION, YOU ACCEPT THE TERMS AND CONDITIONS OF THE 006 * AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY IT, SELECT THE "DECLINE" 007 * BUTTON AT THE BOTTOM OF THIS PAGE. 008 * 009 * Specification: JSR-354 Money and Currency API ("Specification") 010 * 011 * Copyright (c) 2012-2013, Credit Suisse All rights reserved. 012 */ 013package org.javamoney.moneta.internal; 014 015import java.util.Currency; 016import java.util.HashMap; 017import java.util.Locale; 018import java.util.Map; 019import java.util.logging.Level; 020import java.util.logging.Logger; 021 022import javax.money.CurrencyUnit; 023import javax.money.spi.CurrencyProviderSpi; 024 025/** 026 * Default implementation of a {@link CurrencyUnit} based on the using the JDK's 027 * {@link MoneyCurrency}, but also extendable using a {@link Builder} instance. 028 * 029 * @version 0.5.1 030 * @author Anatole Tresch 031 * @author Werner Keil 032 */ 033public class JDKCurrencyProvider implements CurrencyProviderSpi { 034 035 /** Internal shared cache of {@link MoneyCurrency} instances. */ 036 private static final Map<String, CurrencyUnit> CACHED = new HashMap<String, CurrencyUnit>(); 037 038 public JDKCurrencyProvider() { 039 for (Currency jdkCurrency : Currency.getAvailableCurrencies()) { 040 CurrencyUnit cu = new JDKCurrencyAdapter(jdkCurrency); 041 CACHED.put(cu.getCurrencyCode(), cu); 042 } 043 } 044 045 @Override 046 public CurrencyUnit getCurrencyUnit(String currencyCode) { 047 return CACHED.get(currencyCode); 048 } 049 050 @Override 051 public CurrencyUnit getCurrencyUnit(Locale locale) { 052 Currency cur = null; 053 try { 054 cur = Currency.getInstance(locale); 055 if(cur!=null){ 056 return getCurrencyUnit(cur.getCurrencyCode()); 057 } 058 } catch (Exception e) { 059 if (Logger.getLogger(getClass().getName()).isLoggable(Level.FINEST)) { 060 Logger.getLogger(getClass().getName()).finest( 061 "No currency for locale found: " + locale); 062 } 063 } 064 return null; 065 } 066 067}