001    package biweekly.property;
002    
003    import java.util.List;
004    
005    import biweekly.component.VAlarm;
006    import biweekly.parameter.CalendarUserType;
007    import biweekly.parameter.ParticipationStatus;
008    import biweekly.parameter.Role;
009    
010    /*
011     Copyright (c) 2013, Michael Angstadt
012     All rights reserved.
013    
014     Redistribution and use in source and binary forms, with or without
015     modification, are permitted provided that the following conditions are met: 
016    
017     1. Redistributions of source code must retain the above copyright notice, this
018     list of conditions and the following disclaimer. 
019     2. Redistributions in binary form must reproduce the above copyright notice,
020     this list of conditions and the following disclaimer in the documentation
021     and/or other materials provided with the distribution. 
022    
023     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
024     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
025     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
026     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
027     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
028     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
029     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
030     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
031     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
032     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
033     */
034    
035    /**
036     * <p>
037     * Defines an attendee (such as a person attending an event). This property has
038     * different meanings depending on the component that it belongs to:
039     * <ul>
040     * <li>{@link VAlarm} (EMAIL action) - an email address that is to receive the
041     * alarm</li>
042     * <li>all others - an attendee</li>
043     * </ul>
044     * </p>
045     * 
046     * <p>
047     * <b>Examples:</b>
048     * 
049     * <pre>
050     * Attendee attendee = Attendee.email("johndoe@example.com")
051     * </pre>
052     * 
053     * </p>
054     * @author Michael Angstadt
055     * @see <a href="http://tools.ietf.org/html/rfc5545#page-107">RFC 5545
056     * p.107-9</a>
057     */
058    public class Attendee extends TextProperty {
059            /**
060             * Creates an attendee property.
061             * @param uri a URI representing the attendee (typically, an email address,
062             * e.g. "mailto:johndoe@example.com")
063             */
064            public Attendee(String uri) {
065                    super(uri);
066            }
067    
068            /**
069             * Creates an attendee property using an email address as its value.
070             * @param email the email address (e.g. "johndoe@example.com")
071             * @return the property
072             */
073            public static Attendee email(String email) {
074                    return new Attendee("mailto:" + email);
075            }
076    
077            /**
078             * Gets the type of user the attendee is (for example, an "individual" or a
079             * "room").
080             * @return the calendar user type or null if not set
081             * @see <a href="http://tools.ietf.org/html/rfc5545#page-16">RFC 5545
082             * p.16</a>
083             */
084            public CalendarUserType getCalendarUserType() {
085                    return parameters.getCalendarUserType();
086            }
087    
088            /**
089             * Sets the type of user the attendee is (for example, an "individual" or a
090             * "room").
091             * @param cutype the calendar user type or null to remove
092             * @see <a href="http://tools.ietf.org/html/rfc5545#page-16">RFC 5545
093             * p.16</a>
094             */
095            public void setCalendarUserType(CalendarUserType cutype) {
096                    parameters.setCalendarUserType(cutype);
097            }
098    
099            /**
100             * Gets the groups that the attendee is a member of.
101             * @return the group URIs (typically, these are email address URIs, e.g.
102             * "mailto:mailinglist@example.com")
103             * @see <a href="http://tools.ietf.org/html/rfc5545#page-21">RFC 5545
104             * p.21-2</a>
105             */
106            public List<String> getMembers() {
107                    return parameters.getMembers();
108            }
109    
110            /**
111             * Adds a group that the attendee is a member of.
112             * @param uri the group URI (typically, an email address URI, e.g.
113             * "mailto:mailinglist@example.com")
114             * @see <a href="http://tools.ietf.org/html/rfc5545#page-21">RFC 5545
115             * p.21-2</a>
116             */
117            public void addMember(String uri) {
118                    parameters.addMember(uri);
119            }
120    
121            /**
122             * Gets the attendee's role (for example, "chair" or
123             * "required participant").
124             * @return the role or null if not set
125             * @see <a href="http://tools.ietf.org/html/rfc5545#page-25">RFC 5545
126             * p.25-6</a>
127             */
128            public Role getRole() {
129                    return parameters.getRole();
130            }
131    
132            /**
133             * Sets the attendee's role (for example, "chair" or
134             * "required participant").
135             * @param role the role or null to remove
136             * @see <a href="http://tools.ietf.org/html/rfc5545#page-25">RFC 5545
137             * p.25-6</a>
138             */
139            public void setRole(Role role) {
140                    parameters.setRole(role);
141            }
142    
143            /**
144             * Gets the attendee's level of participation.
145             * @return the participation status or null if not set
146             * @see <a href="http://tools.ietf.org/html/rfc5545#page-22">RFC 5545
147             * p.22-3</a>
148             */
149            public ParticipationStatus getParticipationStatus() {
150                    return parameters.getParticipationStatus();
151            }
152    
153            /**
154             * Sets the attendee's level of participation.
155             * @param status the participation status or null to remove
156             * @see <a href="http://tools.ietf.org/html/rfc5545#page-22">RFC 5545
157             * p.22-3</a>
158             */
159            public void setParticipationStatus(ParticipationStatus status) {
160                    parameters.setParticipationStatus(status);
161            }
162    
163            /**
164             * Gets whether the organizer requests a response from the attendee.
165             * @return true if an RSVP is requested, false if not, null if not set
166             * @see <a href="http://tools.ietf.org/html/rfc5545#page-26">RFC 5545
167             * p.26-7</a>
168             */
169            public Boolean getRsvp() {
170                    return parameters.getRsvp();
171            }
172    
173            /**
174             * Sets whether the organizer requests a response from the attendee.
175             * @param rsvp true if an RSVP has been requested, false if not, null to
176             * remove
177             * @see <a href="http://tools.ietf.org/html/rfc5545#page-26">RFC 5545
178             * p.26-7</a>
179             */
180            public void setRsvp(Boolean rsvp) {
181                    parameters.setRsvp(rsvp);
182            }
183    
184            /**
185             * Gets the people who have delegated their responsibility to the attendee.
186             * @return the delegators (typically email URIs, e.g.
187             * "mailto:janedoe@example.com")
188             * @see <a href="http://tools.ietf.org/html/rfc5545#page-17">RFC 5545
189             * p.17</a>
190             */
191            public List<String> getDelegatedFrom() {
192                    return parameters.getDelegatedFrom();
193            }
194    
195            /**
196             * Adds a person who has delegated his or her responsibility to the
197             * attendee.
198             * @param uri the delegator (typically an email URI, e.g.
199             * "mailto:janedoe@example.com")
200             * @see <a href="http://tools.ietf.org/html/rfc5545#page-17">RFC 5545
201             * p.17</a>
202             */
203            public void addDelegatedFrom(String uri) {
204                    parameters.addDelegatedFrom(uri);
205            }
206    
207            /**
208             * Gets the people to which the attendee has delegated his or her
209             * responsibility.
210             * @return the delegatees (typically email URIs, e.g.
211             * "mailto:janedoe@example.com")
212             * @see <a href="http://tools.ietf.org/html/rfc5545#page-17">RFC 5545
213             * p.17-8</a>
214             */
215            public List<String> getDelegatedTo() {
216                    return parameters.getDelegatedTo();
217            }
218    
219            /**
220             * Adds a person to which the attendee has delegated his or her
221             * responsibility.
222             * @param uri the delegatee (typically an email URI, e.g.
223             * "mailto:janedoe@example.com")
224             * @see <a href="http://tools.ietf.org/html/rfc5545#page-17">RFC 5545
225             * p.17-8</a>
226             */
227            public void addDelegatedTo(String uri) {
228                    parameters.addDelegatedTo(uri);
229            }
230    
231            @Override
232            public String getSentBy() {
233                    return super.getSentBy();
234            }
235    
236            @Override
237            public void setSentBy(String uri) {
238                    super.setSentBy(uri);
239            }
240    
241            @Override
242            public String getCommonName() {
243                    return super.getCommonName();
244            }
245    
246            @Override
247            public void setCommonName(String commonName) {
248                    super.setCommonName(commonName);
249            }
250    
251            @Override
252            public String getDirectoryEntry() {
253                    return super.getDirectoryEntry();
254            }
255    
256            @Override
257            public void setDirectoryEntry(String uri) {
258                    super.setDirectoryEntry(uri);
259            }
260    
261            /**
262             * Gets the language that the common name parameter is written in.
263             */
264            @Override
265            public String getLanguage() {
266                    return super.getLanguage();
267            }
268    
269            /**
270             * Sets the language that the common name parameter is written in.
271             */
272            @Override
273            public void setLanguage(String language) {
274                    super.setLanguage(language);
275            }
276    
277    }