1 /* 2 * Copyright (c) 2012, 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 static java.util.Calendar.*; 29 import java.util.Locale; 30 import java.util.Map; 31 import java.util.spi.CalendarDataProvider; 32 import java.util.spi.CalendarNameProvider; 33 34 /** 35 * {@code CalendarDataUtility} is a utility class for calling the 36 * {@link CalendarDataProvider} methods. 37 * 38 * @author Masayoshi Okutsu 39 * @author Naoto Sato 40 */ 41 public class CalendarDataUtility { 42 public final static String FIRST_DAY_OF_WEEK = "firstDayOfWeek"; 43 public final static String MINIMAL_DAYS_IN_FIRST_WEEK = "minimalDaysInFirstWeek"; 44 45 // No instantiation 46 private CalendarDataUtility() { 47 } 48 49 public static int retrieveFirstDayOfWeek(Locale locale) { 50 LocaleServiceProviderPool pool = 51 LocaleServiceProviderPool.getPool(CalendarDataProvider.class); 52 Integer value = pool.getLocalizedObject(CalendarWeekParameterGetter.INSTANCE, 53 locale, FIRST_DAY_OF_WEEK); 54 return (value != null && (value >= SUNDAY && value <= SATURDAY)) ? value : SUNDAY; 55 } 56 57 public static int retrieveMinimalDaysInFirstWeek(Locale locale) { 58 LocaleServiceProviderPool pool = 59 LocaleServiceProviderPool.getPool(CalendarDataProvider.class); 60 Integer value = pool.getLocalizedObject(CalendarWeekParameterGetter.INSTANCE, 61 locale, MINIMAL_DAYS_IN_FIRST_WEEK); 62 return (value != null && (value >= 1 && value <= 7)) ? value : 1; 63 } 64 65 public static String retrieveFieldValueName(String id, int field, int value, int style, Locale locale) { 66 LocaleServiceProviderPool pool = 67 LocaleServiceProviderPool.getPool(CalendarNameProvider.class); 68 return pool.getLocalizedObject(CalendarFieldValueNameGetter.INSTANCE, locale, id, 69 field, value, style); 70 } 71 72 public static Map<String, Integer> retrieveFieldValueNames(String id, int field, int style, Locale locale) { 73 LocaleServiceProviderPool pool = 74 LocaleServiceProviderPool.getPool(CalendarNameProvider.class); 75 return pool.getLocalizedObject(CalendarFieldValueNamesMapGetter.INSTANCE, locale, id, field, style); 76 } 77 78 /** 79 * Obtains a localized field value string from a CalendarDataProvider 80 * implementation. 81 */ 82 private static class CalendarFieldValueNameGetter 83 implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarNameProvider, 84 String> { 85 private static final CalendarFieldValueNameGetter INSTANCE = 86 new CalendarFieldValueNameGetter(); 87 88 @Override 89 public String getObject(CalendarNameProvider calendarNameProvider, 90 Locale locale, 91 String requestID, // calendarType 92 Object... params) { 93 assert params.length == 3; 94 int field = (int) params[0]; 95 int value = (int) params[1]; 96 int style = (int) params[2]; 97 return calendarNameProvider.getDisplayName(requestID, field, value, style, locale); 98 } 99 } 100 101 /** 102 * Obtains a localized field-value pairs from a CalendarDataProvider 103 * implementation. 104 */ 105 private static class CalendarFieldValueNamesMapGetter 106 implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarNameProvider, 107 Map<String, Integer>> { 108 private static final CalendarFieldValueNamesMapGetter INSTANCE = 109 new CalendarFieldValueNamesMapGetter(); 110 111 @Override 112 public Map<String, Integer> getObject(CalendarNameProvider calendarNameProvider, 113 Locale locale, 114 String requestID, // calendarType 115 Object... params) { 116 assert params.length == 2; 117 int field = (int) params[0]; 118 int style = (int) params[1]; 119 return calendarNameProvider.getDisplayNames(requestID, field, style, locale); 120 } 121 } 122 123 private static class CalendarWeekParameterGetter 124 implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarDataProvider, 125 Integer> { 126 private static final CalendarWeekParameterGetter INSTANCE = 127 new CalendarWeekParameterGetter(); 128 129 @Override 130 public Integer getObject(CalendarDataProvider calendarDataProvider, 131 Locale locale, 132 String requestID, // resource key 133 Object... params) { 134 assert params.length == 0; 135 int value; 136 switch (requestID) { 137 case FIRST_DAY_OF_WEEK: 138 value = calendarDataProvider.getFirstDayOfWeek(locale); 139 break; 140 case MINIMAL_DAYS_IN_FIRST_WEEK: 141 value = calendarDataProvider.getMinimalDaysInFirstWeek(locale); 142 break; 143 default: 144 throw new InternalError("invalid requestID: " + requestID); 145 } 146 return (value != 0) ? value : null; 147 } 148 } 149 }