001/*
002 * The MIT License
003 * Copyright (c) 2012 Microsoft Corporation
004 *
005 * Permission is hereby granted, free of charge, to any person obtaining a copy
006 * of this software and associated documentation files (the "Software"), to deal
007 * in the Software without restriction, including without limitation the rights
008 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
009 * copies of the Software, and to permit persons to whom the Software is
010 * furnished to do so, subject to the following conditions:
011 *
012 * The above copyright notice and this permission notice shall be included in
013 * all copies or substantial portions of the Software.
014 *
015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
018 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
020 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
021 * THE SOFTWARE.
022 */
023
024package microsoft.exchange.webservices.data.core.service.schema;
025
026import microsoft.exchange.webservices.data.attribute.Schema;
027import microsoft.exchange.webservices.data.core.XmlElementNames;
028import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
029import microsoft.exchange.webservices.data.core.enumeration.property.MeetingResponseType;
030import microsoft.exchange.webservices.data.core.enumeration.property.PropertyDefinitionFlags;
031import microsoft.exchange.webservices.data.property.complex.ICreateComplexPropertyDelegate;
032import microsoft.exchange.webservices.data.property.complex.ItemId;
033import microsoft.exchange.webservices.data.property.definition.BoolPropertyDefinition;
034import microsoft.exchange.webservices.data.property.definition.ComplexPropertyDefinition;
035import microsoft.exchange.webservices.data.property.definition.GenericPropertyDefinition;
036import microsoft.exchange.webservices.data.property.definition.PropertyDefinition;
037
038import java.util.EnumSet;
039
040/**
041 * Represents the schema for meeting messages.
042 */
043@Schema
044public class MeetingMessageSchema extends EmailMessageSchema {
045
046  /**
047   * Field URIs for MeetingMessage.
048   */
049  private static interface FieldUris {
050
051    /**
052     * The Associated calendar item id.
053     */
054    String AssociatedCalendarItemId = "meeting:AssociatedCalendarItemId";
055
056    /**
057     * The Is delegated.
058     */
059    String IsDelegated = "meeting:IsDelegated";
060
061    /**
062     * The Is out of date.
063     */
064    String IsOutOfDate = "meeting:IsOutOfDate";
065
066    /**
067     * The Has been processed.
068     */
069    String HasBeenProcessed = "meeting:HasBeenProcessed";
070
071    /**
072     * The Response type.
073     */
074    String ResponseType = "meeting:ResponseType";
075  }
076
077
078  /**
079   * Defines the AssociatedAppointmentId property.
080   */
081  public static final PropertyDefinition AssociatedAppointmentId =
082      new ComplexPropertyDefinition<ItemId>(
083          //    ItemId.class,
084          XmlElementNames.AssociatedCalendarItemId,
085          FieldUris.AssociatedCalendarItemId,
086          ExchangeVersion.Exchange2007_SP1,
087          new ICreateComplexPropertyDelegate<ItemId>() {
088            @Override
089            public ItemId createComplexProperty() {
090              return new ItemId();
091            }
092          });
093
094  /**
095   * Defines the IsDelegated property.
096   */
097  public static final PropertyDefinition IsDelegated =
098      new BoolPropertyDefinition(
099          XmlElementNames.IsDelegated, FieldUris.IsDelegated, EnumSet
100          .of(PropertyDefinitionFlags.CanFind),
101          ExchangeVersion.Exchange2007_SP1);
102
103  /**
104   * Defines the IsOutOfDate property.
105   */
106  public static final PropertyDefinition IsOutOfDate =
107      new BoolPropertyDefinition(
108          XmlElementNames.IsOutOfDate, FieldUris.IsOutOfDate,
109          ExchangeVersion.Exchange2007_SP1);
110
111  /**
112   * Defines the HasBeenProcessed property.
113   */
114  public static final PropertyDefinition HasBeenProcessed =
115      new BoolPropertyDefinition(
116          XmlElementNames.HasBeenProcessed, FieldUris.HasBeenProcessed,
117          EnumSet.of(PropertyDefinitionFlags.CanFind),
118          ExchangeVersion.Exchange2007_SP1);
119
120  /**
121   * Defines the ResponseType property.
122   */
123  public static final PropertyDefinition ResponseType =
124      new GenericPropertyDefinition<MeetingResponseType>(
125          MeetingResponseType.class,
126          XmlElementNames.ResponseType, FieldUris.ResponseType, EnumSet
127          .of(PropertyDefinitionFlags.CanFind),
128          ExchangeVersion.Exchange2007_SP1);
129
130  /**
131   * Defines the ICalendar Uid property.
132   */
133  public static final PropertyDefinition ICalUid = AppointmentSchema.ICalUid;
134
135  /**
136   * Defines the ICalendar RecurrenceId property.
137   */
138  public static final PropertyDefinition ICalRecurrenceId =
139      AppointmentSchema.ICalRecurrenceId;
140
141  /**
142   * Defines the ICalendar DateTimeStamp property.
143   */
144  public static final PropertyDefinition ICalDateTimeStamp =
145      AppointmentSchema.ICalDateTimeStamp;
146
147  /**
148   * This must be after the declaration of property definitions.
149   */
150  protected static final MeetingMessageSchema Instance =
151      new MeetingMessageSchema();
152
153  /**
154   * Gets the single instance of MeetingMessageSchema.
155   *
156   * @return single instance of MeetingMessageSchema
157   */
158  public static MeetingMessageSchema getInstance() {
159    return Instance;
160  }
161
162  /**
163   * Registers property.
164   * <p/>
165   * IMPORTANT NOTE: PROPERTIES MUST BE REGISTERED IN SCHEMA ORDER (i.e. the
166   * same order as they are defined in types.xsd)
167   */
168  @Override
169  protected void registerProperties() {
170    super.registerProperties();
171
172    this.registerProperty(AssociatedAppointmentId);
173    this.registerProperty(IsDelegated);
174    this.registerProperty(IsOutOfDate);
175    this.registerProperty(HasBeenProcessed);
176    this.registerProperty(ResponseType);
177    this.registerProperty(ICalUid);
178    this.registerProperty(ICalRecurrenceId);
179    this.registerProperty(ICalDateTimeStamp);
180  }
181
182  /**
183   * Initializes a new instance of the class.
184   */
185  protected MeetingMessageSchema() {
186    super();
187  }
188
189}