| /* |
| ******************************************************************************* |
| * Copyright (C) 2008, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| */ |
| package com.ibm.icu.impl.javaspi.text; |
| |
| import java.text.DateFormat; |
| import java.text.spi.DateFormatProvider; |
| import java.util.Locale; |
| |
| import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider; |
| import com.ibm.icu.impl.jdkadapter.SimpleDateFormatICU; |
| |
| public class DateFormatProviderICU extends DateFormatProvider { |
| |
| private static final int NONE = -1; |
| |
| @Override |
| public DateFormat getDateInstance(int style, Locale locale) { |
| return getInstance(style, NONE, locale); |
| } |
| |
| @Override |
| public DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale) { |
| return getInstance(dateStyle, timeStyle, locale); |
| } |
| |
| @Override |
| public DateFormat getTimeInstance(int style, Locale locale) { |
| return getInstance(NONE, style, locale); |
| } |
| |
| @Override |
| public Locale[] getAvailableLocales() { |
| return ICULocaleServiceProvider.getAvailableLocales(); |
| } |
| |
| private DateFormat getInstance(int dstyle, int tstyle, Locale locale) { |
| com.ibm.icu.text.DateFormat icuDfmt; |
| Locale actual = ICULocaleServiceProvider.canonicalize(locale); |
| if (dstyle == NONE) { |
| icuDfmt = com.ibm.icu.text.DateFormat.getTimeInstance(tstyle, actual); |
| } else if (tstyle == NONE) { |
| icuDfmt = com.ibm.icu.text.DateFormat.getDateInstance(dstyle, actual); |
| } else { |
| icuDfmt = com.ibm.icu.text.DateFormat.getDateTimeInstance(dstyle, tstyle, actual); |
| } |
| if (!(icuDfmt instanceof com.ibm.icu.text.SimpleDateFormat)) { |
| // icuDfmt must be always SimpleDateFormat |
| return null; |
| } |
| |
| com.ibm.icu.text.DecimalFormatSymbols decfs = ICULocaleServiceProvider.getDecimalFormatSymbolsForLocale(actual); |
| if (decfs != null) { |
| com.ibm.icu.text.NumberFormat icuNfmt = icuDfmt.getNumberFormat(); |
| if (icuNfmt instanceof com.ibm.icu.text.DecimalFormat) { |
| ((com.ibm.icu.text.DecimalFormat)icuNfmt).setDecimalFormatSymbols(decfs); |
| } else if (icuNfmt instanceof com.ibm.icu.impl.DateNumberFormat) { |
| ((com.ibm.icu.impl.DateNumberFormat)icuNfmt).setZeroDigit(decfs.getDigit()); |
| } |
| icuDfmt.setNumberFormat(icuNfmt); |
| } |
| |
| return SimpleDateFormatICU.wrap((com.ibm.icu.text.SimpleDateFormat)icuDfmt); |
| } |
| } |