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.property.complex.FolderId;
031import microsoft.exchange.webservices.data.property.complex.ICreateComplexPropertyDelegate;
032import microsoft.exchange.webservices.data.property.complex.ManagedFolderInformation;
033import microsoft.exchange.webservices.data.property.definition.ComplexPropertyDefinition;
034import microsoft.exchange.webservices.data.property.definition.EffectiveRightsPropertyDefinition;
035import microsoft.exchange.webservices.data.property.definition.IntPropertyDefinition;
036import microsoft.exchange.webservices.data.property.definition.PermissionSetPropertyDefinition;
037import microsoft.exchange.webservices.data.property.definition.PropertyDefinition;
038import microsoft.exchange.webservices.data.property.definition.StringPropertyDefinition;
039
040import java.util.EnumSet;
041
042/**
043 * Represents the schema for folder.
044 */
045@Schema
046public class FolderSchema extends ServiceObjectSchema {
047
048  /**
049   * Field URIs for folder.
050   */
051  private static class FieldUris {
052
053    /**
054     * The Constant FolderId.
055     */
056    public final static String FolderId = "folder:FolderId";
057
058    /**
059     * The Constant ParentFolderId.
060     */
061    public final static String ParentFolderId = "folder:ParentFolderId";
062
063    /**
064     * The Constant DisplayName.
065     */
066    public final static String DisplayName = "folder:DisplayName";
067
068    /**
069     * The Constant UnreadCount.
070     */
071    public final static String UnreadCount = "folder:UnreadCount";
072
073    /**
074     * The Constant TotalCount.
075     */
076    public final static String TotalCount = "folder:TotalCount";
077
078    /**
079     * The Constant ChildFolderCount.
080     */
081    public final static String ChildFolderCount = "folder:ChildFolderCount";
082
083    /**
084     * The Constant FolderClass.
085     */
086    public final static String FolderClass = "folder:FolderClass";
087
088    /**
089     * The Constant ManagedFolderInformation.
090     */
091    public final static String ManagedFolderInformation =
092        "folder:ManagedFolderInformation";
093
094    /**
095     * The Constant EffectiveRights.
096     */
097    public final static String EffectiveRights = "folder:EffectiveRights";
098
099    /**
100     * The Constant PermissionSet.
101     */
102    public final static String PermissionSet = "folder:PermissionSet";
103  }
104
105
106  /**
107   * Defines the Id property.
108   */
109  public static final PropertyDefinition Id =
110      new ComplexPropertyDefinition<FolderId>(
111          FolderId.class,
112          XmlElementNames.FolderId, FieldUris.FolderId, EnumSet
113          .of(PropertyDefinitionFlags.CanFind),
114          ExchangeVersion.Exchange2007_SP1,
115          new ICreateComplexPropertyDelegate<FolderId>() {
116            public FolderId createComplexProperty() {
117              return new FolderId();
118            }
119          }
120
121      );
122
123  /**
124   * Defines the FolderClass property.
125   */
126  public static final PropertyDefinition FolderClass =
127      new StringPropertyDefinition(
128          XmlElementNames.FolderClass, FieldUris.FolderClass, EnumSet.of(
129          PropertyDefinitionFlags.CanSet,
130          PropertyDefinitionFlags.CanUpdate,
131          PropertyDefinitionFlags.CanFind),
132          ExchangeVersion.Exchange2007_SP1);
133
134  /**
135   * Defines the ParentFolderId property.
136   */
137  public static final PropertyDefinition ParentFolderId =
138      new ComplexPropertyDefinition<FolderId>(
139          FolderId.class,
140          XmlElementNames.ParentFolderId, FieldUris.ParentFolderId, EnumSet
141          .of(PropertyDefinitionFlags.CanFind),
142          ExchangeVersion.Exchange2007_SP1,
143          new ICreateComplexPropertyDelegate<FolderId>() {
144            public FolderId createComplexProperty() {
145              return new FolderId();
146            }
147          });
148
149  /**
150   * Defines the ChildFolderCount property.
151   */
152  public static final PropertyDefinition ChildFolderCount =
153      new IntPropertyDefinition(
154          XmlElementNames.ChildFolderCount, FieldUris.ChildFolderCount,
155          EnumSet.of(PropertyDefinitionFlags.CanFind),
156          ExchangeVersion.Exchange2007_SP1);
157
158  /**
159   * Defines the DisplayName property.
160   */
161  public static final PropertyDefinition DisplayName =
162      new StringPropertyDefinition(
163          XmlElementNames.DisplayName, FieldUris.DisplayName, EnumSet.of(
164          PropertyDefinitionFlags.CanSet,
165          PropertyDefinitionFlags.CanUpdate,
166          PropertyDefinitionFlags.CanDelete,
167          PropertyDefinitionFlags.CanFind),
168          ExchangeVersion.Exchange2007_SP1);
169
170  /**
171   * Defines the UnreadCount property.
172   */
173  public static final PropertyDefinition UnreadCount =
174      new IntPropertyDefinition(
175          XmlElementNames.UnreadCount, FieldUris.UnreadCount, EnumSet
176          .of(PropertyDefinitionFlags.CanFind),
177          ExchangeVersion.Exchange2007_SP1);
178
179  /**
180   * Defines the TotalCount property.
181   */
182  public static final PropertyDefinition TotalCount =
183      new IntPropertyDefinition(
184          XmlElementNames.TotalCount, FieldUris.TotalCount, EnumSet
185          .of(PropertyDefinitionFlags.CanFind),
186          ExchangeVersion.Exchange2007_SP1);
187
188  /**
189   * Defines the ManagedFolderInformation property.
190   */
191  public static final PropertyDefinition ManagedFolderInformation =
192      new ComplexPropertyDefinition<microsoft.exchange.webservices.data.property.complex.ManagedFolderInformation>(
193          ManagedFolderInformation.class,
194          XmlElementNames.ManagedFolderInformation,
195          FieldUris.ManagedFolderInformation,
196          EnumSet.of(PropertyDefinitionFlags.CanFind),
197          ExchangeVersion.Exchange2007_SP1,
198          new ICreateComplexPropertyDelegate
199              <ManagedFolderInformation>() {
200            public ManagedFolderInformation createComplexProperty() {
201              return new ManagedFolderInformation();
202            }
203          });
204
205  /**
206   * Defines the EffectiveRights property.
207   */
208  public static final PropertyDefinition EffectiveRights =
209      new EffectiveRightsPropertyDefinition(
210          XmlElementNames.EffectiveRights, FieldUris.EffectiveRights, EnumSet
211          .of(PropertyDefinitionFlags.CanFind),
212          ExchangeVersion.Exchange2007_SP1);
213
214  /**
215   * Defines the Permissions property.
216   */
217  public static final PropertyDefinition Permissions =
218      new PermissionSetPropertyDefinition(
219          XmlElementNames.PermissionSet, FieldUris.PermissionSet, EnumSet.of(
220          PropertyDefinitionFlags.AutoInstantiateOnRead,
221          PropertyDefinitionFlags.CanSet,
222          PropertyDefinitionFlags.CanUpdate,
223          PropertyDefinitionFlags.CanDelete),
224          ExchangeVersion.Exchange2007_SP1);
225
226  /**
227   * This must be declared after the property definitions.
228   */
229  public static final FolderSchema Instance = new FolderSchema();
230
231  /**
232   * Registers property. IMPORTANT NOTE: PROPERTIES MUST BE REGISTERED IN
233   * SCHEMA ORDER (i.e. the same order as they are defined in types.xsd)
234   */
235  @Override
236  protected void registerProperties() {
237    super.registerProperties();
238
239    this.registerProperty(Id);
240    this.registerProperty(ParentFolderId);
241    this.registerProperty(FolderClass);
242    this.registerProperty(DisplayName);
243    this.registerProperty(TotalCount);
244    this.registerProperty(ChildFolderCount);
245    this.registerProperty(ServiceObjectSchema.extendedProperties);
246    this.registerProperty(ManagedFolderInformation);
247    this.registerProperty(EffectiveRights);
248    this.registerProperty(Permissions);
249    this.registerProperty(UnreadCount);
250  }
251}