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.PropertyDefinitionFlags;
030import microsoft.exchange.webservices.data.core.enumeration.service.TaskMode;
031import microsoft.exchange.webservices.data.core.enumeration.service.TaskStatus;
032import microsoft.exchange.webservices.data.property.complex.ICreateComplexPropertyDelegate;
033import microsoft.exchange.webservices.data.property.complex.StringList;
034import microsoft.exchange.webservices.data.property.definition.BoolPropertyDefinition;
035import microsoft.exchange.webservices.data.property.definition.ComplexPropertyDefinition;
036import microsoft.exchange.webservices.data.property.definition.DateTimePropertyDefinition;
037import microsoft.exchange.webservices.data.property.definition.DoublePropertyDefinition;
038import microsoft.exchange.webservices.data.property.definition.GenericPropertyDefinition;
039import microsoft.exchange.webservices.data.property.definition.IntPropertyDefinition;
040import microsoft.exchange.webservices.data.property.definition.PropertyDefinition;
041import microsoft.exchange.webservices.data.property.definition.RecurrencePropertyDefinition;
042import microsoft.exchange.webservices.data.property.definition.StringPropertyDefinition;
043import microsoft.exchange.webservices.data.property.definition.TaskDelegationStatePropertyDefinition;
044
045import java.util.EnumSet;
046
047/**
048 * Represents the schema for task item.
049 */
050@Schema
051public class TaskSchema extends ItemSchema {
052
053  /**
054   * Field URIs for tasks.
055   */
056  private static class FieldUris {
057
058    /**
059     * The Constant ActualWork.
060     */
061    public final static String ActualWork = "task:ActualWork";
062
063    /**
064     * The Constant AssignedTime.
065     */
066    public final static String AssignedTime = "task:AssignedTime";
067
068    /**
069     * The Constant BillingInformation.
070     */
071    public final static String BillingInformation =
072        "task:BillingInformation";
073
074    /**
075     * The Constant ChangeCount.
076     */
077    public final static String ChangeCount = "task:ChangeCount";
078
079    /**
080     * The Constant Companies.
081     */
082    public final static String Companies = "task:Companies";
083
084    /**
085     * The Constant CompleteDate.
086     */
087    public final static String CompleteDate = "task:CompleteDate";
088
089    /**
090     * The Constant Contacts.
091     */
092    public final static String Contacts = "task:Contacts";
093
094    /**
095     * The Constant DelegationState.
096     */
097    public final static String DelegationState = "task:DelegationState";
098
099    /**
100     * The Constant Delegator.
101     */
102    public final static String Delegator = "task:Delegator";
103
104    /**
105     * The Constant DueDate.
106     */
107    public final static String DueDate = "task:DueDate";
108
109    /**
110     * The Constant IsAssignmentEditable.
111     */
112    public final static String IsAssignmentEditable =
113        "task:IsAssignmentEditable";
114
115    /**
116     * The Constant IsComplete.
117     */
118    public final static String IsComplete = "task:IsComplete";
119
120    /**
121     * The Constant IsRecurring.
122     */
123    public final static String IsRecurring = "task:IsRecurring";
124
125    /**
126     * The Constant IsTeamTask.
127     */
128    public final static String IsTeamTask = "task:IsTeamTask";
129
130    /**
131     * The Constant Mileage.
132     */
133    public final static String Mileage = "task:Mileage";
134
135    /**
136     * The Constant Owner.
137     */
138    public final static String Owner = "task:Owner";
139
140    /**
141     * The Constant PercentComplete.
142     */
143    public final static String PercentComplete = "task:PercentComplete";
144
145    /**
146     * The Constant Recurrence.
147     */
148    public final static String Recurrence = "task:Recurrence";
149
150    /**
151     * The Constant StartDate.
152     */
153    public final static String StartDate = "task:StartDate";
154
155    /**
156     * The Constant Status.
157     */
158    public final static String Status = "task:Status";
159
160    /**
161     * The Constant StatusDescription.
162     */
163    public final static String StatusDescription = "task:StatusDescription";
164
165    /**
166     * The Constant TotalWork.
167     */
168    public final static String TotalWork = "task:TotalWork";
169  }
170
171
172  /**
173   * Defines the ActualWork property.
174   */
175  public static final PropertyDefinition ActualWork =
176      new IntPropertyDefinition(
177          XmlElementNames.ActualWork, FieldUris.ActualWork, EnumSet.of(
178          PropertyDefinitionFlags.CanSet,
179          PropertyDefinitionFlags.CanUpdate,
180          PropertyDefinitionFlags.CanDelete,
181          PropertyDefinitionFlags.CanFind),
182          ExchangeVersion.Exchange2007_SP1,
183
184          true); // isNullable
185
186  /**
187   * Defines the AssignedTime property.
188   */
189  public static final PropertyDefinition AssignedTime =
190      new DateTimePropertyDefinition(
191          XmlElementNames.AssignedTime, FieldUris.AssignedTime, EnumSet
192          .of(PropertyDefinitionFlags.CanFind),
193          ExchangeVersion.Exchange2007_SP1, true);
194
195  /**
196   * Defines the BillingInformation property.
197   */
198  public static final PropertyDefinition BillingInformation =
199      new StringPropertyDefinition(
200          XmlElementNames.BillingInformation, FieldUris.BillingInformation,
201          EnumSet.of(PropertyDefinitionFlags.CanSet,
202              PropertyDefinitionFlags.CanUpdate,
203              PropertyDefinitionFlags.CanDelete,
204              PropertyDefinitionFlags.CanFind),
205          ExchangeVersion.Exchange2007_SP1);
206
207  /**
208   * Defines the ChangeCount property.
209   */
210  public static final PropertyDefinition ChangeCount =
211      new IntPropertyDefinition(
212          XmlElementNames.ChangeCount, FieldUris.ChangeCount, EnumSet
213          .of(PropertyDefinitionFlags.CanFind),
214          ExchangeVersion.Exchange2007_SP1);
215
216  /**
217   * Defines the Companies property.
218   */
219  public static final PropertyDefinition Companies =
220      new ComplexPropertyDefinition<StringList>(
221          StringList.class,
222          XmlElementNames.Companies, FieldUris.Companies, EnumSet.of(
223          PropertyDefinitionFlags.AutoInstantiateOnRead,
224          PropertyDefinitionFlags.CanSet,
225          PropertyDefinitionFlags.CanUpdate,
226          PropertyDefinitionFlags.CanDelete,
227          PropertyDefinitionFlags.CanFind),
228          ExchangeVersion.Exchange2007_SP1,
229          new ICreateComplexPropertyDelegate<StringList>() {
230            public StringList createComplexProperty() {
231              return new StringList();
232            }
233          });
234
235  /**
236   * Defines the CompleteDate property.
237   */
238  public static final PropertyDefinition CompleteDate =
239      new DateTimePropertyDefinition(
240          XmlElementNames.CompleteDate, FieldUris.CompleteDate, EnumSet.of(
241          PropertyDefinitionFlags.CanSet,
242          PropertyDefinitionFlags.CanUpdate,
243          PropertyDefinitionFlags.CanDelete,
244          PropertyDefinitionFlags.CanFind),
245          ExchangeVersion.Exchange2007_SP1, true); // isNullable
246
247  /**
248   * Defines the Contacts property.
249   */
250  public static final PropertyDefinition Contacts =
251      new ComplexPropertyDefinition<StringList>(
252          StringList.class,
253          XmlElementNames.Contacts, FieldUris.Contacts, EnumSet.of(
254          PropertyDefinitionFlags.AutoInstantiateOnRead,
255          PropertyDefinitionFlags.CanSet,
256          PropertyDefinitionFlags.CanUpdate,
257          PropertyDefinitionFlags.CanDelete,
258          PropertyDefinitionFlags.CanFind),
259          ExchangeVersion.Exchange2007_SP1,
260          new ICreateComplexPropertyDelegate<StringList>() {
261            public StringList createComplexProperty() {
262              return new StringList();
263            }
264          });
265
266  /**
267   * Defines the DelegationState property.
268   */
269  public static final PropertyDefinition DelegationState =
270      new TaskDelegationStatePropertyDefinition(
271          XmlElementNames.DelegationState, FieldUris.DelegationState, EnumSet
272          .of(PropertyDefinitionFlags.CanFind),
273          ExchangeVersion.Exchange2007_SP1);
274
275  /**
276   * Defines the Delegator property.
277   */
278  public static final PropertyDefinition Delegator =
279      new StringPropertyDefinition(
280          XmlElementNames.Delegator, FieldUris.Delegator, EnumSet
281          .of(PropertyDefinitionFlags.CanFind),
282          ExchangeVersion.Exchange2007_SP1);
283
284  /**
285   * Defines the DueDate property.
286   */
287  public static final PropertyDefinition DueDate =
288      new DateTimePropertyDefinition(
289          XmlElementNames.DueDate, FieldUris.DueDate, EnumSet.of(
290          PropertyDefinitionFlags.CanSet,
291          PropertyDefinitionFlags.CanUpdate,
292          PropertyDefinitionFlags.CanDelete,
293          PropertyDefinitionFlags.CanFind),
294          ExchangeVersion.Exchange2007_SP1, true); // isNullable
295
296  /**
297   * Defines the Mode property.
298   */
299  public static final PropertyDefinition Mode =
300      new GenericPropertyDefinition<TaskMode>(
301          TaskMode.class,
302          XmlElementNames.IsAssignmentEditable,
303          FieldUris.IsAssignmentEditable, EnumSet
304          .of(PropertyDefinitionFlags.CanFind),
305          ExchangeVersion.Exchange2007_SP1);
306
307  /**
308   * Defines the IsComplete property.
309   */
310  public static final PropertyDefinition IsComplete =
311      new BoolPropertyDefinition(
312          XmlElementNames.IsComplete, FieldUris.IsComplete, EnumSet
313          .of(PropertyDefinitionFlags.CanFind),
314          ExchangeVersion.Exchange2007_SP1);
315
316  /**
317   * Defines the IsRecurring property.
318   */
319  public static final PropertyDefinition IsRecurring =
320      new BoolPropertyDefinition(
321          XmlElementNames.IsRecurring, FieldUris.IsRecurring, EnumSet
322          .of(PropertyDefinitionFlags.CanFind),
323          ExchangeVersion.Exchange2007_SP1);
324
325  /**
326   * Defines the IsTeamTask property.
327   */
328  public static final PropertyDefinition IsTeamTask =
329      new BoolPropertyDefinition(
330          XmlElementNames.IsTeamTask, FieldUris.IsTeamTask, EnumSet
331          .of(PropertyDefinitionFlags.CanFind),
332          ExchangeVersion.Exchange2007_SP1);
333
334  /**
335   * Defines the Mileage property.
336   */
337  public static final PropertyDefinition Mileage =
338      new StringPropertyDefinition(
339          XmlElementNames.Mileage, FieldUris.Mileage, EnumSet.of(
340          PropertyDefinitionFlags.CanSet,
341          PropertyDefinitionFlags.CanUpdate,
342          PropertyDefinitionFlags.CanDelete,
343          PropertyDefinitionFlags.CanFind),
344          ExchangeVersion.Exchange2007_SP1);
345
346  /**
347   * Defines the Owner property.
348   */
349  public static final PropertyDefinition Owner = new StringPropertyDefinition(
350      XmlElementNames.Owner, FieldUris.Owner, EnumSet
351      .of(PropertyDefinitionFlags.CanFind),
352      ExchangeVersion.Exchange2007_SP1);
353
354  /**
355   * Defines the PercentComplete property.
356   */
357  public static final PropertyDefinition PercentComplete =
358      new DoublePropertyDefinition(
359          XmlElementNames.PercentComplete, FieldUris.PercentComplete, EnumSet
360          .of(PropertyDefinitionFlags.CanSet,
361              PropertyDefinitionFlags.CanUpdate,
362              PropertyDefinitionFlags.CanFind),
363          ExchangeVersion.Exchange2007_SP1);
364
365  /**
366   * Defines the Recurrence property.
367   */
368  public static final PropertyDefinition Recurrence =
369      new RecurrencePropertyDefinition(
370          XmlElementNames.Recurrence, FieldUris.Recurrence, EnumSet.of(
371          PropertyDefinitionFlags.CanSet,
372          PropertyDefinitionFlags.CanUpdate,
373          PropertyDefinitionFlags.CanDelete),
374          ExchangeVersion.Exchange2007_SP1);
375
376  /**
377   * Defines the StartDate property.
378   */
379  public static final PropertyDefinition StartDate =
380      new DateTimePropertyDefinition(
381          XmlElementNames.StartDate, FieldUris.StartDate, EnumSet.of(
382          PropertyDefinitionFlags.CanSet,
383          PropertyDefinitionFlags.CanUpdate,
384          PropertyDefinitionFlags.CanDelete,
385          PropertyDefinitionFlags.CanFind),
386          ExchangeVersion.Exchange2007_SP1, true); // isNullable
387
388  /**
389   * Defines the Status property.
390   */
391  public static final PropertyDefinition Status =
392      new GenericPropertyDefinition<TaskStatus>(
393          TaskStatus.class,
394          XmlElementNames.Status, FieldUris.Status, EnumSet.of(
395          PropertyDefinitionFlags.CanSet,
396          PropertyDefinitionFlags.CanUpdate,
397          PropertyDefinitionFlags.CanFind),
398          ExchangeVersion.Exchange2007_SP1);
399
400  /**
401   * Defines the StatusDescription property.
402   */
403  public static final PropertyDefinition StatusDescription =
404      new StringPropertyDefinition(
405          XmlElementNames.StatusDescription, FieldUris.StatusDescription,
406          EnumSet.of(PropertyDefinitionFlags.CanFind),
407          ExchangeVersion.Exchange2007_SP1);
408
409  /**
410   * Defines the TotalWork property.
411   */
412  public static final PropertyDefinition TotalWork =
413      new IntPropertyDefinition(
414          XmlElementNames.TotalWork, FieldUris.TotalWork, EnumSet.of(
415          PropertyDefinitionFlags.CanSet,
416          PropertyDefinitionFlags.CanUpdate,
417          PropertyDefinitionFlags.CanDelete,
418          PropertyDefinitionFlags.CanFind),
419          ExchangeVersion.Exchange2007_SP1, true); // isNullable
420
421  /**
422   * This must be declared after the property definitions.
423   */
424  public static final TaskSchema Instance = new TaskSchema();
425
426  /**
427   * This must be declared after the property definitions.
428   */
429  @Override
430  protected void registerProperties() {
431    super.registerProperties();
432
433    this.registerProperty(ActualWork);
434    this.registerProperty(AssignedTime);
435    this.registerProperty(BillingInformation);
436    this.registerProperty(ChangeCount);
437    this.registerProperty(Companies);
438    this.registerProperty(CompleteDate);
439    this.registerProperty(Contacts);
440    this.registerProperty(DelegationState);
441    this.registerProperty(Delegator);
442    this.registerProperty(DueDate);
443    this.registerProperty(Mode);
444    this.registerProperty(IsComplete);
445    this.registerProperty(IsRecurring);
446    this.registerProperty(IsTeamTask);
447    this.registerProperty(Mileage);
448    this.registerProperty(Owner);
449    this.registerProperty(PercentComplete);
450    this.registerProperty(Recurrence);
451    this.registerProperty(StartDate);
452    this.registerProperty(Status);
453    this.registerProperty(StatusDescription);
454    this.registerProperty(TotalWork);
455  }
456
457  /**
458   * Initializes a new instance of the class.
459   */
460  TaskSchema() {
461    super();
462  }
463
464}