1 /*
2 * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package sun.util.locale.provider;
27
28 import java.lang.ref.SoftReference;
29 import java.text.*;
30 import java.text.spi.DateFormatProvider;
31 import java.text.spi.DateFormatSymbolsProvider;
32 import java.text.spi.DecimalFormatSymbolsProvider;
33 import java.text.spi.NumberFormatProvider;
34 import java.util.Collections;
35 import java.util.Calendar;
36 import java.util.HashSet;
37 import java.util.Locale;
38 import java.util.Map;
39 import java.util.ResourceBundle.Control;
40 import java.util.Set;
41 import java.util.TimeZone;
42 import java.util.concurrent.ConcurrentHashMap;
43 import java.util.concurrent.ConcurrentMap;
44 import java.util.concurrent.atomic.AtomicReferenceArray;
45 import java.util.spi.CalendarDataProvider;
46 import java.util.spi.CalendarNameProvider;
47 import java.util.spi.CurrencyNameProvider;
48 import java.util.spi.LocaleNameProvider;
49 import java.util.spi.TimeZoneNameProvider;
50 import sun.text.spi.JavaTimeDateTimePatternProvider;
51 import sun.util.spi.CalendarProvider;
52
53 /**
54 * LocaleProviderAdapter implementation for the Mac OS X locale data
55 *
533 @Override
534 public int getMinimalDaysInFirstWeek(Locale locale) {
535 return getCalendarInt(locale.toLanguageTag(), CD_MINIMALDAYSINFIRSTWEEK);
536 }
537 };
538 }
539
540 public static CalendarNameProvider getCalendarNameProvider() {
541 return new CalendarNameProvider() {
542 @Override
543 public Locale[] getAvailableLocales() {
544 return getSupportedCalendarLocales();
545 }
546
547 @Override
548 public boolean isSupportedLocale(Locale locale) {
549 return isSupportedCalendarLocale(locale);
550 }
551
552 @Override
553 public String getDisplayName(String calType, int field, int value,
554 int style, Locale locale) {
555 return null;
556 }
557
558 @Override
559 public Map<String, Integer> getDisplayNames(String calType,
560 int field, int style, Locale locale) {
561 return null;
562 }
563 };
564 }
565
566 public static CalendarProvider getCalendarProvider() {
567 return new CalendarProvider() {
568 @Override
569 public Locale[] getAvailableLocales() {
570 return getSupportedCalendarLocales();
571 }
572
573 @Override
574 public boolean isSupportedLocale(Locale locale) {
575 return isSupportedCalendarLocale(locale);
576 }
577
578 @Override
579 public Calendar getInstance(TimeZone zone, Locale locale) {
580 return new Calendar.Builder()
581 .setLocale(locale)
884 private static native String[] getWeekdays(String langTag, String[] wdays);
885 private static native String[] getShortWeekdays(String langTag, String[] swdays);
886
887 // For DecimalFormatSymbolsProvider
888 private static native String getCurrencySymbol(String langTag, String currencySymbol);
889 private static native char getDecimalSeparator(String langTag, char decimalSeparator);
890 private static native char getGroupingSeparator(String langTag, char groupingSeparator);
891 private static native String getInfinity(String langTag, String infinity);
892 private static native String getInternationalCurrencySymbol(String langTag, String internationalCurrencySymbol);
893 private static native char getMinusSign(String langTag, char minusSign);
894 private static native char getMonetaryDecimalSeparator(String langTag, char monetaryDecimalSeparator);
895 private static native String getNaN(String langTag, String nan);
896 private static native char getPercent(String langTag, char percent);
897 private static native char getPerMill(String langTag, char perMill);
898 private static native char getZeroDigit(String langTag, char zeroDigit);
899 private static native String getExponentSeparator(String langTag, String exponent);
900
901 // For CalendarDataProvider
902 private static native int getCalendarInt(String langTag, int type);
903
904 // For Locale/CurrencyNameProvider
905 private static native String getDisplayString(String langTag, int key, String value);
906
907 // For TimeZoneNameProvider
908 private static native String getTimeZoneDisplayString(String langTag, int style, String value);
909 }
|
1 /*
2 * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package sun.util.locale.provider;
27
28 import java.lang.ref.SoftReference;
29 import java.text.*;
30 import java.text.spi.DateFormatProvider;
31 import java.text.spi.DateFormatSymbolsProvider;
32 import java.text.spi.DecimalFormatSymbolsProvider;
33 import java.text.spi.NumberFormatProvider;
34 import java.util.Collections;
35 import java.util.Calendar;
36 import java.util.HashMap;
37 import java.util.HashSet;
38 import java.util.Locale;
39 import java.util.Map;
40 import java.util.ResourceBundle.Control;
41 import java.util.Set;
42 import java.util.TimeZone;
43 import java.util.concurrent.ConcurrentHashMap;
44 import java.util.concurrent.ConcurrentMap;
45 import java.util.concurrent.atomic.AtomicReferenceArray;
46 import java.util.spi.CalendarDataProvider;
47 import java.util.spi.CalendarNameProvider;
48 import java.util.spi.CurrencyNameProvider;
49 import java.util.spi.LocaleNameProvider;
50 import java.util.spi.TimeZoneNameProvider;
51 import sun.text.spi.JavaTimeDateTimePatternProvider;
52 import sun.util.spi.CalendarProvider;
53
54 /**
55 * LocaleProviderAdapter implementation for the Mac OS X locale data
56 *
534 @Override
535 public int getMinimalDaysInFirstWeek(Locale locale) {
536 return getCalendarInt(locale.toLanguageTag(), CD_MINIMALDAYSINFIRSTWEEK);
537 }
538 };
539 }
540
541 public static CalendarNameProvider getCalendarNameProvider() {
542 return new CalendarNameProvider() {
543 @Override
544 public Locale[] getAvailableLocales() {
545 return getSupportedCalendarLocales();
546 }
547
548 @Override
549 public boolean isSupportedLocale(Locale locale) {
550 return isSupportedCalendarLocale(locale);
551 }
552
553 @Override
554 public String getDisplayName(String calendarType, int field,
555 int value, int style, Locale locale) {
556 String[] names = getCalendarDisplayStrings(locale.toLanguageTag(),
557 field, style);
558 if (names != null && value >= 0 && value < names.length) {
559 return names[value];
560 } else {
561 return null;
562 }
563 }
564
565 @Override
566 public Map<String, Integer> getDisplayNames(String calendarType,
567 int field, int style, Locale locale) {
568 Map<String, Integer> map = null;
569 String[] names = getCalendarDisplayStrings(locale.toLanguageTag(),
570 field, style);
571 if (names != null) {
572 map = new HashMap<>((int)Math.ceil(names.length / 0.75));
573 for (int value = 0; value < names.length; value++) {
574 if (names[value] != null) {
575 map.put(names[value], value);
576 }
577 }
578 map = map.isEmpty() ? null : map;
579 }
580 return map;
581 }
582 };
583 }
584
585 public static CalendarProvider getCalendarProvider() {
586 return new CalendarProvider() {
587 @Override
588 public Locale[] getAvailableLocales() {
589 return getSupportedCalendarLocales();
590 }
591
592 @Override
593 public boolean isSupportedLocale(Locale locale) {
594 return isSupportedCalendarLocale(locale);
595 }
596
597 @Override
598 public Calendar getInstance(TimeZone zone, Locale locale) {
599 return new Calendar.Builder()
600 .setLocale(locale)
903 private static native String[] getWeekdays(String langTag, String[] wdays);
904 private static native String[] getShortWeekdays(String langTag, String[] swdays);
905
906 // For DecimalFormatSymbolsProvider
907 private static native String getCurrencySymbol(String langTag, String currencySymbol);
908 private static native char getDecimalSeparator(String langTag, char decimalSeparator);
909 private static native char getGroupingSeparator(String langTag, char groupingSeparator);
910 private static native String getInfinity(String langTag, String infinity);
911 private static native String getInternationalCurrencySymbol(String langTag, String internationalCurrencySymbol);
912 private static native char getMinusSign(String langTag, char minusSign);
913 private static native char getMonetaryDecimalSeparator(String langTag, char monetaryDecimalSeparator);
914 private static native String getNaN(String langTag, String nan);
915 private static native char getPercent(String langTag, char percent);
916 private static native char getPerMill(String langTag, char perMill);
917 private static native char getZeroDigit(String langTag, char zeroDigit);
918 private static native String getExponentSeparator(String langTag, String exponent);
919
920 // For CalendarDataProvider
921 private static native int getCalendarInt(String langTag, int type);
922
923 // For CalendarNameProvider
924 private static native String[] getCalendarDisplayStrings(String langTag, int field, int style);
925
926 // For Locale/CurrencyNameProvider
927 private static native String getDisplayString(String langTag, int key, String value);
928
929 // For TimeZoneNameProvider
930 private static native String getTimeZoneDisplayString(String langTag, int style, String value);
931 }
|