1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html#License
3/*
4 *******************************************************************************
5 * Copyright (C) 2008-2012, International Business Machines Corporation and    *
6 * others. All Rights Reserved.                                                *
7 *******************************************************************************
8 */
9package com.ibm.icu.impl.javaspi.util;
10
11import java.util.Locale;
12import java.util.TimeZone;
13
14import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider;
15import com.ibm.icu.text.TimeZoneNames;
16import com.ibm.icu.text.TimeZoneNames.NameType;
17
18public class TimeZoneNameProviderICU extends java.util.spi.TimeZoneNameProvider {
19
20    @Override
21    public String getDisplayName(String ID, boolean daylight, int style, Locale locale) {
22        String dispName = null;
23        boolean[] isSystemID = new boolean[1];
24        String canonicalID = com.ibm.icu.util.TimeZone.getCanonicalID(ID, isSystemID);
25        if (isSystemID[0]) {
26            long date = System.currentTimeMillis();
27            TimeZoneNames tznames = TimeZoneNames.getInstance(ICULocaleServiceProvider.toULocaleNoSpecialVariant(locale));
28
29            {
30                // Workaround for Java bug. Java needs all 4 names available at the same time.
31                // 2012-10-09 yoshito
32                String lstd = tznames.getDisplayName(canonicalID, NameType.LONG_STANDARD, date);
33                String ldst = tznames.getDisplayName(canonicalID, NameType.LONG_DAYLIGHT, date);
34                String sstd = tznames.getDisplayName(canonicalID, NameType.SHORT_STANDARD, date);
35                String sdst = tznames.getDisplayName(canonicalID, NameType.SHORT_DAYLIGHT, date);
36
37                if (lstd != null && ldst != null && sstd != null && sdst != null) {
38                    switch (style) {
39                    case TimeZone.LONG:
40                        dispName = daylight ? ldst : lstd;
41                        break;
42                    case TimeZone.SHORT:
43                        dispName = daylight ? sdst : sstd;
44                        break;
45                    }
46                }
47            }
48
49//            {
50//                switch (style) {
51//                case TimeZone.LONG:
52//                    dispName = daylight ?
53//                            tznames.getDisplayName(canonicalID, NameType.LONG_DAYLIGHT, date) :
54//                            tznames.getDisplayName(canonicalID, NameType.LONG_STANDARD, date);
55//                    break;
56//                case TimeZone.SHORT:
57//                    dispName = daylight ?
58//                            tznames.getDisplayName(canonicalID, NameType.SHORT_DAYLIGHT, date) :
59//                            tznames.getDisplayName(canonicalID, NameType.SHORT_STANDARD, date);
60//                    break;
61//                }
62//            }
63        }
64        return dispName;
65    }
66
67    @Override
68    public Locale[] getAvailableLocales() {
69        return ICULocaleServiceProvider.getAvailableLocales();
70    }
71
72}
73