-
-
Notifications
You must be signed in to change notification settings - Fork 199
/
Sequence.java
231 lines (210 loc) · 7.58 KB
/
Sequence.java
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
/**
* Copyright (c) 2012, Ben Fortuna
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* o Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* o Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* o Neither the name of Ben Fortuna nor the names of any other contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.model.property;
import net.fortuna.ical4j.model.*;
import net.fortuna.ical4j.validate.ValidationException;
import java.io.IOException;
import java.net.URISyntaxException;
import java.text.ParseException;
/**
* $Id$
* <p/>
* Created: [Apr 6, 2004]
* <p/>
* Defines a SEQUENCE iCalendar component property.
* <p/>
* <pre>
* 4.8.7.4 Sequence Number
*
* Property Name: SEQUENCE
*
* Purpose: This property defines the revision sequence number of the
* calendar component within a sequence of revisions.
*
* Value Type: integer
*
* Property Parameters: Non-standard property parameters can be
* specified on this property.
*
* Conformance: The property can be specified in "VEVENT", "VTODO" or
* "VJOURNAL" calendar component.
*
* Description: When a calendar component is created, its sequence
* number is zero (US-ASCII decimal 48). It is monotonically incremented
* by the "Organizer's" CUA each time the "Organizer" makes a
* significant revision to the calendar component. When the "Organizer"
* makes changes to one of the following properties, the sequence number
* MUST be incremented:
*
* . "DTSTART"
*
* . "DTEND"
*
* . "DUE"
*
* . "RDATE"
*
* . "RRULE"
*
* . "EXDATE"
*
* . "EXRULE"
*
* . "STATUS"
*
* In addition, changes made by the "Organizer" to other properties can
* also force the sequence number to be incremented. The "Organizer" CUA
* MUST increment the sequence number when ever it makes changes to
* properties in the calendar component that the "Organizer" deems will
* jeopardize the validity of the participation status of the
* "Attendees". For example, changing the location of a meeting from one
* locale to another distant locale could effectively impact the
* participation status of the "Attendees".
*
* The "Organizer" includes this property in an iCalendar object that it
* sends to an "Attendee" to specify the current version of the calendar
* component.
*
* The "Attendee" includes this property in an iCalendar object that it
* sends to the "Organizer" to specify the version of the calendar
* component that the "Attendee" is referring to.
*
* A change to the sequence number is not the mechanism that an
* "Organizer" uses to request a response from the "Attendees". The
* "RSVP" parameter on the "ATTENDEE" property is used by the
* "Organizer" to indicate that a response from the "Attendees" is
* requested.
*
* Format Definition: This property is defined by the following
* notation:
*
* seq = "SEQUENCE" seqparam ":" integer CRLF
* ; Default is "0"
*
* seqparam = *(";" xparam)
*
* Example: The following is an example of this property for a calendar
* component that was just created by the "Organizer".
*
* SEQUENCE:0
*
* The following is an example of this property for a calendar component
* that has been revised two different times by the "Organizer".
*
* SEQUENCE:2
* </pre>
*
* @author Ben Fortuna
*/
public class Sequence extends Property implements Comparable<Sequence> {
private static final long serialVersionUID = -1606972893204822853L;
private int sequenceNo;
/**
* Default constructor.
*/
public Sequence() {
super(SEQUENCE, new Factory());
sequenceNo = 0;
}
/**
* @param aValue a value string for this component
*/
public Sequence(final String aValue) {
super(SEQUENCE, new Factory());
setValue(aValue);
}
/**
* @param aList a list of parameters for this component
* @param aValue a value string for this component
*/
public Sequence(final ParameterList aList, final String aValue) {
super(SEQUENCE, aList, new Factory());
setValue(aValue);
}
/**
* @param aSequenceNo a sequence number
*/
public Sequence(final int aSequenceNo) {
super(SEQUENCE, new Factory());
sequenceNo = aSequenceNo;
}
/**
* @param aList a list of parameters for this component
* @param aSequenceNo a sequence number
*/
public Sequence(final ParameterList aList, final int aSequenceNo) {
super(SEQUENCE, aList, new Factory());
sequenceNo = aSequenceNo;
}
/**
* @return Returns the sequenceNo.
*/
public final int getSequenceNo() {
return sequenceNo;
}
/**
* {@inheritDoc}
*/
@Override
public final void setValue(final String aValue) {
sequenceNo = Integer.parseInt(aValue);
}
/**
* {@inheritDoc}
*/
@Override
public final String getValue() {
return String.valueOf(getSequenceNo());
}
@Override
public void validate() throws ValidationException {
}
@Override
public int compareTo(Sequence o) {
return Integer.compare(getSequenceNo(), o.getSequenceNo());
}
public static class Factory extends Content.Factory implements PropertyFactory {
private static final long serialVersionUID = 1L;
public Factory() {
super(SEQUENCE);
}
@Override
public Property createProperty(final ParameterList parameters, final String value)
throws IOException, URISyntaxException, ParseException {
return new Sequence(parameters, value);
}
@Override
public Property createProperty() {
return new Sequence();
}
}
}