1
22
23 package com.liferay.portal.kernel.cal;
24
25 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
26 import com.liferay.portal.kernel.util.Validator;
27
28 import java.util.Calendar;
29 import java.util.TimeZone;
30
31
37 public class TZSRecurrence extends Recurrence {
38
39 public TZSRecurrence() {
40 }
41
42 public TZSRecurrence(Calendar start, Duration duration) {
43 super(start, duration);
44 }
45
46 public TZSRecurrence(Calendar start, Duration duration, int frequency) {
47 super(start, duration, frequency);
48 }
49
50 public TimeZone getTimeZone() {
51 return _timeZone;
52 }
53
54 public void setTimeZone(TimeZone timeZone) {
55 _timeZone = timeZone;
56 }
57
58 protected boolean matchesByField(
59 int[] array, int field, Calendar candidate, boolean allowNegative,
60 TimeZone timeZone) {
61
62 Calendar adjustedCandidate = candidate;
63
64 if (Validator.isNotNull(timeZone)) {
65 adjustedCandidate = CalendarFactoryUtil.getCalendar(timeZone);
66
67 adjustedCandidate.setTime(candidate.getTime());
68 }
69
70 return matchesByField(array, field, adjustedCandidate, allowNegative);
71 }
72
73 protected boolean matchesIndividualByDay(
74 Calendar candidate, DayAndPosition pos) {
75
76 Calendar adjustedCandidate = candidate;
77
78 if (Validator.isNotNull(_timeZone)) {
79 adjustedCandidate = CalendarFactoryUtil.getCalendar(_timeZone);
80
81 adjustedCandidate.setTime(candidate.getTime());
82 }
83
84 return super.matchesIndividualByDay(adjustedCandidate, pos);
85 }
86
87 protected boolean matchesByMonthDay(Calendar candidate) {
88 return matchesByField(
89 byMonthDay, Calendar.DATE, candidate, true, _timeZone);
90 }
91
92 protected boolean matchesByYearDay(Calendar candidate) {
93 return matchesByField(
94 byYearDay, Calendar.DAY_OF_YEAR, candidate, true, _timeZone);
95 }
96
97 protected boolean matchesByWeekNo(Calendar candidate) {
98 return matchesByField(
99 byWeekNo, Calendar.WEEK_OF_YEAR, candidate, true, _timeZone);
100 }
101
102 protected boolean matchesByMonth(Calendar candidate) {
103 return matchesByField(
104 byMonth, Calendar.MONTH, candidate, false, _timeZone);
105 }
106
107 private TimeZone _timeZone;
108
109 }