1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package net.fortuna.ical4j.model.property;
35
36 import java.text.ParseException;
37 import java.util.Date;
38
39 import net.fortuna.ical4j.model.Parameter;
40 import net.fortuna.ical4j.model.ParameterList;
41 import net.fortuna.ical4j.model.Property;
42 import net.fortuna.ical4j.model.ValidationException;
43 import net.fortuna.ical4j.model.parameter.Value;
44 import net.fortuna.ical4j.util.DateFormat;
45 import net.fortuna.ical4j.util.DateTimeFormat;
46 import net.fortuna.ical4j.util.ParameterValidator;
47
48 /***
49 * Defines a RECURRENCE-ID iCalendar component property.
50 *
51 * @author benf
52 */
53 public class RecurrenceId extends Property {
54
55 private Date time;
56
57
58
59 private boolean utc = false;
60
61 /***
62 * @param aList
63 * a list of parameters for this component
64 * @param aValue
65 * a value string for this component
66 * @throws ParseException
67 * where the specified value string is not a valid
68 * date-time/date representation
69 */
70 public RecurrenceId(final ParameterList aList, final String aValue)
71 throws ParseException {
72 super(RECURRENCE_ID, aList);
73
74
75 Parameter valueParam = getParameters().getParameter(Parameter.VALUE);
76
77 if (valueParam != null && Value.DATE.equals(valueParam.getValue())) {
78 time = DateFormat.getInstance().parse(aValue);
79 }
80 else {
81 time = DateTimeFormat.getInstance().parse(aValue);
82 }
83 }
84
85 /***
86 * Constructor. Date or Date-Time format is determined based
87 * on the presence of a VALUE parameter.
88 * @param aList
89 * a list of parameters for this component
90 * @param aDate
91 * a date representation of a date or date-time
92 */
93 public RecurrenceId(final ParameterList aList, final Date aDate) {
94 super(RECURRENCE_ID, aList);
95
96 time = aDate;
97 }
98
99 /***
100 * @return Returns the time.
101 */
102 public final Date getTime() {
103 return time;
104 }
105
106 /***
107 * @see net.fortuna.ical4j.model.Property#validate()
108 */
109 public final void validate() throws ValidationException {
110
111
112
113
114
115
116
117 ParameterValidator.getInstance().validateOneOrLess(Parameter.VALUE,
118 getParameters());
119
120 Parameter valueParam = getParameters().getParameter(Parameter.VALUE);
121
122 if (valueParam != null
123 && !Value.DATE_TIME.equals(valueParam.getValue())
124 && !Value.DATE.equals(valueParam.getValue())) {
125 throw new ValidationException(
126 "Parameter [" + Parameter.VALUE + "] is invalid");
127 }
128
129 ParameterValidator.getInstance().validateOneOrLess(Parameter.TZID,
130 getParameters());
131 ParameterValidator.getInstance().validateOneOrLess(Parameter.RANGE,
132 getParameters());
133
134
135
136
137
138
139 }
140
141
142
143
144
145 public String getValue() {
146 Parameter valueParam = getParameters().getParameter(Parameter.VALUE);
147
148 if (valueParam != null && Value.DATE.equals(valueParam)) {
149 return DateFormat.getInstance().format(getTime());
150 }
151
152
153 return DateTimeFormat.getInstance().format(getTime(), isUtc());
154 }
155
156 /***
157 * @return Returns the utc.
158 */
159 public boolean isUtc() {
160 return utc;
161 }
162
163 /***
164 * @param utc The utc to set.
165 */
166 public void setUtc(boolean utc) {
167 this.utc = utc;
168 }
169 }