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}