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.service.ConversationFlagStatus;
029import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
030import microsoft.exchange.webservices.data.core.enumeration.property.Importance;
031import microsoft.exchange.webservices.data.core.enumeration.property.PropertyDefinitionFlags;
032import microsoft.exchange.webservices.data.property.complex.ConversationId;
033import microsoft.exchange.webservices.data.property.complex.ICreateComplexPropertyDelegate;
034import microsoft.exchange.webservices.data.property.complex.ItemIdCollection;
035import microsoft.exchange.webservices.data.property.complex.StringList;
036import microsoft.exchange.webservices.data.property.definition.BoolPropertyDefinition;
037import microsoft.exchange.webservices.data.property.definition.ComplexPropertyDefinition;
038import microsoft.exchange.webservices.data.property.definition.DateTimePropertyDefinition;
039import microsoft.exchange.webservices.data.property.definition.GenericPropertyDefinition;
040import microsoft.exchange.webservices.data.property.definition.IntPropertyDefinition;
041import microsoft.exchange.webservices.data.property.definition.PropertyDefinition;
042import microsoft.exchange.webservices.data.property.definition.StringPropertyDefinition;
043
044import java.util.EnumSet;
045
046/**
047 * Represents the schema for Conversation.
048 */
049@Schema
050public class ConversationSchema extends ServiceObjectSchema {
051
052  /**
053   * Field URIs for Item.
054   */
055  private static class FieldUris {
056    /**
057     * The Constant ConversationId.
058     */
059    public static final String ConversationId =
060        "conversation:ConversationId";
061
062    /**
063     * The Constant ConversationTopic.
064     */
065    public static final String ConversationTopic =
066        "conversation:ConversationTopic";
067
068    /**
069     * The Constant UniqueRecipients.
070     */
071    public static final String UniqueRecipients =
072        "conversation:UniqueRecipients";
073
074    /**
075     * The Constant GlobalUniqueRecipients.
076     */
077    public static final String GlobalUniqueRecipients =
078        "conversation:GlobalUniqueRecipients";
079
080    /**
081     * The Constant UniqueUnreadSenders.
082     */
083    public static final String UniqueUnreadSenders =
084        "conversation:UniqueUnreadSenders";
085
086    /**
087     * The Constant GlobalUniqueUnreadSenders.
088     */
089    public static final String GlobalUniqueUnreadSenders =
090        "conversation:GlobalUniqueUnreadSenders";
091
092    /**
093     * The Constant UniqueSenders.
094     */
095    public static final String UniqueSenders = "conversation:UniqueSenders";
096
097    /**
098     * The Constant GlobalUniqueSenders.
099     */
100    public static final String GlobalUniqueSenders =
101        "conversation:GlobalUniqueSenders";
102
103    /**
104     * The Constant LastDeliveryTime.
105     */
106    public static final String LastDeliveryTime =
107        "conversation:LastDeliveryTime";
108
109    /**
110     * The Constant GlobalLastDeliveryTime.
111     */
112    public static final String GlobalLastDeliveryTime =
113        "conversation:GlobalLastDeliveryTime";
114
115    /**
116     * The Constant Categories.
117     */
118    public static final String Categories = "conversation:Categories";
119
120    /**
121     * The Constant GlobalCategories.
122     */
123    public static final String GlobalCategories =
124        "conversation:GlobalCategories";
125
126    /**
127     * The Constant FlagStatus.
128     */
129    public static final String FlagStatus = "conversation:FlagStatus";
130
131    /**
132     * The Constant GlobalFlagStatus.
133     */
134    public static final String GlobalFlagStatus =
135        "conversation:GlobalFlagStatus";
136
137    /**
138     * The Constant HasAttachments.
139     */
140    public static final String HasAttachments =
141        "conversation:HasAttachments";
142
143    /**
144     * The Constant GlobalHasAttachments.
145     */
146    public static final String GlobalHasAttachments =
147        "conversation:GlobalHasAttachments";
148
149    /**
150     * The Constant MessageCount.
151     */
152    public static final String MessageCount = "conversation:MessageCount";
153
154    /**
155     * The Constant GlobalMessageCount.
156     */
157    public static final String GlobalMessageCount =
158        "conversation:GlobalMessageCount";
159
160    /**
161     * The Constant UnreadCount.
162     */
163    public static final String UnreadCount = "conversation:UnreadCount";
164
165    /**
166     * The Constant GlobalUnreadCount.
167     */
168    public static final String GlobalUnreadCount =
169        "conversation:GlobalUnreadCount";
170
171    /**
172     * The Constant Size.
173     */
174    public static final String Size = "conversation:Size";
175
176    /**
177     * The Constant GlobalSize.
178     */
179    public static final String GlobalSize = "conversation:GlobalSize";
180
181    /**
182     * The Constant ItemClasses.
183     */
184    public static final String ItemClasses = "conversation:ItemClasses";
185
186    /**
187     * The Constant GlobalItemClasses.
188     */
189    public static final String GlobalItemClasses =
190        "conversation:GlobalItemClasses";
191
192    /**
193     * The Constant Importance.
194     */
195    public static final String Importance = "conversation:Importance";
196
197    /**
198     * The Constant GlobalImportance.
199     */
200    public static final String GlobalImportance =
201        "conversation:GlobalImportance";
202
203    /**
204     * The Constant ItemIds.
205     */
206    public static final String ItemIds = "conversation:ItemIds";
207
208    /**
209     * The Constant GlobalItemIds.
210     */
211    public static final String GlobalItemIds = "conversation:GlobalItemIds";
212
213  }
214
215
216  /**
217   * Defines the Id property.
218   */
219  public static final PropertyDefinition Id = new ComplexPropertyDefinition<ConversationId>(
220      ConversationId.class,
221      XmlElementNames.ConversationId, FieldUris.ConversationId, EnumSet
222      .of(PropertyDefinitionFlags.CanFind),
223      ExchangeVersion.Exchange2010_SP1,
224      new ICreateComplexPropertyDelegate<ConversationId>() {
225        public ConversationId createComplexProperty() {
226          return new ConversationId();
227        }
228      });
229
230  /**
231   * Defines the Topic property.
232   */
233  public static final PropertyDefinition Topic =
234      new StringPropertyDefinition(
235          XmlElementNames.ConversationTopic,
236          FieldUris.ConversationTopic,
237          EnumSet
238              .of(PropertyDefinitionFlags.CanFind),
239          ExchangeVersion.Exchange2010_SP1);
240
241  /**
242   * Defines the UniqueRecipients property.
243   */
244  public static final PropertyDefinition UniqueRecipients = new
245      ComplexPropertyDefinition<StringList>(
246      StringList.class,
247      XmlElementNames.UniqueRecipients,
248      FieldUris.UniqueRecipients, EnumSet
249      .of(PropertyDefinitionFlags.CanFind),
250      ExchangeVersion.Exchange2010_SP1,
251      new ICreateComplexPropertyDelegate<StringList>() {
252        public StringList createComplexProperty() {
253          return new StringList();
254        }
255      });
256
257
258  /**
259   * Defines the GlobalUniqueRecipients property.
260   */
261  public static final PropertyDefinition GlobalUniqueRecipients =
262      new ComplexPropertyDefinition<StringList>(
263          StringList.class,
264          XmlElementNames.GlobalUniqueRecipients,
265          FieldUris.GlobalUniqueRecipients,
266          EnumSet
267              .of(PropertyDefinitionFlags.CanFind),
268          ExchangeVersion.Exchange2010_SP1,
269          new ICreateComplexPropertyDelegate<StringList>() {
270            public StringList createComplexProperty() {
271              return new StringList();
272            }
273          });
274
275  /**
276   * Defines the UniqueUnreadSenders property.
277   */
278  public static final PropertyDefinition UniqueUnreadSenders =
279      new ComplexPropertyDefinition<StringList>(
280          StringList.class,
281          XmlElementNames.UniqueUnreadSenders,
282          FieldUris.UniqueUnreadSenders,
283          EnumSet
284              .of(PropertyDefinitionFlags.CanFind),
285          ExchangeVersion.Exchange2010_SP1,
286          new ICreateComplexPropertyDelegate<StringList>() {
287            public StringList createComplexProperty() {
288              return new StringList();
289            }
290          });
291
292  /**
293   * Defines the GlobalUniqueUnreadSenders property.
294   */
295  public static final PropertyDefinition GlobalUniqueUnreadSenders =
296      new ComplexPropertyDefinition<StringList>(
297          StringList.class,
298          XmlElementNames.GlobalUniqueUnreadSenders,
299          FieldUris.GlobalUniqueUnreadSenders,
300          EnumSet
301              .of(PropertyDefinitionFlags.CanFind),
302          ExchangeVersion.Exchange2010_SP1,
303          new ICreateComplexPropertyDelegate<StringList>() {
304            public StringList createComplexProperty() {
305              return new StringList();
306            }
307          });
308
309  /**
310   * Defines the UniqueSenders property.
311   */
312  public static final PropertyDefinition UniqueSenders =
313      new ComplexPropertyDefinition<StringList>(
314          StringList.class,
315          XmlElementNames.UniqueSenders,
316          FieldUris.UniqueSenders,
317          EnumSet
318              .of(PropertyDefinitionFlags.CanFind),
319          ExchangeVersion.Exchange2010_SP1,
320          new ICreateComplexPropertyDelegate<StringList>() {
321            public StringList createComplexProperty() {
322              return new StringList();
323            }
324          });
325
326  /**
327   * Defines the GlobalUniqueSenders property.
328   */
329  public static final PropertyDefinition GlobalUniqueSenders =
330      new ComplexPropertyDefinition<StringList>(
331          StringList.class,
332          XmlElementNames.GlobalUniqueSenders,
333          FieldUris.GlobalUniqueSenders,
334          EnumSet
335              .of(PropertyDefinitionFlags.CanFind),
336          ExchangeVersion.Exchange2010_SP1,
337          new ICreateComplexPropertyDelegate<StringList>() {
338            public StringList createComplexProperty() {
339              return new StringList();
340            }
341          });
342
343  /**
344   * Defines the LastDeliveryTime property.
345   */
346  public static final PropertyDefinition LastDeliveryTime =
347      new DateTimePropertyDefinition(
348          XmlElementNames.LastDeliveryTime,
349          FieldUris.LastDeliveryTime,
350          EnumSet
351              .of(PropertyDefinitionFlags.CanFind),
352          ExchangeVersion.Exchange2010_SP1);
353
354  /**
355   * Defines the GlobalLastDeliveryTime property.
356   */
357  public static final PropertyDefinition GlobalLastDeliveryTime =
358      new DateTimePropertyDefinition(
359          XmlElementNames.GlobalLastDeliveryTime,
360          FieldUris.GlobalLastDeliveryTime,
361          EnumSet
362              .of(PropertyDefinitionFlags.CanFind),
363          ExchangeVersion.Exchange2010_SP1);
364
365  /**
366   * Defines the Categories property.
367   */
368  public static final PropertyDefinition Categories =
369      new ComplexPropertyDefinition<StringList>(
370          StringList.class,
371          XmlElementNames.Categories,
372          FieldUris.Categories,
373          EnumSet
374              .of(PropertyDefinitionFlags.CanFind),
375          ExchangeVersion.Exchange2010_SP1,
376          new ICreateComplexPropertyDelegate<StringList>() {
377            public StringList createComplexProperty() {
378              return new StringList();
379            }
380          });
381
382  /**
383   * Defines the GlobalCategories property.
384   */
385  public static final PropertyDefinition GlobalCategories =
386      new ComplexPropertyDefinition<StringList>(
387          StringList.class,
388          XmlElementNames.GlobalCategories,
389          FieldUris.GlobalCategories,
390          EnumSet
391              .of(PropertyDefinitionFlags.CanFind),
392          ExchangeVersion.Exchange2010_SP1,
393          new ICreateComplexPropertyDelegate<StringList>() {
394            public StringList createComplexProperty() {
395              return new StringList();
396            }
397          });
398
399  /**
400   * Defines the FlagStatus property.
401   */
402  public static final PropertyDefinition FlagStatus =
403      new GenericPropertyDefinition<ConversationFlagStatus>(
404          ConversationFlagStatus.class,
405          XmlElementNames.FlagStatus,
406          FieldUris.FlagStatus,
407          EnumSet
408              .of(PropertyDefinitionFlags.CanFind),
409          ExchangeVersion.Exchange2010_SP1);
410
411  /**
412   * Defines the GlobalFlagStatus property.
413   */
414  public static final PropertyDefinition GlobalFlagStatus =
415      new GenericPropertyDefinition<ConversationFlagStatus>(
416          ConversationFlagStatus.class,
417          XmlElementNames.GlobalFlagStatus,
418          FieldUris.GlobalFlagStatus,
419          EnumSet
420              .of(PropertyDefinitionFlags.CanFind),
421          ExchangeVersion.Exchange2010_SP1);
422
423  /**
424   * Defines the HasAttachments property.
425   */
426  public static final PropertyDefinition HasAttachments =
427      new BoolPropertyDefinition(
428          XmlElementNames.HasAttachments,
429          FieldUris.HasAttachments,
430          EnumSet
431              .of(PropertyDefinitionFlags.CanFind),
432          ExchangeVersion.Exchange2010_SP1);
433
434  /**
435   * Defines the GlobalHasAttachments property.
436   */
437  public static final PropertyDefinition GlobalHasAttachments =
438      new BoolPropertyDefinition(
439          XmlElementNames.GlobalHasAttachments,
440          FieldUris.GlobalHasAttachments,
441          EnumSet
442              .of(PropertyDefinitionFlags.CanFind),
443          ExchangeVersion.Exchange2010_SP1);
444
445  /**
446   * Defines the MessageCount property.
447   */
448  public static final PropertyDefinition MessageCount =
449      new IntPropertyDefinition(
450          XmlElementNames.MessageCount,
451          FieldUris.MessageCount,
452          EnumSet
453              .of(PropertyDefinitionFlags.CanFind),
454          ExchangeVersion.Exchange2010_SP1);
455
456  /**
457   * Defines the GlobalMessageCount property.
458   */
459  public static final PropertyDefinition GlobalMessageCount =
460      new IntPropertyDefinition(
461          XmlElementNames.GlobalMessageCount,
462          FieldUris.GlobalMessageCount,
463          EnumSet
464              .of(PropertyDefinitionFlags.CanFind),
465          ExchangeVersion.Exchange2010_SP1);
466
467  /**
468   * Defines the UnreadCount property.
469   */
470  public static final PropertyDefinition UnreadCount =
471      new IntPropertyDefinition(
472          XmlElementNames.UnreadCount,
473          FieldUris.UnreadCount,
474          EnumSet
475              .of(PropertyDefinitionFlags.CanFind),
476          ExchangeVersion.Exchange2010_SP1);
477
478  /**
479   * Defines the GlobalUnreadCount property.
480   */
481  public static final PropertyDefinition GlobalUnreadCount =
482      new IntPropertyDefinition(
483          XmlElementNames.GlobalUnreadCount,
484          FieldUris.GlobalUnreadCount,
485          EnumSet
486              .of(PropertyDefinitionFlags.CanFind),
487          ExchangeVersion.Exchange2010_SP1);
488
489  /**
490   * Defines the Size property.
491   */
492  public static final PropertyDefinition Size =
493      new IntPropertyDefinition(
494          XmlElementNames.Size,
495          FieldUris.Size,
496          EnumSet
497              .of(PropertyDefinitionFlags.CanFind),
498          ExchangeVersion.Exchange2010_SP1);
499
500  /**
501   * Defines the GlobalSize property.
502   */
503  public static final PropertyDefinition GlobalSize =
504      new IntPropertyDefinition(
505          XmlElementNames.GlobalSize,
506          FieldUris.GlobalSize,
507          EnumSet
508              .of(PropertyDefinitionFlags.CanFind),
509          ExchangeVersion.Exchange2010_SP1);
510
511  /**
512   * Defines the ItemClasses property.
513   */
514  public static final PropertyDefinition ItemClasses =
515      new ComplexPropertyDefinition<StringList>(
516          StringList.class,
517          XmlElementNames.ItemClasses,
518          FieldUris.ItemClasses,
519          EnumSet
520              .of(PropertyDefinitionFlags.CanFind),
521          ExchangeVersion.Exchange2010_SP1,
522          new ICreateComplexPropertyDelegate<StringList>() {
523            public StringList createComplexProperty() {
524              return new StringList(XmlElementNames.
525                  ItemClass);
526            }
527          });
528
529  /**
530   * Defines the GlobalItemClasses property.
531   */
532  public static final PropertyDefinition GlobalItemClasses =
533      new ComplexPropertyDefinition<StringList>(
534          StringList.class,
535          XmlElementNames.GlobalItemClasses,
536          FieldUris.GlobalItemClasses,
537          EnumSet
538              .of(PropertyDefinitionFlags.CanFind),
539          ExchangeVersion.Exchange2010_SP1,
540          new ICreateComplexPropertyDelegate<StringList>() {
541            public StringList createComplexProperty() {
542              return new StringList(XmlElementNames.
543                  ItemClass);
544            }
545          });
546
547  /**
548   * Defines the Importance property.
549   */
550  public static final PropertyDefinition Importance =
551      new GenericPropertyDefinition<microsoft.exchange.webservices.data.core.enumeration.property.Importance>(
552          Importance.class,
553          XmlElementNames.Importance,
554          FieldUris.Importance,
555          EnumSet
556              .of(PropertyDefinitionFlags.CanFind),
557          ExchangeVersion.Exchange2010_SP1);
558
559  /**
560   * Defines the GlobalImportance property.
561   */
562  public static final PropertyDefinition GlobalImportance =
563      new GenericPropertyDefinition<Importance>(
564          Importance.class,
565          XmlElementNames.GlobalImportance,
566          FieldUris.GlobalImportance,
567          EnumSet
568              .of(PropertyDefinitionFlags.CanFind),
569          ExchangeVersion.Exchange2010_SP1);
570
571  /**
572   * Defines the ItemIds property.
573   */
574  public static final PropertyDefinition ItemIds =
575      new ComplexPropertyDefinition<ItemIdCollection>(
576          ItemIdCollection.class,
577          XmlElementNames.ItemIds,
578          FieldUris.ItemIds,
579          EnumSet
580              .of(PropertyDefinitionFlags.CanFind),
581          ExchangeVersion.Exchange2010_SP1,
582          new ICreateComplexPropertyDelegate<ItemIdCollection>() {
583            public ItemIdCollection createComplexProperty() {
584              return new ItemIdCollection();
585            }
586          });
587
588  /**
589   * Defines the GlobalItemIds property.
590   */
591  public static final PropertyDefinition GlobalItemIds =
592      new ComplexPropertyDefinition<ItemIdCollection>(
593          ItemIdCollection.class,
594          XmlElementNames.GlobalItemIds,
595          FieldUris.GlobalItemIds,
596          EnumSet
597              .of(PropertyDefinitionFlags.CanFind),
598          ExchangeVersion.Exchange2010_SP1,
599          new ICreateComplexPropertyDelegate<ItemIdCollection>() {
600            public ItemIdCollection createComplexProperty() {
601              return new ItemIdCollection();
602            }
603          });
604
605  /**
606   * This must be declared after the property definitions
607   */
608  public static final ConversationSchema Instance =
609      new ConversationSchema();
610
611  /**
612   * Registers property.
613   */
614  @Override
615  protected void registerProperties() {
616    super.registerProperties();
617
618    this.registerProperty(Id);
619    this.registerProperty(Topic);
620    this.registerProperty(UniqueRecipients);
621    this.registerProperty(GlobalUniqueRecipients);
622    this.registerProperty(UniqueUnreadSenders);
623    this.registerProperty(GlobalUniqueUnreadSenders);
624    this.registerProperty(UniqueSenders);
625    this.registerProperty(GlobalUniqueSenders);
626    this.registerProperty(LastDeliveryTime);
627    this.registerProperty(GlobalLastDeliveryTime);
628    this.registerProperty(Categories);
629    this.registerProperty(GlobalCategories);
630    this.registerProperty(FlagStatus);
631    this.registerProperty(GlobalFlagStatus);
632    this.registerProperty(HasAttachments);
633    this.registerProperty(GlobalHasAttachments);
634    this.registerProperty(MessageCount);
635    this.registerProperty(GlobalMessageCount);
636    this.registerProperty(UnreadCount);
637    this.registerProperty(GlobalUnreadCount);
638    this.registerProperty(Size);
639    this.registerProperty(GlobalSize);
640    this.registerProperty(ItemClasses);
641    this.registerProperty(GlobalItemClasses);
642    this.registerProperty(Importance);
643    this.registerProperty(GlobalImportance);
644    this.registerProperty(ItemIds);
645    this.registerProperty(GlobalItemIds);
646  }
647
648  /**
649   * Initializes a new instance of
650   * the ConversationSchema class.
651   */
652  protected ConversationSchema() {
653    super();
654  }
655
656
657
658}