001/* 002 * CREDIT SUISSE IS WILLING TO LICENSE THIS SPECIFICATION TO YOU ONLY UPON THE CONDITION THAT YOU 003 * ACCEPT ALL OF THE TERMS CONTAINED IN THIS AGREEMENT. PLEASE READ THE TERMS AND CONDITIONS OF THIS 004 * AGREEMENT CAREFULLY. BY DOWNLOADING THIS SPECIFICATION, YOU ACCEPT THE TERMS AND CONDITIONS OF 005 * THE AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY IT, SELECT THE "DECLINE" BUTTON AT THE 006 * BOTTOM OF THIS PAGE. Specification: JSR-354 Money and Currency API ("Specification") Copyright 007 * (c) 2012-2013, Credit Suisse All rights reserved. 008 */ 009package org.javamoney.moneta.format.internal; 010 011import java.text.DecimalFormatSymbols; 012import java.util.Arrays; 013import java.util.Collection; 014import java.util.Locale; 015import java.util.logging.Logger; 016 017import javax.money.format.AmountFormatSymbols; 018import javax.money.spi.AmountFormatSymbolsProviderSpi; 019 020/** 021 * Implementation of {@link AmountFormatSymbolsProviderSpi} providing the 022 * symbols as defined by {@link DecimalFormatSymbols}. 023 * 024 * @author Anatole Tresch 025 */ 026public class DefaultAmountFormatSymbolsProviderSpi implements 027 AmountFormatSymbolsProviderSpi { 028 029 @Override 030 public AmountFormatSymbols getAmountFormatSymbols(Locale locale) { 031 try { 032 DecimalFormatSymbols syms = DecimalFormatSymbols 033 .getInstance(locale); 034 return new AmountFormatSymbols.Builder(locale) 035 .setDecimalSeparator(syms.getDecimalSeparator()) 036 .setDigit(syms.getDigit()) 037 .setExponentialSeparator(syms.getExponentSeparator()) 038 .setGroupingSeparator(syms.getGroupingSeparator()) 039 .setMinusSign(syms.getMinusSign()) 040 .setPatternSeparator(syms.getPatternSeparator()) 041 .setZeroDigit(syms.getZeroDigit()).create(); 042 } catch (Exception e) { 043 // not supported, ignore exception 044 Logger.getLogger(getClass().getName()).warning( 045 "Unsupported format locale: " + locale); 046 return null; 047 } 048 } 049 050 @Override 051 public Collection<Locale> getSupportedLocales() { 052 return Arrays.asList(DecimalFormatSymbols.getAvailableLocales()); 053 } 054 055}