src/net/fortuna/ical4j/model/property/RecurrenceId.java

Tue, 10 Feb 2015 18:12:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 10 Feb 2015 18:12:00 +0100
changeset 0
fb9019fb1bf7
permissions
-rw-r--r--

Import initial revisions of existing project AndroidCaldavSyncAdapater,
forked from upstream repository at 27e8a0f8495c92e0780d450bdf0c7cec77a03a55.

michael@0 1 /**
michael@0 2 * Copyright (c) 2012, Ben Fortuna
michael@0 3 * All rights reserved.
michael@0 4 *
michael@0 5 * Redistribution and use in source and binary forms, with or without
michael@0 6 * modification, are permitted provided that the following conditions
michael@0 7 * are met:
michael@0 8 *
michael@0 9 * o Redistributions of source code must retain the above copyright
michael@0 10 * notice, this list of conditions and the following disclaimer.
michael@0 11 *
michael@0 12 * o Redistributions in binary form must reproduce the above copyright
michael@0 13 * notice, this list of conditions and the following disclaimer in the
michael@0 14 * documentation and/or other materials provided with the distribution.
michael@0 15 *
michael@0 16 * o Neither the name of Ben Fortuna nor the names of any other contributors
michael@0 17 * may be used to endorse or promote products derived from this software
michael@0 18 * without specific prior written permission.
michael@0 19 *
michael@0 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
michael@0 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
michael@0 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
michael@0 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
michael@0 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
michael@0 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
michael@0 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
michael@0 27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
michael@0 28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
michael@0 29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
michael@0 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
michael@0 31 */
michael@0 32 package net.fortuna.ical4j.model.property;
michael@0 33
michael@0 34 import java.text.ParseException;
michael@0 35
michael@0 36 import net.fortuna.ical4j.model.Date;
michael@0 37 import net.fortuna.ical4j.model.DateTime;
michael@0 38 import net.fortuna.ical4j.model.Parameter;
michael@0 39 import net.fortuna.ical4j.model.ParameterList;
michael@0 40 import net.fortuna.ical4j.model.PropertyFactoryImpl;
michael@0 41 import net.fortuna.ical4j.model.TimeZone;
michael@0 42 import net.fortuna.ical4j.model.ValidationException;
michael@0 43 import net.fortuna.ical4j.util.ParameterValidator;
michael@0 44
michael@0 45 /**
michael@0 46 * $Id$
michael@0 47 *
michael@0 48 * Created: [Apr 6, 2004]
michael@0 49 *
michael@0 50 * Defines a RECURRENCE-ID iCalendar component property.
michael@0 51 *
michael@0 52 * <pre>
michael@0 53 * 4.8.4.4 Recurrence ID
michael@0 54 *
michael@0 55 * Property Name: RECURRENCE-ID
michael@0 56 *
michael@0 57 * Purpose: This property is used in conjunction with the &quot;UID&quot; and
michael@0 58 * &quot;SEQUENCE&quot; property to identify a specific instance of a recurring
michael@0 59 * &quot;VEVENT&quot;, &quot;VTODO&quot; or &quot;VJOURNAL&quot; calendar component. The property
michael@0 60 * value is the effective value of the &quot;DTSTART&quot; property of the
michael@0 61 * recurrence instance.
michael@0 62 *
michael@0 63 * Value Type: The default value type for this property is DATE-TIME.
michael@0 64 * The time format can be any of the valid forms defined for a DATE-TIME
michael@0 65 * value type. See DATE-TIME value type definition for specific
michael@0 66 * interpretations of the various forms. The value type can be set to
michael@0 67 * DATE.
michael@0 68 *
michael@0 69 * Property Parameters: Non-standard property, value data type, time
michael@0 70 * zone identifier and recurrence identifier range parameters can be
michael@0 71 * specified on this property.
michael@0 72 *
michael@0 73 * Conformance: This property can be specified in an iCalendar object
michael@0 74 * containing a recurring calendar component.
michael@0 75 *
michael@0 76 * Description: The full range of calendar components specified by a
michael@0 77 * recurrence set is referenced by referring to just the &quot;UID&quot; property
michael@0 78 * value corresponding to the calendar component. The &quot;RECURRENCE-ID&quot;
michael@0 79 * property allows the reference to an individual instance within the
michael@0 80 * recurrence set.
michael@0 81 *
michael@0 82 * If the value of the &quot;DTSTART&quot; property is a DATE type value, then the
michael@0 83 * value MUST be the calendar date for the recurrence instance.
michael@0 84 *
michael@0 85 * The date/time value is set to the time when the original recurrence
michael@0 86 * instance would occur; meaning that if the intent is to change a
michael@0 87 * Friday meeting to Thursday, the date/time is still set to the
michael@0 88 * original Friday meeting.
michael@0 89 *
michael@0 90 * The &quot;RECURRENCE-ID&quot; property is used in conjunction with the &quot;UID&quot;
michael@0 91 * and &quot;SEQUENCE&quot; property to identify a particular instance of a
michael@0 92 * recurring event, to-do or journal. For a given pair of &quot;UID&quot; and
michael@0 93 * &quot;SEQUENCE&quot; property values, the &quot;RECURRENCE-ID&quot; value for a
michael@0 94 * recurrence instance is fixed. When the definition of the recurrence
michael@0 95 * set for a calendar component changes, and hence the &quot;SEQUENCE&quot;
michael@0 96 * property value changes, the &quot;RECURRENCE-ID&quot; for a given recurrence
michael@0 97 * instance might also change.The &quot;RANGE&quot; parameter is used to specify
michael@0 98 * the effective range of recurrence instances from the instance
michael@0 99 * specified by the &quot;RECURRENCE-ID&quot; property value. The default value
michael@0 100 * for the range parameter is the single recurrence instance only. The
michael@0 101 * value can also be &quot;THISANDPRIOR&quot; to indicate a range defined by the
michael@0 102 * given recurrence instance and all prior instances or the value can be
michael@0 103 * &quot;THISANDFUTURE&quot; to indicate a range defined by the given recurrence
michael@0 104 * instance and all subsequent instances.
michael@0 105 *
michael@0 106 * Format Definition: The property is defined by the following notation:
michael@0 107 *
michael@0 108 * recurid = &quot;RECURRENCE-ID&quot; ridparam &quot;:&quot; ridval CRLF
michael@0 109 *
michael@0 110 * ridparam = *(
michael@0 111 *
michael@0 112 * ; the following are optional,
michael@0 113 * ; but MUST NOT occur more than once
michael@0 114 *
michael@0 115 * (&quot;;&quot; &quot;VALUE&quot; &quot;=&quot; (&quot;DATE-TIME&quot; / &quot;DATE)) /
michael@0 116 * (&quot;;&quot; tzidparam) / (&quot;;&quot; rangeparam) /
michael@0 117 *
michael@0 118 * ; the following is optional,
michael@0 119 * ; and MAY occur more than once
michael@0 120 *
michael@0 121 * (&quot;;&quot; xparam)
michael@0 122 *
michael@0 123 * )
michael@0 124 *
michael@0 125 * ridval = date-time / date
michael@0 126 * ;Value MUST match value type
michael@0 127 * </pre>
michael@0 128 *
michael@0 129 * @author Ben Fortuna
michael@0 130 */
michael@0 131 public class RecurrenceId extends DateProperty {
michael@0 132
michael@0 133 private static final long serialVersionUID = 4456883817126011006L;
michael@0 134
michael@0 135 /**
michael@0 136 * Default constructor.
michael@0 137 */
michael@0 138 public RecurrenceId() {
michael@0 139 super(RECURRENCE_ID, PropertyFactoryImpl.getInstance());
michael@0 140 setDate(new DateTime());
michael@0 141 }
michael@0 142
michael@0 143 /**
michael@0 144 * Creates a new RECURRENCE_ID property initialised with the specified timezone.
michael@0 145 * @param timezone initial timezone
michael@0 146 */
michael@0 147 public RecurrenceId(TimeZone timezone) {
michael@0 148 super(RECURRENCE_ID, timezone, PropertyFactoryImpl.getInstance());
michael@0 149 }
michael@0 150
michael@0 151 /**
michael@0 152 * Creates a new instance initialised with the parsed value.
michael@0 153 * @param value the RECURRENCE_ID value string to parse
michael@0 154 * @throws ParseException where the specified string is not a valid RECURRENCE_ID value representation
michael@0 155 */
michael@0 156 public RecurrenceId(final String value) throws ParseException {
michael@0 157 super(RECURRENCE_ID, PropertyFactoryImpl.getInstance());
michael@0 158 setValue(value);
michael@0 159 }
michael@0 160
michael@0 161 /**
michael@0 162 * Creates a new RECURRENCE_ID property initialised with the specified timezone and value.
michael@0 163 * @param value a string representation of a RECURRENCE_ID value
michael@0 164 * @param timezone initial timezone
michael@0 165 * @throws ParseException where the specified value is not a valid string
michael@0 166 * representation
michael@0 167 */
michael@0 168 public RecurrenceId(String value, TimeZone timezone) throws ParseException {
michael@0 169 super(RECURRENCE_ID, timezone, PropertyFactoryImpl.getInstance());
michael@0 170 setValue(value);
michael@0 171 }
michael@0 172
michael@0 173 /**
michael@0 174 * @param aList a list of parameters for this component
michael@0 175 * @param aValue a value string for this component
michael@0 176 * @throws ParseException where the specified value string is not a valid date-time/date representation
michael@0 177 */
michael@0 178 public RecurrenceId(final ParameterList aList, final String aValue)
michael@0 179 throws ParseException {
michael@0 180 super(RECURRENCE_ID, aList, PropertyFactoryImpl.getInstance());
michael@0 181 setValue(aValue);
michael@0 182 }
michael@0 183
michael@0 184 /**
michael@0 185 * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
michael@0 186 * @param aDate a date representation of a date or date-time
michael@0 187 */
michael@0 188 public RecurrenceId(final Date aDate) {
michael@0 189 super(RECURRENCE_ID, PropertyFactoryImpl.getInstance());
michael@0 190 setDate(aDate);
michael@0 191 }
michael@0 192
michael@0 193 /**
michael@0 194 * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
michael@0 195 * @param aList a list of parameters for this component
michael@0 196 * @param aDate a date representation of a date or date-time
michael@0 197 */
michael@0 198 public RecurrenceId(final ParameterList aList, final Date aDate) {
michael@0 199 super(RECURRENCE_ID, aList, PropertyFactoryImpl.getInstance());
michael@0 200 setDate(aDate);
michael@0 201 }
michael@0 202
michael@0 203 /**
michael@0 204 * {@inheritDoc}
michael@0 205 */
michael@0 206 public final void validate() throws ValidationException {
michael@0 207 super.validate();
michael@0 208
michael@0 209 /*
michael@0 210 * ; the following are optional, ; but MUST NOT occur more than once (";" "VALUE" "=" ("DATE-TIME" / "DATE)) /
michael@0 211 * (";" tzidparam) / (";" rangeparam) /
michael@0 212 */
michael@0 213
michael@0 214 ParameterValidator.getInstance().assertOneOrLess(Parameter.RANGE,
michael@0 215 getParameters());
michael@0 216
michael@0 217 /*
michael@0 218 * ; the following is optional, ; and MAY occur more than once (";" xparam)
michael@0 219 */
michael@0 220 }
michael@0 221 }

mercurial