]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/classes/core/src/com/ibm/icu/util/Holiday.java
Upgrade ICU4J.
[Dictionary.git] / jars / icu4j-52_1 / main / classes / core / src / com / ibm / icu / util / Holiday.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 1996-2011, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7
8 package com.ibm.icu.util;
9
10 import java.util.Date;
11 import java.util.Locale;
12 import java.util.MissingResourceException;
13 import java.util.ResourceBundle;
14
15 import com.ibm.icu.util.ULocale.Category;
16
17 /**
18  * <b>Note:</b> The Holiday framework is a technology preview.
19  * Despite its age, is still draft API, and clients should treat it as such.
20  * 
21  * An abstract class representing a holiday.
22  * @draft ICU 2.8 (retainAll)
23  * @provisional This API might change or be removed in a future release.
24  */
25 public abstract class Holiday implements DateRule
26 {
27     /**
28      * @draft ICU 2.8
29      * @provisional This API might change or be removed in a future release.
30      */
31     public static Holiday[] getHolidays()
32     {
33         return getHolidays(ULocale.getDefault(Category.FORMAT));
34     }
35
36     /**
37      * @draft ICU 2.8
38      * @provisional This API might change or be removed in a future release.
39      */
40     public static Holiday[] getHolidays(Locale locale)
41     {
42         return getHolidays(ULocale.forLocale(locale));
43     }
44
45     /**
46      * @draft ICU 3.2
47      * @provisional This API might change or be removed in a future release.
48      */
49     public static Holiday[] getHolidays(ULocale locale)
50     {
51         Holiday[] result = noHolidays;
52
53         try {
54             ResourceBundle bundle = UResourceBundle.getBundleInstance("com.ibm.icu.impl.data.HolidayBundle", locale);
55
56             result = (Holiday[]) bundle.getObject("holidays");
57         }
58         catch (MissingResourceException e) {
59         }
60         return result;
61     }
62
63     /**
64      * Return the first occurrence of this holiday on or after the given date
65      *
66      * @param start Only holidays on or after this date are returned.
67      *
68      * @return      The date on which this holiday occurs, or null if it
69      *              does not occur on or after the start date.
70      *
71      * @see #firstBetween
72      * @draft ICU 2.8
73      * @provisional This API might change or be removed in a future release.
74      */
75     public Date firstAfter(Date start) {
76         return rule.firstAfter(start);
77     }
78
79     /**
80      * Return the first occurrence of this holiday that is on or after
81      * the given start date and before the given end date.
82      *
83      * @param start Only occurrences on or after this date are returned.
84      * @param end   Only occurrences before this date are returned.
85      *
86      * @return      The date on which this event occurs, or null if it
87      *              does not occur between the start and end dates.
88      *
89      * @see #firstAfter
90      * @draft ICU 2.8
91      * @provisional This API might change or be removed in a future release.
92      */
93     public Date firstBetween(Date start, Date end) {
94         return rule.firstBetween(start, end);
95     }
96
97     /**
98      * Checks whether this holiday falls on the given date.  This does
99      * <em>not</em> take time of day into account; instead it checks
100      * whether the holiday and the given date are on the same day.
101      *
102      * @param date  The date to check.
103      * @return      true if this holiday occurs on the given date.
104      * @draft ICU 2.8
105      * @provisional This API might change or be removed in a future release.
106      */
107     public boolean isOn(Date date) {
108         //System.out.println(name + ".isOn(" + date.toString() + "):");
109         return rule.isOn(date);
110     }
111
112     /**
113      * Check whether this holiday occurs at least once between the two
114      * dates given.
115      * @draft ICU 2.8
116      * @provisional This API might change or be removed in a future release.
117      */
118     public boolean isBetween(Date start, Date end) {
119         return rule.isBetween(start, end);
120     }
121
122     /**
123      * Construct a new Holiday object.  This is for use by subclasses only.
124      * This constructs a new holiday with the given name and date rules.
125      *
126      * @param name  The name of this holiday.  The getDisplayName method
127      *              uses this string as a key to look up the holiday's name a
128      *              resource bundle object named HolidayBundle.
129      *
130      * @param rule  The date rules used for determining when this holiday
131      *              falls.  Holiday's implementation of the DateRule interface
132      *              simply delegates to this DateRule object.
133      * @draft ICU 2.8
134      * @provisional This API might change or be removed in a future release.
135      */
136     protected Holiday(String name, DateRule rule)
137     {
138         this.name = name;
139         this.rule = rule;
140     }
141
142     /**
143      * Return the name of this holiday in the language of the default <code>DISPLAY</code> locale.
144      * @see Category#DISPLAY
145      * @draft ICU 2.8
146      * @provisional This API might change or be removed in a future release.
147      */
148     public String getDisplayName() {
149         return getDisplayName(ULocale.getDefault(Category.DISPLAY));
150     }
151
152     /**
153      * Return the name of this holiday in the language of the specified locale.
154      * The <code>name</code> parameter passed to this object's constructor is used
155      * as a key to look up the holiday's localized name in a ResourceBundle object
156      * named HolidayBundle.
157      *
158      * @param locale   A locale specifying the language in which the name is desired.
159      *
160      * @see ResourceBundle
161      * @draft ICU 2.8
162      * @provisional This API might change or be removed in a future release.
163      */
164     public String getDisplayName(Locale locale)
165     {
166         return getDisplayName(ULocale.forLocale(locale));
167     }
168
169     /**
170      * Return the name of this holiday in the language of the specified locale
171      * The <code>name</code> parameter passed to this object's constructor is used
172      * as a key to look up the holiday's localized name in a ResourceBundle object
173      * named HolidayBundle.
174      *
175      * @param locale   A locale specifying the language in which the name is desired.
176      *
177      * @see ResourceBundle
178      * @draft ICU 3.2
179      * @provisional This API might change or be removed in a future release.
180      */
181     public String getDisplayName(ULocale locale)
182     {
183         String dispName = name;
184
185         try {
186             ResourceBundle bundle = UResourceBundle.getBundleInstance("com.ibm.icu.impl.data.HolidayBundle", locale);
187             dispName = bundle.getString(name);
188         }
189         catch (MissingResourceException e) {
190         }
191         return dispName;
192     }
193
194     /**
195      * @draft ICU 2.8
196      * @provisional This API might change or be removed in a future release.
197      */
198     public DateRule getRule() {
199         return rule;
200     }
201
202     /**
203      * @draft ICU 2.8
204      * @provisional This API might change or be removed in a future release.
205      */
206     public void setRule(DateRule rule) {
207         this.rule = rule;
208     }
209
210     private String      name;
211     private DateRule    rule;
212
213     private static Holiday[] noHolidays = {};
214 }