@Override public DateFormatSymbolsProvider getDateFormatSymbolsProvider() { if (dateFormatSymbolsProvider == null) { DateFormatSymbolsProvider provider = AccessController.doPrivileged( (PrivilegedAction<DateFormatSymbolsProvider>) () -> new DateFormatSymbolsProviderImpl( getAdapterType(), getLanguageTagSet("FormatData"))); synchronized (this) { if (dateFormatSymbolsProvider == null) { dateFormatSymbolsProvider = provider; } } } return dateFormatSymbolsProvider; }
/** * Gets the <code>DateFormatSymbols</code> instance for the specified * locale. This method provides access to <code>DateFormatSymbols</code> * instances for locales supported by the Java runtime itself as well * as for those supported by installed * {@link java.text.spi.DateFormatSymbolsProvider DateFormatSymbolsProvider} * implementations. * @param locale the given locale. * @return a <code>DateFormatSymbols</code> instance. * @exception NullPointerException if <code>locale</code> is null * @since 1.6 */ public static final DateFormatSymbols getInstance(Locale locale) { // Check whether a provider can provide an implementation that's closer // to the requested locale than what the Java runtime itself can provide. LocaleServiceProviderPool pool = LocaleServiceProviderPool.getPool(DateFormatSymbolsProvider.class); if (pool.hasProviders()) { DateFormatSymbols providersInstance = pool.getLocalizedObject( DateFormatSymbolsGetter.INSTANCE, locale); if (providersInstance != null) { return providersInstance; } } return new DateFormatSymbols(locale); }
private static DateFormatSymbols getProviderInstance(Locale locale) { LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(DateFormatSymbolsProvider.class, locale); DateFormatSymbolsProvider provider = adapter.getDateFormatSymbolsProvider(); DateFormatSymbols dfsyms = provider.getInstance(locale); if (dfsyms == null) { provider = LocaleProviderAdapter.forJRE().getDateFormatSymbolsProvider(); dfsyms = provider.getInstance(locale); } return dfsyms; }
@Override public DateFormatSymbolsProvider getDateFormatSymbolsProvider() { if (dateFormatSymbolsProvider == null) { DateFormatSymbolsProvider provider = new DateFormatSymbolsProviderImpl(getAdapterType(), getLanguageTagSet("FormatData")); synchronized (this) { if (dateFormatSymbolsProvider == null) { dateFormatSymbolsProvider = provider; } } } return dateFormatSymbolsProvider; }
public DateFormatSymbols getObject(DateFormatSymbolsProvider dateFormatSymbolsProvider, Locale locale, String key, Object... params) { assert params.length == 0; return dateFormatSymbolsProvider.getInstance(locale); }
private static DateFormatSymbols getProviderInstance(Locale locale) { DateFormatSymbols providersInstance = null; // Check whether a provider can provide an implementation that's closer // to the requested locale than what the Java runtime itself can provide. LocaleServiceProviderPool pool = LocaleServiceProviderPool.getPool(DateFormatSymbolsProvider.class); if (pool.hasProviders()) { providersInstance = pool.getLocalizedObject( DateFormatSymbolsGetter.INSTANCE, locale); } return providersInstance; }
/** * Return the DateFormatSymbols for the specified locale. This method return * DateFormatSymbols instances for locales supported by the Java runtime and * installed DateFormatSymbols implementations. * * @param locale * locale for the returned DateFormatSymbols instance * * @return an instance of DateFormatSymbols * * @exception NullPointerException * if locale is null * * @since 1.6 */ public static final DateFormatSymbols getInstance(Locale locale) { if (null == locale) { throw new NullPointerException(); } if (buildinLocales == null) { initBuildInLocales(com.ibm.icu.text.DateFormatSymbols .getAvailableLocales()); } if (buildinLocales.contains(locale)) { return new DateFormatSymbols(locale); } DateFormatSymbolsProvider provider = (DateFormatSymbolsProvider) LocaleServiceProviderLoader .getProviderByLocale(providersCache, locale, PROVIDER_CONFIGURATION_FILE_NAME); if (provider != null) { return provider.getInstance(locale); } // return DateFormatSymbols using default locale return new DateFormatSymbols(); }
private void initializeData(Locale desiredLocale) { locale = desiredLocale; // Copy values of a cached instance if any. SoftReference<DateFormatSymbols> ref = cachedInstances.get(locale); DateFormatSymbols dfs; if (ref != null && (dfs = ref.get()) != null) { copyMembers(dfs, this); return; } // Initialize the fields from the ResourceBundle for locale. LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(DateFormatSymbolsProvider.class, locale); // Avoid any potential recursions if (!(adapter instanceof ResourceBundleBasedAdapter)) { adapter = LocaleProviderAdapter.getResourceBundleBased(); } ResourceBundle resource = ((ResourceBundleBasedAdapter)adapter).getLocaleData().getDateFormatData(locale); // JRE and CLDR use different keys // JRE: Eras, short.Eras and narrow.Eras // CLDR: long.Eras, Eras and narrow.Eras if (resource.containsKey("Eras")) { eras = resource.getStringArray("Eras"); } else if (resource.containsKey("long.Eras")) { eras = resource.getStringArray("long.Eras"); } else if (resource.containsKey("short.Eras")) { eras = resource.getStringArray("short.Eras"); } months = resource.getStringArray("MonthNames"); shortMonths = resource.getStringArray("MonthAbbreviations"); ampms = resource.getStringArray("AmPmMarkers"); localPatternChars = resource.getString("DateTimePatternChars"); // Day of week names are stored in a 1-based array. weekdays = toOneBasedArray(resource.getStringArray("DayNames")); shortWeekdays = toOneBasedArray(resource.getStringArray("DayAbbreviations")); // Put a clone in the cache ref = new SoftReference<>((DateFormatSymbols)this.clone()); SoftReference<DateFormatSymbols> x = cachedInstances.putIfAbsent(locale, ref); if (x != null) { DateFormatSymbols y = x.get(); if (y == null) { // Replace the empty SoftReference with ref. cachedInstances.put(locale, ref); } } }
@Override public DateFormatSymbolsProvider getDateFormatSymbolsProvider() { return getLocaleServiceProvider(DateFormatSymbolsProvider.class); }
@Override public void addImpl(DateFormatSymbolsProvider impl) { for (Locale l : impl.getAvailableLocales()) { map.putIfAbsent(l, impl); } }
@Override public DateFormatSymbolsProvider getImpl(Locale locale) { return SPILocaleProviderAdapter.getImpl(map, locale); }
/** * Initializes this DateFormatSymbols with the locale data. This method uses * a cached DateFormatSymbols instance for the given locale if available. If * there's no cached one, this method creates an uninitialized instance and * populates its fields from the resource bundle for the locale, and caches * the instance. Note: zoneStrings isn't initialized in this method. */ private void initializeData(Locale locale) { SoftReference<DateFormatSymbols> ref = cachedInstances.get(locale); DateFormatSymbols dfs; if (ref == null || (dfs = ref.get()) == null) { if (ref != null) { // Remove the empty SoftReference cachedInstances.remove(locale, ref); } dfs = new DateFormatSymbols(false); // Initialize the fields from the ResourceBundle for locale. LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(DateFormatSymbolsProvider.class, locale); // Avoid any potential recursions if (!(adapter instanceof ResourceBundleBasedAdapter)) { adapter = LocaleProviderAdapter.getResourceBundleBased(); } ResourceBundle resource = ((ResourceBundleBasedAdapter)adapter).getLocaleData().getDateFormatData(locale); dfs.locale = locale; // JRE and CLDR use different keys // JRE: Eras, short.Eras and narrow.Eras // CLDR: long.Eras, Eras and narrow.Eras if (resource.containsKey("Eras")) { dfs.eras = resource.getStringArray("Eras"); } else if (resource.containsKey("long.Eras")) { dfs.eras = resource.getStringArray("long.Eras"); } else if (resource.containsKey("short.Eras")) { dfs.eras = resource.getStringArray("short.Eras"); } dfs.months = resource.getStringArray("MonthNames"); dfs.shortMonths = resource.getStringArray("MonthAbbreviations"); dfs.ampms = resource.getStringArray("AmPmMarkers"); dfs.localPatternChars = resource.getString("DateTimePatternChars"); // Day of week names are stored in a 1-based array. dfs.weekdays = toOneBasedArray(resource.getStringArray("DayNames")); dfs.shortWeekdays = toOneBasedArray(resource.getStringArray("DayAbbreviations")); // Put dfs in the cache ref = new SoftReference<>(dfs); SoftReference<DateFormatSymbols> x = cachedInstances.putIfAbsent(locale, ref); if (x != null) { DateFormatSymbols y = x.get(); if (y == null) { // Replace the empty SoftReference with ref. cachedInstances.replace(locale, x, ref); } else { ref = x; dfs = y; } } // If the bundle's locale isn't the target locale, put another cache // entry for the bundle's locale. Locale bundleLocale = resource.getLocale(); if (!bundleLocale.equals(locale)) { SoftReference<DateFormatSymbols> z = cachedInstances.putIfAbsent(bundleLocale, ref); if (z != null && z.get() == null) { cachedInstances.replace(bundleLocale, z, ref); } } } // Copy the field values from dfs to this instance. copyMembers(dfs, this); }