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
024 package microsoft.exchange.webservices.data.property.definition;
025
026 import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
027 import microsoft.exchange.webservices.data.core.ExchangeService;
028 import microsoft.exchange.webservices.data.core.PropertyBag;
029 import microsoft.exchange.webservices.data.core.XmlElementNames;
030 import microsoft.exchange.webservices.data.core.service.schema.AppointmentSchema;
031 import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
032 import microsoft.exchange.webservices.data.core.enumeration.property.PropertyDefinitionFlags;
033 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
034 import microsoft.exchange.webservices.data.property.complex.MeetingTimeZone;
035 import microsoft.exchange.webservices.data.property.complex.time.TimeZoneDefinition;
036
037 import javax.xml.stream.XMLStreamException;
038
039 import java.util.EnumSet;
040 import java.util.List;
041
042 /**
043 * Represents a property definition for property of type TimeZoneInfo.
044 */
045 public class StartTimeZonePropertyDefinition extends TimeZonePropertyDefinition {
046
047 /**
048 * Initializes a new instance of the StartTimeZonePropertyDefinition
049 * class.
050 *
051 * @param xmlElementName the xml element name
052 * @param uri the uri
053 * @param flags the flags
054 * @param version the version
055 */
056 public StartTimeZonePropertyDefinition(String xmlElementName, String uri,
057 EnumSet<PropertyDefinitionFlags> flags, ExchangeVersion version) {
058 super(xmlElementName, uri, flags, version);
059 }
060
061 /**
062 * Registers associated internal property.
063 *
064 * @param properties the property
065 */
066 protected void registerAssociatedInternalProperties(
067 List<PropertyDefinition> properties) {
068 super.registerAssociatedInternalProperties(properties);
069
070 properties.add(AppointmentSchema.MeetingTimeZone);
071 }
072
073 /**
074 * Writes to XML.
075 *
076 * @param writer the writer
077 * @param propertyBag the property bag
078 * @param isUpdateOperation the is update operation
079 * @throws Exception the exception
080 */
081 public void writePropertyValueToXml(EwsServiceXmlWriter writer, PropertyBag propertyBag,
082 boolean isUpdateOperation)
083 throws Exception {
084 Object value = propertyBag.getObjectFromPropertyDefinition(this);
085
086 if (value != null) {
087 final ExchangeService service = (ExchangeService) writer.getService();
088 if (service.getRequestedServerVersion() == ExchangeVersion.Exchange2007_SP1) {
089 if (!service.getExchange2007CompatibilityMode()) {
090 MeetingTimeZone meetingTimeZone = new MeetingTimeZone((TimeZoneDefinition) value);
091 meetingTimeZone.writeToXml(writer, XmlElementNames.MeetingTimeZone);
092 }
093 } else {
094 super.writePropertyValueToXml(writer, propertyBag, isUpdateOperation);
095 }
096 }
097 }
098
099 /**
100 * Writes to XML.
101 *
102 * @param writer the writer
103 * @throws XMLStreamException the XML stream exception
104 * @throws ServiceXmlSerializationException the service xml serialization exception
105 */
106 public void writeToXml(EwsServiceXmlWriter writer)
107 throws XMLStreamException, ServiceXmlSerializationException {
108 if (writer.getService().getRequestedServerVersion() == ExchangeVersion.Exchange2007_SP1) {
109 AppointmentSchema.MeetingTimeZone.writeToXml(writer);
110 } else {
111 super.writeToXml(writer);
112 }
113 }
114
115 /**
116 * Determines whether the specified flag is set.
117 *
118 * @param flag The flag.
119 * @param version Requested version.
120 * @return <c>true</c> if the specified
121 * flag is set; otherwise, <c>false</c>.
122 */
123 @Override public boolean hasFlag(PropertyDefinitionFlags flag, ExchangeVersion version) {
124 if (version != null && (version == ExchangeVersion.Exchange2007_SP1)) {
125 return AppointmentSchema.MeetingTimeZone.hasFlag(flag, version);
126 } else {
127 return super.hasFlag(flag, version);
128 }
129 }
130
131 }