diff -r 5ae3e5665a0b -r cc93757aeca3 src/net/fortuna/ical4j/model/component/VAlarm.java --- a/src/net/fortuna/ical4j/model/component/VAlarm.java Thu Feb 12 18:02:00 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,468 +0,0 @@ -/** - * 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.component; - -import java.util.HashMap; -import java.util.Map; - -import net.fortuna.ical4j.model.DateTime; -import net.fortuna.ical4j.model.Dur; -import net.fortuna.ical4j.model.Property; -import net.fortuna.ical4j.model.PropertyList; -import net.fortuna.ical4j.model.ValidationException; -import net.fortuna.ical4j.model.Validator; -import net.fortuna.ical4j.model.property.Action; -import net.fortuna.ical4j.model.property.Attach; -import net.fortuna.ical4j.model.property.Description; -import net.fortuna.ical4j.model.property.Duration; -import net.fortuna.ical4j.model.property.Method; -import net.fortuna.ical4j.model.property.Repeat; -import net.fortuna.ical4j.model.property.Summary; -import net.fortuna.ical4j.model.property.Trigger; -import net.fortuna.ical4j.util.PropertyValidator; - -/** - * $Id$ [Apr 5, 2004] - * - * Defines an iCalendar VALARM component. - * - *
- *    4.6.6 Alarm Component
- *
- *       Component Name: VALARM
- *
- *       Purpose: Provide a grouping of component properties that define an
- *       alarm.
- *
- *       Formal Definition: A "VALARM" calendar component is defined by the
- *       following notation:
- *
- *              alarmc     = "BEGIN" ":" "VALARM" CRLF
- *                           (audioprop / dispprop / emailprop / procprop)
- *                           "END" ":" "VALARM" CRLF
- *
- *         audioprop  = 2*(
- *
- *                    ; 'action' and 'trigger' are both REQUIRED,
- *                    ; but MUST NOT occur more than once
- *
- *                    action / trigger /
- *
- *                    ; 'duration' and 'repeat' are both optional,
- *                    ; and MUST NOT occur more than once each,
- *                    ; but if one occurs, so MUST the other
- *
- *                    duration / repeat /
- *
- *                    ; the following is optional,
- *                    ; but MUST NOT occur more than once
- *
- *                    attach /
- *
- *                    ; the following is optional,
- *                    ; and MAY occur more than once
- *
- *                    x-prop
- *
- *                    )
- *
- *
- *
- *         dispprop   = 3*(
- *
- *                    ; the following are all REQUIRED,
- *                    ; but MUST NOT occur more than once
- *
- *                    action / description / trigger /
- *
- *                    ; 'duration' and 'repeat' are both optional,
- *                    ; and MUST NOT occur more than once each,
- *                    ; but if one occurs, so MUST the other
- *
- *                    duration / repeat /
- *
- *                    ; the following is optional,
- *                    ; and MAY occur more than once
- *
- *                    *x-prop
- *
- *                    )
- *
- *
- *
- *         emailprop  = 5*(
- *
- *                    ; the following are all REQUIRED,
- *                    ; but MUST NOT occur more than once
- *
- *                    action / description / trigger / summary
- *
- *                    ; the following is REQUIRED,
- *                    ; and MAY occur more than once
- *
- *                    attendee /
- *
- *                    ; 'duration' and 'repeat' are both optional,
- *                    ; and MUST NOT occur more than once each,
- *                    ; but if one occurs, so MUST the other
- *
- *                    duration / repeat /
- *
- *                    ; the following are optional,
- *                    ; and MAY occur more than once
- *
- *                    attach / x-prop
- *
- *                    )
- *
- *
- *
- *         procprop   = 3*(
- *
- *                    ; the following are all REQUIRED,
- *                    ; but MUST NOT occur more than once
- *
- *                    action / attach / trigger /
- *
- *                    ; 'duration' and 'repeat' are both optional,
- *                    ; and MUST NOT occur more than once each,
- *                    ; but if one occurs, so MUST the other
- *
- *                    duration / repeat /
- *
- *                    ; 'description' is optional,
- *                    ; and MUST NOT occur more than once
- *
- *                    description /
- *
- *                    ; the following is optional,
- *                    ; and MAY occur more than once
- *
- *                    x-prop
- *
- *                    )
- * 
- * - * Example 1 - Creating an alarm to trigger at a specific time: - * - *

- * java.util.Calendar cal = java.util.Calendar.getInstance();
- * cal.set(java.util.Calendar.MONTH, java.util.Calendar.DECEMBER);
- * cal.set(java.util.Calendar.DAY_OF_MONTH, 25);
- *
- * VAlarm christmas = new VAlarm(cal.getTime());
- * 
- * - * Example 2 - Creating an alarm to trigger one (1) hour before the scheduled start of the parent event/the parent todo - * is due: - * - *

- * VAlarm reminder = new VAlarm(new Dur(0, -1, 0, 0));
- *
- * // repeat reminder four (4) more times every fifteen (15) minutes..
- * reminder.getProperties().add(new Repeat(4));
- * reminder.getProperties().add(new Duration(new Dur(0, 0, 15, 0)));
- *
- * // display a message..
- * reminder.getProperties().add(Action.DISPLAY);
- * reminder.getProperties().add(new Description("Progress Meeting at 9:30am"));
- * 
- * - * @author Ben Fortuna - */ -public class VAlarm extends CalendarComponent { - - private static final long serialVersionUID = -8193965477414653802L; - - private final Map actionValidators = new HashMap(); - { - actionValidators.put(Action.AUDIO, new AudioValidator()); - actionValidators.put(Action.DISPLAY, new DisplayValidator()); - actionValidators.put(Action.EMAIL, new EmailValidator()); - actionValidators.put(Action.PROCEDURE, new ProcedureValidator()); - } - - private final Validator itipValidator = new ITIPValidator(); - - /** - * Default constructor. - */ - public VAlarm() { - super(VALARM); - } - - /** - * Constructor. - * @param properties a list of properties - */ - public VAlarm(final PropertyList properties) { - super(VALARM, properties); - } - - /** - * Constructs a new VALARM instance that will trigger at the specified time. - * @param trigger the time the alarm will trigger - */ - public VAlarm(final DateTime trigger) { - this(); - getProperties().add(new Trigger(trigger)); - } - - /** - * Constructs a new VALARM instance that will trigger at the specified time relative to the event/todo component. - * @param trigger a duration of time relative to the parent component that the alarm will trigger at - */ - public VAlarm(final Dur trigger) { - this(); - getProperties().add(new Trigger(trigger)); - } - - /** - * {@inheritDoc} - */ - public final void validate(final boolean recurse) - throws ValidationException { - - /* - * ; 'action' and 'trigger' are both REQUIRED, ; but MUST NOT occur more than once action / trigger / - */ - PropertyValidator.getInstance().assertOne(Property.ACTION, getProperties()); - PropertyValidator.getInstance().assertOne(Property.TRIGGER, getProperties()); - - /* - * ; 'duration' and 'repeat' are both optional, ; and MUST NOT occur more than once each, ; but if one occurs, - * so MUST the other duration / repeat / - */ - PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties()); - PropertyValidator.getInstance().assertOneOrLess(Property.REPEAT, getProperties()); - - try { - PropertyValidator.getInstance().assertNone(Property.DURATION, getProperties()); - PropertyValidator.getInstance().assertNone(Property.REPEAT, getProperties()); - } - catch (ValidationException ve) { - PropertyValidator.getInstance().assertOne(Property.DURATION, getProperties()); - PropertyValidator.getInstance().assertOne(Property.REPEAT, getProperties()); - } - - /* - * ; the following is optional, ; and MAY occur more than once x-prop - */ - - final Validator actionValidator = (Validator) actionValidators.get(getAction()); - if (actionValidator != null) { - actionValidator.validate(); - } - - if (recurse) { - validateProperties(); - } - } - - /** - * {@inheritDoc} - */ - protected Validator getValidator(Method method) { - return itipValidator; - } - - private class AudioValidator implements Validator { - - private static final long serialVersionUID = 1L; - - /** - * {@inheritDoc} - */ - public void validate() throws ValidationException { - /* - * ; the following is optional, ; but MUST NOT occur more than once attach / - */ - PropertyValidator.getInstance().assertOneOrLess(Property.ATTACH, getProperties()); - } - } - - private class DisplayValidator implements Validator { - - private static final long serialVersionUID = 1L; - - /** - * {@inheritDoc} - */ - public void validate() throws ValidationException { - /* - * ; the following are all REQUIRED, ; but MUST NOT occur more than once action / description / trigger / - */ - PropertyValidator.getInstance().assertOne(Property.DESCRIPTION, getProperties()); - } - } - - private class EmailValidator implements Validator { - - private static final long serialVersionUID = 1L; - - /** - * {@inheritDoc} - */ - public void validate() throws ValidationException { - /* - * ; the following are all REQUIRED, - * ; but MUST NOT occur more than once action / description / trigger / summary - * ; the following is REQUIRED, - * ; and MAY occur more than once attendee / - * ; 'duration' and 'repeat' are both optional, - * ; and MUST NOT occur more than once each, - * ; but if one occurs, so MUST the other duration / repeat / - * ; the following are optional, - * ; and MAY occur more than once attach / x-prop - */ - PropertyValidator.getInstance().assertOne(Property.DESCRIPTION, getProperties()); - PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties()); - - PropertyValidator.getInstance().assertOneOrMore(Property.ATTENDEE, getProperties()); - } - } - - private class ProcedureValidator implements Validator { - - private static final long serialVersionUID = 1L; - - /** - * {@inheritDoc} - */ - public void validate() throws ValidationException { - /* - * ; the following are all REQUIRED, - * ; but MUST NOT occur more than once action / attach / trigger / - * ; 'duration' and 'repeat' are both optional, - * ; and MUST NOT occur more than once each, - * ; but if one occurs, so MUST the other duration / repeat / - * ; 'description' is optional, - * ; and MUST NOT occur more than once description / - * ; the following is optional, ; and MAY occur more than once x-prop - */ - PropertyValidator.getInstance().assertOne(Property.ATTACH, getProperties()); - - PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties()); - } - } - - /** - * Common validation for all iTIP methods. - * - *
-     * Component/Property  Presence
-     * ------------------- ----------------------------------------------
-     * VALARM              0+
-     *     ACTION          1
-     *     ATTACH          0+
-     *     DESCRIPTION     0 or 1
-     *     DURATION        0 or 1  if present REPEAT MUST be present
-     *     REPEAT          0 or 1  if present DURATION MUST be present
-     *     SUMMARY         0 or 1
-     *     TRIGGER         1
-     *     X-PROPERTY      0+
-     * 
- */ - private class ITIPValidator implements Validator { - - private static final long serialVersionUID = 1L; - - /** - * {@inheritDoc} - */ - public void validate() throws ValidationException { - PropertyValidator.getInstance().assertOne(Property.ACTION, getProperties()); - PropertyValidator.getInstance().assertOne(Property.TRIGGER, getProperties()); - - PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties()); - PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties()); - PropertyValidator.getInstance().assertOneOrLess(Property.REPEAT, getProperties()); - PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY, getProperties()); - } - } - - /** - * Returns the mandatory action property. - * @return the ACTION property or null if not specified - */ - public final Action getAction() { - return (Action) getProperty(Property.ACTION); - } - - /** - * Returns the mandatory trigger property. - * @return the TRIGGER property or null if not specified - */ - public final Trigger getTrigger() { - return (Trigger) getProperty(Property.TRIGGER); - } - - /** - * Returns the optional duration property. - * @return the DURATION property or null if not specified - */ - public final Duration getDuration() { - return (Duration) getProperty(Property.DURATION); - } - - /** - * Returns the optional repeat property. - * @return the REPEAT property or null if not specified - */ - public final Repeat getRepeat() { - return (Repeat) getProperty(Property.REPEAT); - } - - /** - * Returns the optional attachment property. - * @return the ATTACH property or null if not specified - */ - public final Attach getAttachment() { - return (Attach) getProperty(Property.ATTACH); - } - - /** - * Returns the optional description property. - * @return the DESCRIPTION property or null if not specified - */ - public final Description getDescription() { - return (Description) getProperty(Property.DESCRIPTION); - } - - /** - * Returns the optional summary property. - * @return the SUMMARY property or null if not specified - */ - public final Summary getSummary() { - return (Summary) getProperty(Property.SUMMARY); - } -}