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.EmailAddress; 031import microsoft.exchange.webservices.data.property.complex.EmailAddressCollection; 032import microsoft.exchange.webservices.data.property.complex.ICreateComplexPropertyDelegate; 033import microsoft.exchange.webservices.data.property.definition.BoolPropertyDefinition; 034import microsoft.exchange.webservices.data.property.definition.ByteArrayPropertyDefinition; 035import microsoft.exchange.webservices.data.property.definition.ComplexPropertyDefinition; 036import microsoft.exchange.webservices.data.property.definition.ContainedPropertyDefinition; 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 e-mail messages. 044 */ 045@Schema 046public class EmailMessageSchema extends ItemSchema { 047 048 /** 049 * The Interface FieldUris. 050 */ 051 private static interface FieldUris { 052 053 /** 054 * The Conversation index. 055 */ 056 String ConversationIndex = "message:ConversationIndex"; 057 058 /** 059 * The Conversation topic. 060 */ 061 String ConversationTopic = "message:ConversationTopic"; 062 063 /** 064 * The Internet message id. 065 */ 066 String InternetMessageId = "message:InternetMessageId"; 067 068 /** 069 * The Is read. 070 */ 071 String IsRead = "message:IsRead"; 072 073 /** 074 * The Is response requested. 075 */ 076 String IsResponseRequested = "message:IsResponseRequested"; 077 078 /** 079 * The Is read receipt requested. 080 */ 081 String IsReadReceiptRequested = "message:IsReadReceiptRequested"; 082 083 /** 084 * The Is delivery receipt requested. 085 */ 086 String IsDeliveryReceiptRequested = 087 "message:IsDeliveryReceiptRequested"; 088 089 /** 090 * The References. 091 */ 092 String References = "message:References"; 093 094 /** 095 * The Reply to. 096 */ 097 String ReplyTo = "message:ReplyTo"; 098 099 /** 100 * The From. 101 */ 102 String From = "message:From"; 103 104 /** 105 * The Sender. 106 */ 107 String Sender = "message:Sender"; 108 109 /** 110 * The To recipients. 111 */ 112 String ToRecipients = "message:ToRecipients"; 113 114 /** 115 * The Cc recipients. 116 */ 117 String CcRecipients = "message:CcRecipients"; 118 119 /** 120 * The Bcc recipients. 121 */ 122 String BccRecipients = "message:BccRecipients"; 123 124 /** 125 * The Received by. 126 */ 127 String ReceivedBy = "message:ReceivedBy"; 128 129 /** 130 * The Received representing. 131 */ 132 String ReceivedRepresenting = "message:ReceivedRepresenting"; 133 } 134 135 136 /** 137 * Defines the ToRecipients property. 138 */ 139 public static final PropertyDefinition ToRecipients = 140 new ComplexPropertyDefinition<EmailAddressCollection>( 141 EmailAddressCollection.class, 142 XmlElementNames.ToRecipients, 143 FieldUris.ToRecipients, 144 EnumSet.of(PropertyDefinitionFlags.AutoInstantiateOnRead, 145 PropertyDefinitionFlags.CanSet, 146 PropertyDefinitionFlags.CanUpdate, 147 PropertyDefinitionFlags.CanDelete), 148 ExchangeVersion.Exchange2007_SP1, 149 new ICreateComplexPropertyDelegate<EmailAddressCollection>() { 150 @Override 151 public EmailAddressCollection createComplexProperty() { 152 return new EmailAddressCollection(); 153 } 154 }); 155 156 /** 157 * Defines the BccRecipients property. 158 */ 159 public static final PropertyDefinition BccRecipients = 160 new ComplexPropertyDefinition<EmailAddressCollection>( 161 EmailAddressCollection.class, 162 XmlElementNames.BccRecipients, 163 FieldUris.BccRecipients, 164 EnumSet.of(PropertyDefinitionFlags.AutoInstantiateOnRead, 165 PropertyDefinitionFlags.CanSet, 166 PropertyDefinitionFlags.CanUpdate, 167 PropertyDefinitionFlags.CanDelete), 168 ExchangeVersion.Exchange2007_SP1, 169 new ICreateComplexPropertyDelegate 170 <EmailAddressCollection>() { 171 @Override 172 public EmailAddressCollection createComplexProperty() { 173 return new EmailAddressCollection(); 174 } 175 }); 176 177 /** 178 * Defines the CcRecipients property. 179 */ 180 public static final PropertyDefinition CcRecipients = 181 new ComplexPropertyDefinition<EmailAddressCollection>( 182 EmailAddressCollection.class, 183 XmlElementNames.CcRecipients, 184 FieldUris.CcRecipients, 185 EnumSet.of(PropertyDefinitionFlags.AutoInstantiateOnRead, 186 PropertyDefinitionFlags.CanSet, 187 PropertyDefinitionFlags.CanUpdate, 188 PropertyDefinitionFlags.CanDelete), 189 ExchangeVersion.Exchange2007_SP1, 190 new ICreateComplexPropertyDelegate 191 <EmailAddressCollection>() { 192 @Override 193 public EmailAddressCollection createComplexProperty() { 194 return new EmailAddressCollection(); 195 } 196 }); 197 198 /** 199 * Defines the ConversationIndex property. 200 */ 201 public static final PropertyDefinition ConversationIndex = 202 new ByteArrayPropertyDefinition( 203 XmlElementNames.ConversationIndex, FieldUris.ConversationIndex, 204 EnumSet.of(PropertyDefinitionFlags.CanFind), 205 ExchangeVersion.Exchange2007_SP1); 206 207 /** 208 * Defines the ConversationTopic property. 209 */ 210 public static final PropertyDefinition ConversationTopic = 211 new StringPropertyDefinition( 212 XmlElementNames.ConversationTopic, FieldUris.ConversationTopic, 213 EnumSet.of(PropertyDefinitionFlags.CanFind), 214 ExchangeVersion.Exchange2007_SP1); 215 216 /** 217 * Defines the From property. 218 */ 219 public static final PropertyDefinition From = 220 new ContainedPropertyDefinition<EmailAddress>( 221 EmailAddress.class, 222 XmlElementNames.From, FieldUris.From, XmlElementNames.Mailbox, 223 EnumSet.of(PropertyDefinitionFlags.CanSet, 224 PropertyDefinitionFlags.CanUpdate, 225 PropertyDefinitionFlags.CanDelete, 226 PropertyDefinitionFlags.CanFind), 227 ExchangeVersion.Exchange2007_SP1, 228 new ICreateComplexPropertyDelegate<EmailAddress>() { 229 @Override 230 public EmailAddress createComplexProperty() { 231 return new EmailAddress(); 232 } 233 }); 234 235 /** 236 * Defines the IsDeliveryReceiptRequested property. 237 */ 238 public static final PropertyDefinition IsDeliveryReceiptRequested = 239 new BoolPropertyDefinition( 240 XmlElementNames.IsDeliveryReceiptRequested, 241 FieldUris.IsDeliveryReceiptRequested, EnumSet.of( 242 PropertyDefinitionFlags.CanSet, 243 PropertyDefinitionFlags.CanUpdate, 244 PropertyDefinitionFlags.CanDelete, 245 PropertyDefinitionFlags.CanFind), 246 ExchangeVersion.Exchange2007_SP1); 247 248 /** 249 * Defines the IsRead property. 250 */ 251 public static final PropertyDefinition IsRead = new BoolPropertyDefinition( 252 XmlElementNames.IsRead, FieldUris.IsRead, EnumSet.of( 253 PropertyDefinitionFlags.CanSet, 254 PropertyDefinitionFlags.CanUpdate, 255 PropertyDefinitionFlags.CanFind), 256 ExchangeVersion.Exchange2007_SP1); 257 258 /** 259 * Defines the IsReadReceiptRequested property. 260 */ 261 public static final PropertyDefinition IsReadReceiptRequested = 262 new BoolPropertyDefinition( 263 XmlElementNames.IsReadReceiptRequested, 264 FieldUris.IsReadReceiptRequested, EnumSet.of( 265 PropertyDefinitionFlags.CanSet, 266 PropertyDefinitionFlags.CanUpdate, 267 PropertyDefinitionFlags.CanDelete, 268 PropertyDefinitionFlags.CanFind), 269 ExchangeVersion.Exchange2007_SP1); 270 271 /** 272 * Defines the IsResponseRequested property. 273 */ 274 public static final PropertyDefinition IsResponseRequested = 275 new BoolPropertyDefinition( 276 XmlElementNames.IsResponseRequested, FieldUris.IsResponseRequested, 277 EnumSet.of(PropertyDefinitionFlags.CanSet, 278 PropertyDefinitionFlags.CanUpdate, 279 PropertyDefinitionFlags.CanDelete, 280 PropertyDefinitionFlags.CanFind), 281 ExchangeVersion.Exchange2007_SP1, true); // isNullable 282 283 /** 284 * Defines the InternetMessageId property. 285 */ 286 public static final PropertyDefinition InternetMessageId = 287 new StringPropertyDefinition( 288 XmlElementNames.InternetMessageId, FieldUris.InternetMessageId, 289 EnumSet.of(PropertyDefinitionFlags.CanFind), 290 ExchangeVersion.Exchange2007_SP1); 291 292 /** 293 * Defines the References property. 294 */ 295 public static final PropertyDefinition References = 296 new StringPropertyDefinition( 297 XmlElementNames.References, FieldUris.References, EnumSet.of( 298 PropertyDefinitionFlags.CanSet, 299 PropertyDefinitionFlags.CanUpdate, 300 PropertyDefinitionFlags.CanDelete, 301 PropertyDefinitionFlags.CanFind), 302 ExchangeVersion.Exchange2007_SP1); 303 304 /** 305 * Defines the ReplyTo property. 306 */ 307 public static final PropertyDefinition ReplyTo = 308 new ComplexPropertyDefinition<EmailAddressCollection>( 309 EmailAddressCollection.class, 310 XmlElementNames.ReplyTo, 311 FieldUris.ReplyTo, 312 EnumSet.of(PropertyDefinitionFlags.AutoInstantiateOnRead, 313 PropertyDefinitionFlags.CanSet, 314 PropertyDefinitionFlags.CanUpdate, 315 PropertyDefinitionFlags.CanDelete), 316 ExchangeVersion.Exchange2007_SP1, 317 new ICreateComplexPropertyDelegate 318 <EmailAddressCollection>() { 319 @Override 320 public EmailAddressCollection createComplexProperty() { 321 return new EmailAddressCollection(); 322 } 323 }); 324 325 /** 326 * Defines the Sender property. 327 */ 328 public static final PropertyDefinition Sender = 329 new ContainedPropertyDefinition<EmailAddress>( 330 EmailAddress.class, 331 XmlElementNames.Sender, FieldUris.Sender, XmlElementNames.Mailbox, 332 EnumSet.of(PropertyDefinitionFlags.CanSet, 333 PropertyDefinitionFlags.CanFind), 334 ExchangeVersion.Exchange2007_SP1, 335 new ICreateComplexPropertyDelegate<EmailAddress>() { 336 @Override 337 public EmailAddress createComplexProperty() { 338 return new EmailAddress(); 339 } 340 }); 341 342 /** 343 * Defines the ReceivedBy property. 344 */ 345 public static final PropertyDefinition ReceivedBy = 346 new ContainedPropertyDefinition<EmailAddress>( 347 EmailAddress.class, 348 XmlElementNames.ReceivedBy, FieldUris.ReceivedBy, 349 XmlElementNames.Mailbox, EnumSet 350 .of(PropertyDefinitionFlags.CanFind), 351 ExchangeVersion.Exchange2007_SP1, 352 new ICreateComplexPropertyDelegate<EmailAddress>() { 353 @Override 354 public EmailAddress createComplexProperty() { 355 return new EmailAddress(); 356 } 357 }); 358 359 /** 360 * Defines the ReceivedRepresenting property. 361 */ 362 public static final PropertyDefinition ReceivedRepresenting = 363 new ContainedPropertyDefinition<EmailAddress>( 364 EmailAddress.class, 365 XmlElementNames.ReceivedRepresenting, 366 FieldUris.ReceivedRepresenting, XmlElementNames.Mailbox, EnumSet 367 .of(PropertyDefinitionFlags.CanFind), 368 ExchangeVersion.Exchange2007_SP1, 369 new ICreateComplexPropertyDelegate<EmailAddress>() { 370 @Override 371 public EmailAddress createComplexProperty() { 372 return new EmailAddress(); 373 } 374 }); 375 376 /** 377 * The Constant Instance. 378 */ 379 public static final EmailMessageSchema Instance = 380 new EmailMessageSchema(); 381 382 /** 383 * Gets the single instance of EmailMessageSchema. 384 * 385 * @return single instance of EmailMessageSchema 386 */ 387 public static EmailMessageSchema getInstance() { 388 return Instance; 389 } 390 391 /** 392 * Registers property. IMPORTANT NOTE: PROPERTIES MUST BE REGISTERED IN 393 * SCHEMA ORDER (i.e. the same order as they are defined in types.xsd) 394 */ 395 @Override 396 protected void registerProperties() { 397 super.registerProperties(); 398 this.registerProperty(Sender); 399 this.registerProperty(ToRecipients); 400 this.registerProperty(CcRecipients); 401 this.registerProperty(BccRecipients); 402 this.registerProperty(IsReadReceiptRequested); 403 this.registerProperty(IsDeliveryReceiptRequested); 404 this.registerProperty(ConversationIndex); 405 this.registerProperty(ConversationTopic); 406 this.registerProperty(From); 407 this.registerProperty(InternetMessageId); 408 this.registerProperty(IsRead); 409 this.registerProperty(IsResponseRequested); 410 this.registerProperty(References); 411 this.registerProperty(ReplyTo); 412 this.registerProperty(ReceivedBy); 413 this.registerProperty(ReceivedRepresenting); 414 } 415 416 /** 417 * Initializes a new instance. 418 */ 419 protected EmailMessageSchema() { 420 super(); 421 } 422}